/** * 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); }
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); }); };
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); } }
/** * 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(); }); }
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); }); }
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); }); }
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.
before(function() { logstash = new logstashSink('test', '127.0.0.1', 19999); logmagic.registerSink('logstash', logstash.log.bind(logstash)); logmagic.route('__root__', logmagic.INFO, 'logstash'); });
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);
#! /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._);