UNPKG

@promster/fastify

Version:

Fastify server integrations of promster

101 lines (100 loc) 4.46 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 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