Преглед изворни кода

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 година
родитељ
комит
30070f23b8
2 измењених фајлова са 13 додато и 1 уклоњено
  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}"
 
+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"