コード例 #1
0
ファイル: stack.js プロジェクト: DavidVasquez/dreadnot
/**
 * Stack Constructor.
 * @constructor
 * @param {String} name The name of this stack.
 * @param {Object} config The global config.
 */
function Stack(name, dreadnot, config) {
  var self = this,
      logName = sprintf('deploy.stack.%s', name),
      sinkName = sprintf('stack.%s', name);

  this.name = name;
  this.dreadnot = dreadnot;
  this.module = require(path.join(path.resolve(dreadnot.stackdir), name));
  this.config = config;
  this.stackConfig = config.stacks[name];
  this.log = logmagic.local(logName);
  this.logRoot = path.join(config.data_root, 'logs', name);
  this.newestDeployments = {};
  this.current = null;
  this._cache = {};
  this._waiting = {};

  logmagic.registerSink(sinkName, function(moduleName, lvl, msg, obj) {
    var both = moduleName.split('.').slice(-2),
        logPath = ['regions', both[0], 'deployments', both[1], 'log'].join('.');
    self.emit(logPath, {
      lvl: lvl,
      msg: msg,
      obj: obj
    });
  });
  logmagic.route(sprintf('%s.*', logName), logmagic.INFO, sinkName);
}
コード例 #2
0
ファイル: entry.js プロジェクト: ap0ught/dreadnot
exports.run = function() {
  var argv, config, d;

  optimist = optimist.usage('Usage: $0 -p [port] -c [/path/to/settings.js] -s [/path/to/stack/directory/] --log-sink [logmagic sink]');
  optimist = optimist['default']('p', 8000);
  optimist = optimist['default']('c', './local_settings');
  optimist = optimist['default']('s', './stacks');
  optimist = optimist['default']('log-sink', 'console');
  argv = optimist.argv;

  logmagic.route('__root__', logmagic.DEBUG, argv['log-sink']);

  config = require(path.resolve(argv.c)).config;
  d = new Dreadnot(config, argv.s);

  d.init(function(err) {
    if (err) {
      log.error('error initializing dreadnot', {err: err});
      process.exit(1);
      return;
    }

    plugins.run(d);
    webApp.run(argv.p, d);
  });
};
コード例 #3
0
ファイル: settings.js プロジェクト: racker/service-registry
function applyRequires(settings) {
  if (settings.LOG_LEVEL) {
    var logmagic = require('logmagic');
    /* TODO: have log destinations here */
    logmagic.route('__root__', logmagic[settings.LOG_LEVEL], settings.LOG_METHOD);
  }
}
コード例 #4
0
ファイル: stack.js プロジェクト: needle/dreadnot
/**
 * Stack Constructor.
 * @constructor
 * @param {String} name The name of this stack.
 * @param {Object} config The global config.
 */
function Stack(name, dreadnot, config) {
  var self = this,
      logName = sprintf('deploy.stack.%s', name),
      sinkName = sprintf('stack.%s', name),
      moduleName;

  if (config.stacks[name].hasOwnProperty('module_name')) {
    moduleName = config.stacks[name].module_name;
  }
  else {
    moduleName = name;
  }

  this.name = name;
  this.dreadnot = dreadnot;
  this.module = require(path.join(path.resolve(dreadnot.stackdir), moduleName));
  this.config = config;
  this.stackConfig = config.stacks[name];
  this.log = logmagic.local(logName);
  this.logRoot = path.join(config.data_root, 'logs', name);
  this.newestDeployments = {};
  this.current = null;
  this._cache = {};
  this._waiting = {};

  logmagic.registerSink(sinkName, function(moduleName, lvl, msg, obj) {
    var both = moduleName.split('.').slice(-2),
        logPath = ['regions', both[0], 'deployments', both[1], 'log'].join('.');

    // Fix serialization of Error objects
    if (obj.err && obj.err instanceof Error) {
      obj.err = {
        name: obj.err.name,
        message: obj.err.message,
        stack: obj.err.stack
      };
    }

    self.emit(logPath, {
      lvl: lvl,
      msg: msg,
      obj: obj
    });
  });
  logmagic.route(sprintf('%s.*', logName), logmagic.INFO, sinkName);
}
function main() {
  var items = [], i, client,
      stats = {'errors': {'total': 0, 'register': 0, 'heartbeat': 0}};

  client = new Client(argv.username, argv['api-key'], 'us', {'url': argv.url,
                                                             'debug': argv.debug});

  if (argv.debug) {
    logmagic.route('service-registry-client.*', logmagic.DEBUG, 'console');
  }

  for (i = 0; i < argv.services; i++) {
    items.push(i);
  }

  async.forEach(items, function(index, callback) {
    createService(stats, client, index, argv.ensure, function(err) {
      // Error is not fatal
      callback();
    });
  },

  function() {
    console.log('Created ' + argv.services + ' services');
  });

  process.on('SIGINT', function() {
    var key;
    console.log('Exiting...\n');

    if (argv.stats) {
      for (key in stats.errors) {
        if (stats.errors.hasOwnProperty(key)) {
          console.log(sprintf('# %s errors: %s', key, stats.errors[key]));
        }
      }
    }

    process.exit();
  });
}
コード例 #6
0
ファイル: run.js プロジェクト: a0n/whiskey
function run(cwd, argv) {
  var customAssertModule, exportedFunctions;
  var runner, testReporter, coverageArgs;
  var socketPath, concurrency, scopeLeaks, runnerArgs;

  if ((argv === undefined) && (cwd instanceof Array)) {
    argv = cwd;
  }

  var p = parser.getParser(constants.WHISKEY_OPTIONS);
  p.banner = 'Usage: whiskey [options] --tests "files"';
  var options = parser.parseArgv(p, argv);

  if (options['coverage-files']) {
      var coverageReporter = options['coverage-reporter'] || constants.DEFAULT_COVERAGE_REPORTER;
      var coverageReporterOptions = {
        'directory': options['coverage-dir'],
        'file': options['coverage-file']
      };

      this._coverageReporter = getReporter('coverage',
                                            coverageReporter,
                                            [],
                                          coverageReporterOptions);
    var coverageObj = coverage.aggregateCoverage(options['coverage-files'].split(','));
    this._coverageReporter.handleTestsComplete(coverageObj);
  }
  else if (options.tests && options.tests.length > 0) {
    options.tests = options.tests.split(' ');

    if (options['debug'] && options.tests.length > 1) {
      throw new Error('--debug option can currently only be used with a single test file');
    }
    else if (options['gen-makefile'] && options['makefile-path']) {
      generateMakefile(options.tests, options['makefile-path'], function(err) {
        if (err) {
          throw err;
        }

        util.puts(sprintf('Makefile has been saved in %s.', options['makefile-path']));
      });

      return;
    }

    customAssertModule = options['custom-assert-module'];
    if (customAssertModule) {
      customAssertModule = (customAssertModule.charAt(0) !== '/') ? path.join(cwd, customAssertModule) : customAssertModule;

      if (path.existsSync(customAssertModule)) {
        customAssertModule = customAssertModule.replace(/$\.js/, '');
      }
      else {
        customAssertModule = null;
      }
    }

    concurrency = options['sequential'] ? 1 : options['concurrency'];
    concurrency = concurrency || constants.DEFAULT_CONCURRENCY;
    scopeLeaks = options['scope-leaks'];

    options['print-stdout'] = (options['quiet']) ? false : true;
    options['print-stderr'] = (options['quiet']) ? false : true;

    if (options['quiet']) {
      logmagic.registerSink('null', function nullLogger() {});
      logmagic.route('__root__', logmagic.INFO, 'null');
    }

    runner = new TestRunner(options);
    runnerArgs = [options['test-init-file'], options['chdir'],
                  customAssertModule, options['timeout'],
                  concurrency, options['fail-fast']];


    if (options['coverage']) {
      var nodePath = process.env['NODE_PATH'];

      if (!nodePath || nodePath.indexOf('lib-cov') === -1) {
        throw new Error('lib-cov is not in NODE_PATH. NODE_PATH environment variable' +
                         ' must contain lib-cov path for the coverage to work.');
      }

      coverageArgs = ['jscoverage'];

      if (options['coverage-encoding']) {
        coverageArgs.push(sprintf('--encoding=%s', options['coverage-encoding']));
      }

      if (options['coverage-exclude']) {
        coverageArgs.push(sprintf('--exclude=%s', options['coverage-exclude']));
      }

      if (options['coverage-no-instrument']) {
        coverageArgs.push(sprintf('--no-instrument=%s', options['coverage-no-instrument']));
      }

      coverageArgs.push(sprintf('lib %s', constants.COVERAGE_PATH));
      coverageArgs = coverageArgs.join(' ');

      if (!path.existsSync(path.join(process.cwd(), constants.COVERAGE_PATH)) || !options['coverage-no-regen']) {
        exec(sprintf('rm -fr %s ; %s', constants.COVERAGE_PATH, coverageArgs), function(err) {
          if (err) {
            if (err.message.match(/jscoverage: not found/i)) {
              err = new Error('jscoverage binary not found. To use test coverage ' +
                              ' you need to install node-jscoverag binary - ' +
                              'https://github.com/visionmedia/node-jscoverage');
            }

            throw err;
          }

          runner.runTests.apply(runner, runnerArgs);
        });
      }
      else {
        runner.runTests.apply(runner, runnerArgs);
      }
    }
    else {
      runner.runTests.apply(runner, runnerArgs);
    }

  }
  else if (!p._halted) {
    console.log(p.banner);
  }

  process.on('SIGINT', function onSigint() {
    runner.forceStop();
  });

  process.on('exit', function() {
    process.reallyExit(exports.exitCode);
  });
}
コード例 #7
0
ファイル: run.js プロジェクト: sam-falvo/whiskey
function run(cwd, argv) {
  var customAssertModule, exportedFunctions;
  var runner, testReporter, coverageArgs;
  var socketPath, concurrency, scopeLeaks, runnerArgs;
  var intersection;
  var chdir, ms, nodePath, istanbulBinary;

  if ((argv === undefined) && (cwd instanceof Array)) {
    argv = cwd;
  }

  var p = parser.getParser(constants.WHISKEY_OPTIONS);
  p.banner = 'Usage: whiskey [options] --tests "files"';
  var options = parser.parseArgv(p, argv);

  if (options['coverage-files']) {
      var coverageReporter = options['coverage-reporter'] || constants.DEFAULT_COVERAGE_REPORTER;
      var coverageReporterOptions = {
        'directory': options['coverage-dir'],
        'file': options['coverage-file']
      };

      this._coverageReporter = getReporter('coverage',
                                            coverageReporter,
                                            [],
                                          coverageReporterOptions);
    var coverageObj = coverage.aggregateCoverage(options['coverage-files'].split(','));
    this._coverageReporter.handleTestsComplete(coverageObj);
  }
  else if ((options.tests && options.tests.length > 0) ||
           (options['independent-tests'] && options['independent-tests'].length > 0)) {
    options.tests = options.tests ? options.tests.split(' ') : [];
    options['independent-tests'] = options['independent-tests'] ? options['independent-tests'].split(' ') : [];

    ms = parseInt(options['max-suites'], 10);

    if (ms) {
      options['max-suites'] = ms;
    } else {
      options['max-suites'] = 5;
    }

    intersection = underscore.intersection(options.tests, options['independent-tests']);
    if (intersection.length > 0) {
      util.puts(sprintf('The following tests cannot appear in both --tests and --independen-tests: %s', intersection));
      process.exit(1);
    }

    if (options.hasOwnProperty('debug')) {
      var debugPort = parseInt(options['debug'], 10);

      if (isNaN(debugPort)) {
        console.log('Invalid debug port: ' + options['debug']);
        process.exit(1);
      }

      options['debug'] = debugPort;
    }

    if (options['debug'] && options.tests.length > 1) {
      throw new Error('--debug option can currently only be used with a single test file');
    }
    else if (options['debug'] && options['independent-tests'].length > 1) {
      throw new Error('--debug cannot be used with --independent-tests.');
    }
    else if (options['gen-makefile'] && options['makefile-path']) {
      generateMakefile(options.tests, options['makefile-path'], function(err) {
        if (err) {
          throw err;
        }

        util.puts(sprintf('Makefile has been saved in %s.', options['makefile-path']));
      });

      return;
    }

    customAssertModule = options['custom-assert-module'];
    if (customAssertModule) {
      customAssertModule = (customAssertModule.charAt(0) !== '/') ? path.join(cwd, customAssertModule) : customAssertModule;

      if (path.existsSync(customAssertModule)) {
        customAssertModule = customAssertModule.replace(/$\.js/, '');
      }
      else {
        customAssertModule = null;
      }
    }

    concurrency = options['sequential'] ? 1 : options['concurrency'];
    concurrency = concurrency || constants.DEFAULT_CONCURRENCY;
    scopeLeaks = options['scope-leaks'];

    options['print-stdout'] = (options['quiet']) ? false : true;
    options['print-stderr'] = (options['quiet']) ? false : true;

    if (options['quiet']) {
      logmagic.registerSink('null', function nullLogger() {});
      logmagic.route('__root__', logmagic.INFO, 'null');
    }

    runner = new TestRunner(options);
    chdir = null;

    if (options['chdir']) {
      chdir = path.resolve(process.cwd(), options['chdir']);
    }

    runnerArgs = [options['test-init-file'], chdir,
                  customAssertModule, options['timeout'],
                  concurrency, options['fail-fast']];


    if (options['coverage']) {
      nodePath = process.env['NODE_PATH'];

      if (!nodePath || nodePath.indexOf('lib-cov') === -1) {
        throw new Error('lib-cov is not in NODE_PATH. NODE_PATH environment variable' +
                         ' must contain lib-cov path for the coverage to work.');
      }

      istanbulBinary = path.resolve(__dirname, '../node_modules/.bin/istanbul');
      coverageArgs = [istanbulBinary, 'instrument', '--no-compact'];

      if (options['coverage-exclude']) {
        coverageArgs.push(sprintf('-x %s', options['coverage-exclude']));
      }

      coverageArgs.push(sprintf('--output %s lib', constants.COVERAGE_PATH));
      coverageArgs = coverageArgs.join(' ');

      if (!path.existsSync(path.join(process.cwd(), constants.COVERAGE_PATH)) || !options['coverage-no-regen']) {
        exec(sprintf('rm -fr %s ; %s', constants.COVERAGE_PATH, coverageArgs), function(err) {
          if (err) {
            throw err;
          }

          runner.runTests.apply(runner, runnerArgs);
        });
      }
      else {
        runner.runTests.apply(runner, runnerArgs);
      }
    }
    else {
      runner.runTests.apply(runner, runnerArgs);
    }

  }
  else if (!p._halted) {
    console.log(p.banner);
  }

  process.on('SIGINT', function onSigint() {
    runner.forceStop();
  });

  process.on('exit', function() {
    process.reallyExit(exports.exitCode);
  });
}
コード例 #8
0
var SERVICE_TIMEOUT = 3;

var argv = require('optimist')
    .usage('Usage: $0 --url=<api url> --username=<api key> --key=<api key>' +
           ' --region=<account region> --prefix=<name prefix> --auth-url=<auth url>')
    .default('region', 'us')
    .default('prefix', 'us-')
    .default('auth-url', 'https://identity.api.rackspacecloud.com/v2.0')
    .describe('l', 'Use this if script is running locally, log output to stdout instead of syslog')
    .demand(['url', 'username', 'key'])
    .argv;

if (!argv.l) {
  logmagic.registerSink('udpSink', logging.getUdpLoggingSink(dgram.createSocket('udp4'), 'localhost', 512));
  logmagic.route('scripts.verify-api-functionality', logmagic.DEBUG, 'udpSink');
}

/*
 * 1. Create a service
 * 2. Heartbeat the service
 * 3. Check that service last_seen is current
 * 4. List events after current time to make sure list is empty
 * 5. Heartbeat service after specified timeout
 * 6. Check events for service.timeout
 * 7. Set a configuration value
 * 8. Check events for configuration_value.update
 * 9. Remove configuration value
 * 10. Check events for configuration_value.remove
 *
 * If any errors are encountered, exit with status 1.
コード例 #9
0
  before(function() {
    logstash = new logstashSink('test', '127.0.0.1', 19999);

    logmagic.registerSink('logstash', logstash.log.bind(logstash));
    logmagic.route('__root__', logmagic.INFO, 'logstash');
  });
コード例 #10
0
ファイル: t.js プロジェクト: Kami/node-logmagic
var logmagic = require('logmagic');
var log = logmagic.local('mylib.foo.bar');
console.log(log);
log.info("Hello!");
log.error("Accepts format strings too ${SOME_VAR}", {SOME_VAR: "myvalue"});
log.trace("testing trace v0");
logmagic.route("__root__", logmagic.TRACE1, "console");
log.trace("testing trace v1", {slug: 1});
console.log(log);
コード例 #11
0
#! /usr/bin/env node

var fs = require('fs');
var fse = require('fs-extra');
var path = require('path');
var assert = require('assert');
var _ = require('underscore');
var cheerio = require('cheerio');
var typeset = require('typeset');
var marked = require('meta-kramed');
var highlightjs = require('highlight.js');
var logmagic = require('logmagic');
logmagic.route("__root__", logmagic.DEBUG, "console");
var log = logmagic.local("generate-docs");

// Usage
// ./generate.js --page page.html <list of .md files>

main();


function main() {
  var argv = require('minimist')(process.argv.slice(process.argv[0].indexOf('./') === 0 ? 1 : 2), {
    string: [
      'page',
    ]
  });

  validate(argv);

  build_pages(argv.page, argv._);