@vtex/api
Version:
VTEX I/O API client
82 lines (81 loc) • 3.03 kB
JavaScript
;
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;