@promster/express
Version:
Express server integrations of promster
107 lines (106 loc) • 4.39 kB
JavaScript
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