1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-03 17:59:28 +02:00

Let CLI know when procs die.

This commit is contained in:
Simo Kinnunen 2014-01-24 16:29:08 +09:00
parent 60143b28cb
commit 24825ff7fc
2 changed files with 81 additions and 28 deletions

View file

@ -2,6 +2,8 @@ var program = require('commander')
var pkg = require('../package')
var cliutil = require('./util/cliutil')
var procutil = require('./util/procutil')
var logger = require('./util/logger')
program
.version(pkg.version)
@ -261,45 +263,60 @@ program
, String
, 'tcp://127.0.0.1:7116')
.action(function() {
var log = logger.createLogger('cli')
var options = cliutil.lastArg(arguments)
, fork = require('child_process').fork
// app triproxy
fork(__filename, [
procutil.fork(__filename, [
'triproxy', 'app001'
, '--bind-pub', options.bindAppPub
, '--bind-dealer', options.bindAppDealer
, '--bind-pull', options.bindAppPull
])
.catch(function(err) {
log.error('app triproxy died', err.stack)
})
// device triproxy
fork(__filename, [
procutil.fork(__filename, [
'triproxy', 'dev001'
, '--bind-pub', options.bindDevPub
, '--bind-dealer', options.bindDevDealer
, '--bind-pull', options.bindDevPull
])
.catch(function(err) {
log.error('device triproxy died', err.stack)
})
// coordinator one
fork(__filename, [
procutil.fork(__filename, [
'coordinator', 'coord001'
, '--connect-app-dealer', options.bindAppDealer
, '--connect-dev-dealer', options.bindDevDealer
])
.catch(function(err) {
log.error('coordinator 001 died', err.stack)
})
// coordinator two
fork(__filename, [
procutil.fork(__filename, [
'coordinator', 'coord002'
, '--connect-app-dealer', options.bindAppDealer
, '--connect-dev-dealer', options.bindDevDealer
])
.catch(function(err) {
log.error('coordinator 002 died', err.stack)
})
// provider
fork(__filename, [
procutil.fork(__filename, [
'provider'
, '--connect-sub', options.bindDevPub
, '--connect-push', options.bindDevPull
].concat(cliutil.allUnknownArgs(arguments)))
.catch(function(err) {
log.error('provider died', err.stack)
})
})
program.parse(process.argv)

36
lib/util/procutil.js Normal file
View file

@ -0,0 +1,36 @@
var util = require('util')
var cp = require('child_process')
var Promise = require('bluebird')
function ExitError(code) {
Error.call(this, util.format('Exit code "%d"', code))
this.name = 'ExitError'
this.code = code
Error.captureStackTrace(this, ExitError)
}
util.inherits(ExitError, Error)
// Export
module.exports.ExitError = ExitError
// Export
module.exports.fork = function() {
var args = arguments
return new Promise(function(resolve, reject) {
var proc = cp.fork.apply(cp, args)
proc.on('error', function(err) {
reject(err)
proc.kill()
})
proc.on('exit', function(code) {
if (code > 0) {
reject(new ExitError(code))
}
})
})
}