| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- const Metrics = require('./index')
- module.exports.monitor = logger =>
- function(req, res, next) {
- const startTime = Date.now()
- const { end } = res
- res.end = function(...args) {
- end.apply(this, args)
- const responseTimeMs = Date.now() - startTime
- const requestSize = parseInt(req.headers['content-length'], 10)
- const routePath = getRoutePath(req)
- const reqUrl = req.originalUrl || req.url
- if (routePath != null) {
- Metrics.timing('http_request', responseTimeMs, null, {
- method: req.method,
- status_code: res.statusCode,
- path: routePath
- })
- if (requestSize) {
- Metrics.summary('http_request_size_bytes', requestSize, {
- method: req.method,
- status_code: res.statusCode,
- path: routePath
- })
- }
- }
- logger.info({ req, res, responseTimeMs }, '%s %s', req.method, reqUrl)
- }
- next()
- }
- function getRoutePath(req) {
- if (req.route && req.route.path != null) {
- return req.route.path
- .toString()
- .replace(/\//g, '_')
- .replace(/:/g, '')
- .slice(1)
- }
- if (req.swagger && req.swagger.apiPath != null) {
- return req.swagger.apiPath
- }
- return null
- }
|