Selaa lähdekoodia

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 11 vuotta sitten
vanhempi
sitoutus
30070f23b8
2 muutettua tiedostoa jossa 13 lisäystä ja 1 poistoa
  1. 9 0
      libraries/metrics/metrics.coffee
  2. 4 1
      libraries/metrics/open_sockets.coffee

+ 9 - 0
libraries/metrics/metrics.coffee

@@ -6,10 +6,15 @@ hostname = require('os').hostname()
 
 
 buildKey = (key)-> "#{name}.#{hostname}.#{key}"
 buildKey = (key)-> "#{name}.#{hostname}.#{key}"
 
 
+destructors = []
+
 module.exports =
 module.exports =
 	initialize: (_name) ->
 	initialize: (_name) ->
 		name = _name
 		name = _name
 
 
+	registerDestructor: (func) ->
+		destructors.push func
+
 	set : (key, value, sampleRate = 1)->
 	set : (key, value, sampleRate = 1)->
 		statsd.set buildKey(key), value, sampleRate
 		statsd.set buildKey(key), value, sampleRate
 
 
@@ -35,3 +40,7 @@ module.exports =
 	http: require "./http"
 	http: require "./http"
 	open_sockets: require "./open_sockets"
 	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 =
 module.exports = OpenSocketsMonitor =
 	monitor: (logger) ->
 	monitor: (logger) ->
-		setInterval () ->
+		interval = setInterval () ->
 			OpenSocketsMonitor.gaugeOpenSockets()
 			OpenSocketsMonitor.gaugeOpenSockets()
 		, 5 * seconds
 		, 5 * seconds
+		Metrics = require "./metrics"
+		Metrics.registerDestructor () ->
+			clearInterval(interval)
 
 
 	gaugeOpenSockets: () ->
 	gaugeOpenSockets: () ->
 		Metrics = require "./metrics"
 		Metrics = require "./metrics"