UNPKG

@vtex/api

Version:
44 lines (43 loc) 1.77 kB
"use strict"; 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.HeaderKeys.COLOSSUS_ROUTE_ID); 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;