mirror of
https://github.com/openstf/stf
synced 2025-10-04 02:09:32 +02:00
Replace device:support:quit with util:lifecycle, which is usable by non-device processes too.
This commit is contained in:
parent
e17f306d30
commit
d6604bcda8
11 changed files with 75 additions and 179 deletions
47
lib/util/lifecycle.js
Normal file
47
lib/util/lifecycle.js
Normal file
|
@ -0,0 +1,47 @@
|
|||
var Promise = require('bluebird')
|
||||
|
||||
var logger = require('./logger')
|
||||
var log = logger.createLogger('util:lifecycle')
|
||||
|
||||
function Lifecycle() {
|
||||
this.observers = []
|
||||
process.on('SIGINT', this.graceful.bind(this))
|
||||
process.on('SIGTERM', this.graceful.bind(this))
|
||||
}
|
||||
|
||||
Lifecycle.prototype.share = function(name, emitter) {
|
||||
emitter.on('end', function() {
|
||||
log.fatal('%s ended; we shall share its fate', name)
|
||||
this.fatal()
|
||||
}.bind(this))
|
||||
|
||||
emitter.on('error', function(err) {
|
||||
log.fatal('%s had an error', name, err.stack)
|
||||
this.fatal()
|
||||
}.bind(this))
|
||||
|
||||
return emitter
|
||||
}
|
||||
|
||||
Lifecycle.prototype.graceful = function() {
|
||||
log.info('Winding down for graceful exit')
|
||||
|
||||
var wait = Promise.all(this.observers.map(function(fn) {
|
||||
return fn()
|
||||
}))
|
||||
|
||||
return wait.then(function() {
|
||||
process.exit(0)
|
||||
})
|
||||
}
|
||||
|
||||
Lifecycle.prototype.fatal = function() {
|
||||
log.fatal('Shutting down due to fatal error')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
Lifecycle.prototype.observe = function(promise) {
|
||||
this.observers.push(promise)
|
||||
}
|
||||
|
||||
module.exports = new Lifecycle()
|
Loading…
Add table
Add a link
Reference in a new issue