All files / platform/packages/prometheus/src/Middleware CollectPerformanceMetric.js

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

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;