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

reduce memory capture in http logger

only capture the properties of 'req' that we need, to avoid leaking
the whole req object for responses that never call res.end()
Brian Gough пре 11 година
родитељ
комит
1e0a991fcd
1 измењених фајлова са 21 додато и 9 уклоњено
  1. 21 9
      libraries/metrics/http.coffee

+ 21 - 9
libraries/metrics/http.coffee

@@ -4,23 +4,35 @@ module.exports.monitor = (logger) ->
 	return (req, res, next) ->
 	return (req, res, next) ->
 		Metrics = require("./metrics")
 		Metrics = require("./metrics")
 		startTime = new Date()
 		startTime = new Date()
+
+		# only capture the properties of 'req' that we need, to avoid
+		# leaking the whole req object for responses that never call
+		# res.end()
+		url = req.originalUrl || req.url
+		method = req.method
+		referrer = req.headers['referer'] || req.headers['referrer']
+		remoteAddr = req.ip || req.socket?.socket?.remoteAddress || req.socket?.remoteAddress
+		userAgent = req.headers["user-agent"]
+		contentLength = req.headers["content-length"]
+		path = req.route?.path
+
 		end = res.end
 		end = res.end
 		res.end = () ->
 		res.end = () ->
 			end.apply(this, arguments)
 			end.apply(this, arguments)
 			responseTime = new Date() - startTime
 			responseTime = new Date() - startTime
-			if req.route?.path?
-				routePath = req.route.path.toString().replace(/\//g, '_').replace(/\:/g, '').slice(1)
-				key = "http-requests.#{routePath}.#{req.method}.#{res.statusCode}"
+			if path?
+				routePath = path.toString().replace(/\//g, '_').replace(/\:/g, '').slice(1)
+				key = "http-requests.#{routePath}.#{method}.#{res.statusCode}"
 
 
 				Metrics.timing(key, responseTime)
 				Metrics.timing(key, responseTime)
 				logger.log
 				logger.log
 					req:
 					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"]
+						url: url
+						method: method
+						referrer: referrer
+						"remote-addr": remoteAddr
+						"user-agent": userAgent
+						"content-length": contentLength
 					res:
 					res:
 						"content-length": res._headers?["content-length"]
 						"content-length": res._headers?["content-length"]
 						statusCode: res.statusCode
 						statusCode: res.statusCode