UNPKG

@vtex/api

Version:
47 lines (46 loc) 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addRequestMetricsMiddleware = void 0; const stream_1 = require("stream"); const utils_1 = require("../../utils"); const instruments_1 = require("../tracing/metrics/instruments"); const addRequestMetricsMiddleware = () => { const concurrentRequests = (0, instruments_1.createConcurrentRequestsInstrument)(); const requestTimings = (0, instruments_1.createRequestsTimingsInstrument)(); const totalRequests = (0, instruments_1.createTotalRequestsInstrument)(); const responseSizes = (0, instruments_1.createRequestsResponseSizesInstrument)(); const abortedRequests = (0, instruments_1.createTotalAbortedRequestsInstrument)(); return async function addRequestMetrics(ctx, next) { const start = process.hrtime(); concurrentRequests.inc(1); ctx.req.once('aborted', () => abortedRequests.inc({ ["handler" /* RequestsMetricLabels.REQUEST_HANDLER */]: ctx.requestHandlerName }, 1)); let responseClosed = false; ctx.res.once('close', () => (responseClosed = true)); try { await next(); } finally { const responseLength = ctx.response.length; if (responseLength) { responseSizes.observe({ ["handler" /* RequestsMetricLabels.REQUEST_HANDLER */]: ctx.requestHandlerName }, responseLength); } totalRequests.inc({ ["handler" /* RequestsMetricLabels.REQUEST_HANDLER */]: ctx.requestHandlerName, ["status_code" /* RequestsMetricLabels.STATUS_CODE */]: ctx.response.status, }, 1); const onResFinished = () => { requestTimings.observe({ ["handler" /* RequestsMetricLabels.REQUEST_HANDLER */]: ctx.requestHandlerName, }, (0, utils_1.hrToMillisFloat)(process.hrtime(start))); concurrentRequests.dec(1); }; if (responseClosed) { onResFinished(); } else { (0, stream_1.finished)(ctx.res, onResFinished); } } }; }; exports.addRequestMetricsMiddleware = addRequestMetricsMiddleware;