guvnor
Version:
A node process manager that isn't spanners all the way down
105 lines (84 loc) • 3.44 kB
JavaScript
var Container = require('wantsit').Container
var ObjectFactory = require('wantsit').ObjectFactory
function createContainer (callback) {
var container = new Container()
container.register('logger', {})
container.register('config', {})
container.register('fs', require('fs'))
container.register('mkdirp', require('mkdirp'))
container.register('posix', require('posix'))
container.register('dnode', require('boss-dnode'))
container.register('freeport', require('freeport'))
container.register('child_process', require('child_process'))
container.register('semver', require('semver'))
container.createAndRegister('managedProcessFactory', ObjectFactory, [require('../common/ManagedProcess')])
container.createAndRegister('processStore', require('../common/Store'), ['managedProcessFactory'])
container.createAndRegister('managedAppFactory', ObjectFactory, [require('../common/ManagedApp')])
container.createAndRegister('appStore', require('../common/Store'), ['managedAppFactory'])
container.createAndRegister('localDaemonAdminConnection', require('./LocalDaemonConnection'), ['admin.socket'])
container.createAndRegister('localDaemonUserConnection', require('./LocalDaemonConnection'), ['user.socket'])
container.createAndRegister('localDaemonStarter', require('./LocalDaemonStarter'))
container.createAndRegister('localDaemon', require('./LocalDaemon'))
container.once('ready', callback)
}
function findConfig () {
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i]
if (arg.guvnor && arg.guvnor.rundir && arg.guvnor.logdir) {
return arg
}
}
// load default config
return require('rc')('guvnor/guvnor', require('path').resolve(__dirname, '../../guvnor'))
}
function findLogger () {
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i]
if (arg.info && arg.warn && arg.error && arg.debug) {
return arg
}
}
return {
info: console.info.bind(console),
warn: console.warn.bind(console),
error: console.error.bind(console),
debug: function () {}
}
}
function findConfigAndLogger (container, args) {
var logger = findLogger.apply(null, args)
container.setLogger(logger)
container.register('config', findConfig.apply(null, args))
container.register('logger', logger)
}
module.exports = {
connect: function () {
var args = Array.prototype.slice.call(arguments)
createContainer(function (container) {
findConfigAndLogger.call(null, container, args)
container.find('localDaemon').connect(args[args.length - 1])
})
},
connectOrStart: function () {
var args = Array.prototype.slice.call(arguments)
createContainer(function (container) {
findConfigAndLogger.call(null, container, args)
container.find('localDaemon').connectOrStart(args[args.length - 1])
})
},
running: function () {
var args = Array.prototype.slice.call(arguments)
createContainer(function (container) {
findConfigAndLogger.call(null, container, args)
var callback = args[args.length - 1]
var connection = container.find('localDaemonUserConnection')
connection.connect({}, function (error) {
if (error && error.code === 'DAEMON_NOT_RUNNING') {
return process.nextTick(callback.bind(callback, false))
}
process.nextTick(callback.bind(callback, true))
connection.disconnect()
})
})
}
}