CleverStack/cleverstack-cli

View on GitHub
lib/utils.js

Summary

Maintainability
C
1 day
Test Coverage
var path            = require('path')
  , colors          = require(path.resolve(path.join(__dirname, 'colors')))
  , barItems        = {}
  , barRunning      = false
  , runningTime     = null
  , originalConsole = console
  , bar;

/**
 * Prints an error message and ends
 * the process if passthrough is not true
 *
 * @param  {String} msg
 * @param  {Boolean=} passthrough
 * @api public
 */
exports.fail = exports.error = function(msg, passthrough) {
  console.log(colors.red(msg));

  if (passthrough !== true) {
    process.exit(0);
  }

  return this;
};

/**
 * Prints a successful message
 *
 * @param  {String} msg
 * @api public
 */

exports.success = function(msg) {
  console.log(colors.green('\u2714  ' + msg));
  return this;
};

/**
 * Prints an informative message
 *
 * @param  {String} msg
 * @api public
 */

exports.info = function(msg, tree) {
  if (undefined === tree) {
    tree = '├── ';
  } else if (tree === false) {
    tree = ' ';
  }
  if (/^\ \ (.*)/.test(msg)) {
    msg = '  ' + tree + RegExp.$1;
  }
  console.log(colors.blue(msg));
  return this;
};

/**
 * Prints a warning message / additional informative message
 *
 * @param  {String} msg
 * @api public
 */

exports.warn = function(msg, tree) {
  if (undefined === tree) {
    tree = '├── \u26A0 ';
  } else if (tree === false) {
    tree = '\u26A0 ';
  }
  if (/^\ \ (.*)/.test(msg)) {
    msg = '  ' + tree + RegExp.$1;
  }
  console.log(colors.orange(msg));
  return this;
};

exports.bar = bar;
exports.barItems = barItems;

exports.initBar = function() {
  if (undefined === bar) {
    bar = require('node-status');
    bar.clear();

    if (typeof process.stdout.cursorTo === 'function') {
      process.stdout.cursorTo(0);
    }

    // Define the main progress bar
    barItems.progress = bar.addItem('Installation Progress', {
      color: 'green',
      type: [ 'bar','percentage' ],
      max: 0,
      precision: 0
    });

    // Define the currently installing section for the bar
    barItems.installing = bar.addItem('Installing', {
      color: 'cyan',
      type: 'text',
      text: 'Loading...'
    });

    // Define the currently running section for the bar
    barItems.running = bar.addItem('Step', {
      color: 'yellow',
      type: 'text',
      text: 'Loading...'
    });

    barItems.runningTime = bar.addItem('Step Time', {
      color: 'yellow',
      type: 'text',
      text: '0',
      precision: 0
    });

    setInterval(function() {
      runningTime += 1;
      barItems.runningTime.text = bar.nicetime(runningTime, true);
    }, 1000);
  }
};

exports.installing = function(name) {
  if (undefined !== barItems.installing) {
    barItems.installing.text = name;
  }
  return this;
};

exports.running = function(task) {
  if (undefined !== barItems.running) {
    barItems.running.text = task;
    runningTime = 0;
  }
  return this;
};

exports.progress = function() {
  if (undefined !== barItems.progress) {
    barItems.progress.inc();
  }
  return this;
};

exports.expandProgress = function(amount) {
  if (undefined !== barItems.progress) {
    barItems.progress.max += amount;
  }
  return this;
};

exports.finishProgress = function() {
  if (undefined !== barItems.progress) {
    barItems.progress.val = barItems.progress.max;
  }
  return this;
};

exports.startBar = function(callback) {
  if (undefined !== bar && !barRunning) {
    barRunning = true;

    // Override the console and process functions used to output
    // GLOBAL.console = process.stdout = process.stderr = bar.console();
    GLOBAL.console = bar.console();

    // Start the bar
    bar.start({
      interval: 50,
      invert: false
    });

    // Give the bar a chance to start
    setTimeout(callback, 2000);
  } else {
    callback();
  }
};

exports.stopBar = function(callback) {
  if (barRunning) {
    bar.stop();

    setTimeout(function() {

      barRunning = false;
      GLOBAL.console = originalConsole;

      setTimeout(callback, 100);

    }, 2000);
  } else {
    callback();
  }
};