Просмотр исходного кода

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 лет назад
Родитель
Сommit
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"