@promster/fastify
Version:
Fastify server integrations of promster
101 lines (100 loc) • 4.46 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 fastify_plugin = require("fastify-plugin");
fastify_plugin = __toESM(fastify_plugin, 1);
let merge_options = require("merge-options");
merge_options = __toESM(merge_options, 1);
//#region package.json
var name = "@promster/fastify";
//#endregion
//#region src/plugin/plugin.ts
let recordRequest;
let upMetric;
const extractPath = (req) => req.raw.originalUrl || req.raw.url;
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 createPlugin = async (fastify, options) => {
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;
if (!shouldSkipMetricsByEnvironment) observeGc();
fastify.decorate("Prometheus", _promster_metrics.Prometheus);
fastify.decorate("recordRequest", recordRequest);
fastify.decorateRequest("__promsterTiming__", null);
fastify.addHook("onRequest", async (request, _) => {
request.__promsterTiming__ = _promster_metrics.timing.start();
});
fastify.addHook("onResponse", async (request, reply) => {
const labels = Object.assign({}, {
method: allDefaultedOptions.normalizeMethod(request.raw.method ?? "", {
req: request,
res: reply
}),
status_code: allDefaultedOptions.normalizeStatusCode(reply.statusCode, {
req: request,
res: reply
}),
path: allDefaultedOptions.normalizePath(extractPath(request), {
req: request,
res: reply
})
}, allDefaultedOptions.getLabelValues?.(request, reply));
const requestContentLength = Number(request.headers["content-length"] ?? 0);
const responseContentLength = Number(reply.getHeader("content-length") ?? 0);
if (!allDefaultedOptions.skip?.(request, reply, labels) && !shouldSkipMetricsByEnvironment) recordRequest(request.__promsterTiming__, {
labels,
requestContentLength,
responseContentLength
});
});
signalIsUp();
};
const plugin = (0, fastify_plugin.default)(createPlugin, {
fastify: ">= 5.0.0",
name
});
//#endregion
exports.Prometheus = _promster_metrics.Prometheus;
exports.defaultNormalizers = _promster_metrics.defaultNormalizers;
exports.defaultRegister = _promster_metrics.defaultRegister;
exports.getContentType = _promster_metrics.getContentType;
exports.getRequestRecorder = getRequestRecorder;
exports.getSummary = _promster_metrics.getSummary;
exports.plugin = plugin;
exports.signalIsNotUp = signalIsNotUp;
exports.signalIsUp = signalIsUp;
exports.timing = _promster_metrics.timing;
//# sourceMappingURL=index.cjs.map