Spaces:
Paused
Paused
| 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; | |
| } | |
| } | |