From 30070f23b84645d2592d287e92c1102b5e51a1bd Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Mon, 5 Jan 2015 16:45:32 +0000 Subject: [PATCH] add a close() method to terminate the module cleanly closes the statsd connection and cancels registered interval timers prevents express from hanging when trying to shutdown --- libraries/metrics/metrics.coffee | 9 +++++++++ libraries/metrics/open_sockets.coffee | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libraries/metrics/metrics.coffee b/libraries/metrics/metrics.coffee index 341b8e6ce9..59e4ee9899 100644 --- a/libraries/metrics/metrics.coffee +++ b/libraries/metrics/metrics.coffee @@ -6,10 +6,15 @@ hostname = require('os').hostname() buildKey = (key)-> "#{name}.#{hostname}.#{key}" +destructors = [] + module.exports = initialize: (_name) -> name = _name + registerDestructor: (func) -> + destructors.push func + set : (key, value, sampleRate = 1)-> statsd.set buildKey(key), value, sampleRate @@ -35,3 +40,7 @@ module.exports = http: require "./http" open_sockets: require "./open_sockets" + close: () -> + for func in destructors + func() + statsd.close() diff --git a/libraries/metrics/open_sockets.coffee b/libraries/metrics/open_sockets.coffee index d74a781496..d4a6eb6c8d 100644 --- a/libraries/metrics/open_sockets.coffee +++ b/libraries/metrics/open_sockets.coffee @@ -3,9 +3,12 @@ seconds = 1000 module.exports = OpenSocketsMonitor = monitor: (logger) -> - setInterval () -> + interval = setInterval () -> OpenSocketsMonitor.gaugeOpenSockets() , 5 * seconds + Metrics = require "./metrics" + Metrics.registerDestructor () -> + clearInterval(interval) gaugeOpenSockets: () -> Metrics = require "./metrics"