@vtex/api
Version:
VTEX I/O API client
44 lines (43 loc) • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.prometheusLoggerMiddleware = exports.addMetricsLoggerMiddleware = exports.recorderMiddleware = void 0;
const prom_client_1 = require("prom-client");
const constants_1 = require("../../../../constants");
const metricsLogger_1 = require("../../../logger/metricsLogger");
const EventLoopLagMeasurer_1 = require("../../../tracing/metrics/measurers/EventLoopLagMeasurer");
const recorder_1 = require("../utils/recorder");
async function recorderMiddleware(ctx, next) {
const recorder = new recorder_1.Recorder();
ctx.state.recorder = recorder;
await next();
recorder.flush(ctx);
return;
}
exports.recorderMiddleware = recorderMiddleware;
const addMetricsLoggerMiddleware = () => {
const metricsLogger = new metricsLogger_1.MetricsLogger();
return (ctx, next) => {
ctx.metricsLogger = metricsLogger;
return next();
};
};
exports.addMetricsLoggerMiddleware = addMetricsLoggerMiddleware;
const prometheusLoggerMiddleware = () => {
(0, prom_client_1.collectDefaultMetrics)();
const eventLoopLagMeasurer = new EventLoopLagMeasurer_1.EventLoopLagMeasurer();
eventLoopLagMeasurer.start();
return async (ctx, next) => {
if (ctx.request.path !== '/metrics') {
return next();
}
const routeId = ctx.get(constants_1.COLOSSUS_ROUTE_ID_HEADER);
if (routeId) {
return next();
}
await eventLoopLagMeasurer.updateInstrumentsAndReset();
ctx.set('Content-Type', prom_client_1.register.contentType);
ctx.body = await prom_client_1.register.metrics();
ctx.status = 200;
};
};
exports.prometheusLoggerMiddleware = prometheusLoggerMiddleware;