UNPKG

@promster/express

Version:

Express server integrations of promster

107 lines (106 loc) 4.39 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); //#region \0rolldown/runtime.js var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { key = keys[i]; if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: ((k) => from[k]).bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); //#endregion let _promster_metrics = require("@promster/metrics"); let merge_options = require("merge-options"); merge_options = __toESM(merge_options, 1); //#region src/middleware/middleware.ts const exposeOnLocals = ({ app, key, value }) => { if (app?.locals) app.locals[key] = value; }; const extractPath = (req) => req.originalUrl || req.url; let recordRequest; let upMetric; const getRequestRecorder = () => recordRequest; const signalIsUp = () => { if (!upMetric) return; for (const upMetricType of upMetric) upMetricType.set(1); }; const signalIsNotUp = () => { if (!upMetric) return; for (const upMetricType of upMetric) upMetricType.set(0); }; const createMiddleware = ({ app, options } = { app: void 0, options: void 0 }) => { const allDefaultedOptions = (0, merge_options.default)(_promster_metrics.createHttpMetrics.defaultOptions, _promster_metrics.createGcMetrics.defaultOptions, _promster_metrics.createRequestRecorder.defaultOptions, _promster_metrics.createGcObserver.defaultOptions, _promster_metrics.defaultNormalizers, options); const shouldSkipMetricsByEnvironment = (0, _promster_metrics.skipMetricsInEnvironment)(allDefaultedOptions); const httpMetrics = (0, _promster_metrics.createHttpMetrics)(allDefaultedOptions); const gcMetrics = (0, _promster_metrics.createGcMetrics)(allDefaultedOptions); const observeGc = (0, _promster_metrics.createGcObserver)(gcMetrics, allDefaultedOptions); recordRequest = (0, _promster_metrics.createRequestRecorder)(httpMetrics, allDefaultedOptions); upMetric = gcMetrics?.up; exposeOnLocals({ app, key: "Prometheus", value: _promster_metrics.Prometheus }); exposeOnLocals({ app, key: "recordRequest", value: recordRequest }); if (!shouldSkipMetricsByEnvironment) observeGc(); signalIsUp(); return (request, response, next) => { const requestTiming = _promster_metrics.timing.start(); response.on("finish", () => { const labels = Object.assign({}, { method: allDefaultedOptions.normalizeMethod(request.method, { req: request, res: response }), status_code: allDefaultedOptions.normalizeStatusCode(response.statusCode, { req: request, res: response }), path: allDefaultedOptions.normalizePath(extractPath(request), { req: request, res: response }) }, allDefaultedOptions.getLabelValues?.(request, response)); const shouldSkipByRequest = allDefaultedOptions.skip?.(request, response, labels); const requestContentLength = Number(request.headers["content-length"] ?? 0); const responseContentLength = Number(response.getHeader("content-length") ?? 0); if (!shouldSkipByRequest && !shouldSkipMetricsByEnvironment) recordRequest(requestTiming, { labels, requestContentLength, responseContentLength }); }); next(); }; }; //#endregion exports.Prometheus = _promster_metrics.Prometheus; exports.createMiddleware = createMiddleware; exports.defaultNormalizers = _promster_metrics.defaultNormalizers; exports.defaultRegister = _promster_metrics.defaultRegister; exports.getContentType = _promster_metrics.getContentType; exports.getRequestRecorder = getRequestRecorder; exports.getSummary = _promster_metrics.getSummary; exports.signalIsNotUp = signalIsNotUp; exports.signalIsUp = signalIsUp; exports.timing = _promster_metrics.timing; //# sourceMappingURL=index.cjs.map