| 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; |
| } |
| } |
|
|