Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | /* istanbul ignore file */
'use strict';
const onFinished = require('on-finished');
const Config = use('Config');
const metrics = require('../Metrics');
class CollectPerformanceMetric {
async handle({ request, response }, next) {
/**
* Extract config.
*/
const { enabled: enableHttpMetric, includeQueryParams } = Config.get(
'addons.prometheus.httpMetric',
);
const enableHttpReqTotalMetric = Config.get('addons.prometheus.httpReqTotalMetric.enabled');
// skip track metrics
if (!enableHttpMetric && !enableHttpReqTotalMetric) {
return next();
}
/**
* Start HTTP request timer.
*/
const method = request.method();
let stopHttpRequestTimer;
if (enableHttpMetric) {
stopHttpRequestTimer = metrics.httpMetric.startTimer({
method,
url: includeQueryParams ? request.originalUrl() : request.url(),
});
}
// Listen the response finished to track both success/error requests
onFinished(response.response, () => {
const statusCode = response.response.statusCode;
/**
* End HTTP request timer.
*/
if (enableHttpMetric) {
stopHttpRequestTimer({
statusCode,
});
}
/**
* Track number of requests
*/
if (enableHttpReqTotalMetric) {
metrics.httpReqTotalMetric.inc({
method,
statusCode,
});
}
});
/**
* Continue middlewares execution
*/
return next();
}
}
module.exports = CollectPerformanceMetric;
|