Prechádzať zdrojové kódy

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
Brian Gough 12 rokov pred
rodič
commit
30070f23b8

+ 9 - 0
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()

+ 4 - 1
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"