import { collectDefaultMetrics, Registry } from "prom-client"; import express from "express"; import { logger } from "$lib/server/logger"; import { env } from "$env/dynamic/private"; export class MetricsServer { private static instance: MetricsServer; private constructor() { const app = express(); const port = env.METRICS_PORT || "5565"; const server = app.listen(port, () => { logger.info(`Metrics server listening on port ${port}`); }); const register = new Registry(); collectDefaultMetrics({ register }); app.get("/metrics", (req, res) => { register.metrics().then((metrics) => { res.set("Content-Type", "text/plain"); res.send(metrics); }); }); process.on("SIGINT", async () => { logger.info("Sigint received, disconnect metrics server ..."); server.close(() => { logger.info("Server stopped ..."); }); process.exit(); }); } public static getInstance(): MetricsServer { if (!MetricsServer.instance) { MetricsServer.instance = new MetricsServer(); } return MetricsServer.instance; } }