File size: 1,066 Bytes
98b1c51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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;
	}
}