|
|
@@ -119,22 +119,32 @@ shutdownCleanly = (signal) ->
|
|
|
shutdownCleanly(signal)
|
|
|
, 10000
|
|
|
|
|
|
+drainAndShutdown = (signal) ->
|
|
|
+ if Settings.shutDownInProgress
|
|
|
+ logger.log signal: signal, "shutdown already in progress, ignoring signal"
|
|
|
+ return
|
|
|
+ else
|
|
|
+ Settings.shutDownInProgress = true
|
|
|
+ logger.warn signal: signal, "received interrupt, starting drain over #{shutdownDrainTimeWindow} mins"
|
|
|
+ DrainManager.startDrainTimeWindow(io, shutdownDrainTimeWindow)
|
|
|
+ shutdownCleanly(signal)
|
|
|
+
|
|
|
+
|
|
|
Settings.shutDownInProgress = false
|
|
|
if Settings.shutdownDrainTimeWindow?
|
|
|
shutdownDrainTimeWindow = parseInt(Settings.shutdownDrainTimeWindow, 10)
|
|
|
logger.log shutdownDrainTimeWindow: shutdownDrainTimeWindow,"shutdownDrainTimeWindow enabled"
|
|
|
for signal in ['SIGINT', 'SIGHUP', 'SIGQUIT', 'SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGABRT']
|
|
|
process.on signal, ->
|
|
|
- if Settings.shutDownInProgress
|
|
|
- logger.log signal: signal, "shutdown already in progress, ignoring signal"
|
|
|
- return
|
|
|
- else
|
|
|
- Settings.shutDownInProgress = true
|
|
|
- logger.warn signal: signal, "received interrupt, starting drain over #{shutdownDrainTimeWindow} mins"
|
|
|
- DrainManager.startDrainTimeWindow(io, shutdownDrainTimeWindow)
|
|
|
- shutdownCleanly(signal)
|
|
|
-
|
|
|
-
|
|
|
+ drainAndShutdown(signal)
|
|
|
+
|
|
|
+ # global exception handler
|
|
|
+ if Settings.errors?.catchUncaughtErrors
|
|
|
+ process.removeAllListeners('uncaughtException')
|
|
|
+ process.on 'uncaughtException', (error) ->
|
|
|
+ logger.error err: error, 'uncaught exception'
|
|
|
+ if Settings.errors?.shutdownOnUncaughtError
|
|
|
+ drainAndShutdown('SIGABRT')
|
|
|
|
|
|
if Settings.continualPubsubTraffic
|
|
|
console.log "continualPubsubTraffic enabled"
|