UNPKG

@vtex/api

Version:
82 lines (81 loc) 3.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.trackIncomingRequestStats = exports.incomingRequestStats = exports.cancelMessage = void 0; const constants_1 = require("../../../../../constants"); exports.cancelMessage = 'Request cancelled'; class IncomingRequestStats { constructor() { this.aborted = 0; this.closed = 0; this.total = 0; } get() { return { aborted: this.aborted, closed: this.closed, total: this.total, }; } clear() { this.aborted = 0; this.closed = 0; this.total = 0; } } exports.incomingRequestStats = new IncomingRequestStats(); const requestClosed = (ctx) => () => { exports.incomingRequestStats.closed++; // Report to diagnostics metrics (cumulative counter) const { status: statusCode, vtex: { account, route: { id, type } } } = ctx; if (global.diagnosticsMetrics) { global.diagnosticsMetrics.incrementCounter('http_server_requests_closed_total', 1, { [constants_1.AttributeKeys.VTEX_ACCOUNT_NAME]: account, route_id: id, route_type: type, status_code: statusCode, }); } else { console.warn('DiagnosticsMetrics not available. Request closed metric not reported.'); } }; const requestAborted = (ctx) => () => { exports.incomingRequestStats.aborted++; // Report to diagnostics metrics (cumulative counter) const { status: statusCode, vtex: { account, route: { id, type } } } = ctx; if (global.diagnosticsMetrics) { global.diagnosticsMetrics.incrementCounter('http_server_requests_aborted_total', 1, { [constants_1.AttributeKeys.VTEX_ACCOUNT_NAME]: account, route_id: id, route_type: type, status_code: statusCode, }); } else { console.warn('DiagnosticsMetrics not available. Request aborted metric not reported.'); } if (ctx.vtex.cancellation && ctx.vtex.cancellation.cancelable) { ctx.vtex.cancellation.source.cancel(exports.cancelMessage); ctx.vtex.cancellation.cancelled = true; } }; async function trackIncomingRequestStats(ctx, next) { ctx.req.on('close', requestClosed(ctx)); ctx.req.on('aborted', requestAborted(ctx)); exports.incomingRequestStats.total++; // Report total requests to diagnostics metrics (cumulative counter) const { status: statusCode, vtex: { account, route: { id, type } } } = ctx; if (global.diagnosticsMetrics) { global.diagnosticsMetrics.incrementCounter('http_server_requests_total', 1, { [constants_1.AttributeKeys.VTEX_ACCOUNT_NAME]: account, route_id: id, route_type: type, status_code: statusCode, }); } else { console.warn('DiagnosticsMetrics not available. Request total metric not reported.'); } await next(); } exports.trackIncomingRequestStats = trackIncomingRequestStats;