nsolid-manager
Version:
A manager that sets up and runs N|Solid for you
111 lines (90 loc) • 2.64 kB
JavaScript
/**
* All-in-one start script, starts everything you need to try N|Solid Console.
*
* 1. Start service dependencies e.g. etcd, nsolid-proxy
* 2. Start the collector (starts an HTTP server)
* 3. Simulate some Applications with real Processes
*
*/
'use strict'
require('./polyfill')
var spawn = require('child_process').spawn
var split = require('split')
var createDebug = require('debug')
var utils = require('./utils')
var which = require('npm-which')(process.cwd())
var config = require('../src/collect/config')
const argv = config(process.argv, `
Boots everything you need to try N|Solid Console.
Usage: $0 [options]`.trim())
// Override `debug`'s default so buffers become strings
createDebug.coerce = function coerce (val) {
if (val instanceof Error) return val.stack || val.message
return val.toString()
}
function debugWrap (proc, logger) {
proc.stdout
.pipe(process.stdout)
proc.stderr
.pipe(split())
.on('data', logger)
utils.killOnExit(proc, {killAll: true})
return proc
}
process
.on('uncaughtException', onError)
.on('unhandledRejection', onError)
function onError (err) {
if (err) throw err
}
var consoleEnv = Object.assign({}, process.env)
if (argv['include-nsolid-console']) {
Object.assign(consoleEnv, {
NSOLID_APPNAME: 'N|Solid',
NSOLID_SOCKET: ':0',
NSOLID_HUB: '127.0.0.1:4001',
NSOLID_TAGS: 'DC'
})
}
debugWrap(spawn('etcd', ['--cors=*'], {}), createDebug('etcd'))
var pathToProxy = which.sync('nsolid-proxy')
debugWrap(spawn(pathToProxy, {
cwd: process.cwd(),
env: consoleEnv
}), createDebug('nsolid-proxy'))
debugWrap(spawn('node', [
'bin/nsolid-console.js',
'--port', argv.port,
'--interval', 1000
].concat(process.argv.slice(2)), {
env: Object.assign({}, process.env, consoleEnv, {
NODE_ENV: process.env.NODE_ENV || 'development'
})
}), createDebug('nsolid-console'))
debugWrap(spawn('nsolid', [
'bin/simulate.js',
'test/simulator/scenarios/noop.js@15'
], {
env: Object.assign({
NSOLID_APPNAME: 'Shark Attack',
NSOLID_TAGS: 'DC, us-east-1, Grey Shark'
}, process.env)
}), createDebug('scenario:SharkAttack'))
debugWrap(spawn('nsolid', [
'bin/simulate.js',
'test/simulator/scenarios/noop.js@5'
], {
env: Object.assign({
NSOLID_APPNAME: 'Shark Attack',
NSOLID_TAGS: 'us-west-1, White Shark'
}, process.env)
}), createDebug('scenario:SharkAttack'))
debugWrap(spawn('nsolid', [
'bin/simulate.js',
'test/simulator/scenarios/leaky-http.js@10'
], {
env: Object.assign({
NSOLID_APPNAME: 'Beeeeeeeees',
NSOLID_TAGS: 'us-east-1, Big Bees'
}, process.env)
}), createDebug('scenario:Beeeeeeeees'))