James Allen 12 лет назад
Родитель
Сommit
f4895fb04f
2 измененных файлов с 32 добавлено и 1 удалено
  1. 29 0
      libraries/metrics/http.coffee
  2. 3 1
      libraries/metrics/metrics.coffee

+ 29 - 0
libraries/metrics/http.coffee

@@ -0,0 +1,29 @@
+os = require("os")
+
+module.exports.monitor = (logger) ->
+	return (req, res, next) ->
+		Metrics = require("./metrics")
+		startTime = new Date()
+		end = res.end
+		res.end = () ->
+			end.apply(this, arguments)
+			responseTime = new Date() - startTime
+			routePath = req.route.path.toString().replace(/\//g, '_').replace(/\:/g, '').slice(1)
+			key = "#{routePath}.#{req.method}.#{res.statusCode}"
+
+			Metrics.timing(key, responseTime)
+			logger.log
+				req:
+					url: req.originalUrl || req.url
+					method: req.method
+					referrer: req.headers['referer'] || req.headers['referrer']
+					"remote-addr": req.ip || req.socket?.socket?.remoteAddress || req.socket?.remoteAddress
+					"user-agent": req.headers["user-agent"]
+					"content-length": req.headers["content-length"]
+				res:
+					"content-length": res._headers?["content-length"]
+					statusCode: res.statusCode
+				"response-time": responseTime
+				"http request"
+		next()
+

+ 3 - 1
libraries/metrics/metrics.coffee

@@ -2,8 +2,9 @@ StatsD = require('lynx')
 statsd = new StatsD('localhost', 8125, {on_error:->})
 
 name = "unknown"
+hostname = require('os').hostname()
 
-buildKey = (key)-> "#{name}.#{process.env.NODE_ENV or "development"}.#{key}"
+buildKey = (key)-> "#{name}.#{hostname}.#{key}"
 
 module.exports =
 	initialize: (_name) ->
@@ -31,4 +32,5 @@ module.exports =
 		statsd.gauge key, value, sampleRate
 
 	mongodb: require "./mongodb"
+	http: require "./http"