shuvalov-anton/node-clusterize-cli

View on GitHub
bin/clusterize

Summary

Maintainability
Test Coverage
#!/usr/bin/env node
'use strict';

/**
 * Module dependencies.
 */
var program        = require('commander');
var pkg            = require('../package.json');
var path           = require('path');
var Clusterize     = require('../lib/node-clusterize');
var exec           = require('child_process').exec;
var log            = require('util').log;
var colors         = require('colors');
var cluster        = require('cluster');
var cpus           = require('os').cpus().length;
var fs             = require('fs');

// End of Dependencies



var options        = {};

/**
 * Setup CLI options.
 */
module.exports = program
  .version(pkg.version)
  .option('list', 'list of running custers')
  .option('kill <pid>', 'stop daemon and all it\'s workers')
  .option('-a, --app <path>', 'Add path to demonizing app')
  .option('-w, --workers <q>', 'Set quantity of workers for your app. Defaut value is cpu.cores*2')
  .option('-l, --log <path>', 'Add path to demonizing app')
  .parse(process.argv);


/**
 * Print list of running daemons
 */
if (program.list) {
  return exec('ps aux | grep "clusterize mas" | grep -v grep | awk \'{print $2 " " $11}\'', function (err, stdout) {
    if (!stdout) return console.log('nothing'.red);
    console.log(stdout.green);
  });
}


/**
 * kill -9 Daemons by PID.
 */
if (program.kill) {
  return exec('kill -9 ' + program.kill, function (err, stdout) {
    console.log(err && err.message.red || 'done'.green);
  });
}


/**
 * Start new daemon.
 */
if (program.app) {

  var logfile = program.log && path.resolve(process.cwd(), program.log);
  cluster.isMaster && console.log('done'.green);

  new Clusterize({
    app: path.resolve(process.cwd(), program.app),
    workers: program.workers || cpus * 2,
    stdout: logfile && fs.openSync(logfile, 'a'),
    stderr: logfile && fs.openSync(logfile, 'a')
  });

} else {

  return module.parent
    ? null
    : program.help();

}