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:
parent
60143b28cb
commit
24825ff7fc
2 changed files with 81 additions and 28 deletions
73
lib/cli.js
73
lib/cli.js
|
@ -2,6 +2,8 @@ var program = require('commander')
|
||||||
|
|
||||||
var pkg = require('../package')
|
var pkg = require('../package')
|
||||||
var cliutil = require('./util/cliutil')
|
var cliutil = require('./util/cliutil')
|
||||||
|
var procutil = require('./util/procutil')
|
||||||
|
var logger = require('./util/logger')
|
||||||
|
|
||||||
program
|
program
|
||||||
.version(pkg.version)
|
.version(pkg.version)
|
||||||
|
@ -261,45 +263,60 @@ program
|
||||||
, String
|
, String
|
||||||
, 'tcp://127.0.0.1:7116')
|
, 'tcp://127.0.0.1:7116')
|
||||||
.action(function() {
|
.action(function() {
|
||||||
|
var log = logger.createLogger('cli')
|
||||||
var options = cliutil.lastArg(arguments)
|
var options = cliutil.lastArg(arguments)
|
||||||
, fork = require('child_process').fork
|
|
||||||
|
|
||||||
// app triproxy
|
// app triproxy
|
||||||
fork(__filename, [
|
procutil.fork(__filename, [
|
||||||
'triproxy', 'app001'
|
'triproxy', 'app001'
|
||||||
, '--bind-pub', options.bindAppPub
|
, '--bind-pub', options.bindAppPub
|
||||||
, '--bind-dealer', options.bindAppDealer
|
, '--bind-dealer', options.bindAppDealer
|
||||||
, '--bind-pull', options.bindAppPull
|
, '--bind-pull', options.bindAppPull
|
||||||
])
|
])
|
||||||
|
.catch(function(err) {
|
||||||
|
log.error('app triproxy died', err.stack)
|
||||||
|
})
|
||||||
|
|
||||||
// device triproxy
|
// device triproxy
|
||||||
fork(__filename, [
|
procutil.fork(__filename, [
|
||||||
'triproxy', 'dev001'
|
'triproxy', 'dev001'
|
||||||
, '--bind-pub', options.bindDevPub
|
, '--bind-pub', options.bindDevPub
|
||||||
, '--bind-dealer', options.bindDevDealer
|
, '--bind-dealer', options.bindDevDealer
|
||||||
, '--bind-pull', options.bindDevPull
|
, '--bind-pull', options.bindDevPull
|
||||||
])
|
])
|
||||||
|
.catch(function(err) {
|
||||||
|
log.error('device triproxy died', err.stack)
|
||||||
|
})
|
||||||
|
|
||||||
// coordinator one
|
// coordinator one
|
||||||
fork(__filename, [
|
procutil.fork(__filename, [
|
||||||
'coordinator', 'coord001'
|
'coordinator', 'coord001'
|
||||||
, '--connect-app-dealer', options.bindAppDealer
|
, '--connect-app-dealer', options.bindAppDealer
|
||||||
, '--connect-dev-dealer', options.bindDevDealer
|
, '--connect-dev-dealer', options.bindDevDealer
|
||||||
])
|
])
|
||||||
|
.catch(function(err) {
|
||||||
|
log.error('coordinator 001 died', err.stack)
|
||||||
|
})
|
||||||
|
|
||||||
// coordinator two
|
// coordinator two
|
||||||
fork(__filename, [
|
procutil.fork(__filename, [
|
||||||
'coordinator', 'coord002'
|
'coordinator', 'coord002'
|
||||||
, '--connect-app-dealer', options.bindAppDealer
|
, '--connect-app-dealer', options.bindAppDealer
|
||||||
, '--connect-dev-dealer', options.bindDevDealer
|
, '--connect-dev-dealer', options.bindDevDealer
|
||||||
])
|
])
|
||||||
|
.catch(function(err) {
|
||||||
|
log.error('coordinator 002 died', err.stack)
|
||||||
|
})
|
||||||
|
|
||||||
// provider
|
// provider
|
||||||
fork(__filename, [
|
procutil.fork(__filename, [
|
||||||
'provider'
|
'provider'
|
||||||
, '--connect-sub', options.bindDevPub
|
, '--connect-sub', options.bindDevPub
|
||||||
, '--connect-push', options.bindDevPull
|
, '--connect-push', options.bindDevPull
|
||||||
].concat(cliutil.allUnknownArgs(arguments)))
|
].concat(cliutil.allUnknownArgs(arguments)))
|
||||||
|
.catch(function(err) {
|
||||||
|
log.error('provider died', err.stack)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
program.parse(process.argv)
|
program.parse(process.argv)
|
||||||
|
|
36
lib/util/procutil.js
Normal file
36
lib/util/procutil.js
Normal 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))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue