monitoring: add helper to register a metric without duplicating

This commit is contained in:
Rory&
2026-05-25 09:14:29 +02:00
parent 22b5ed4434
commit acc4a10f09
+11 -3
View File
@@ -16,20 +16,28 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import http, { IncomingMessage, ServerResponse } from "node:http";
import { IncomingMessage, ServerResponse } from "node:http";
import * as client from "prom-client";
import { Application, Router } from "express";
import { sleep } from "@spacebar/util";
import { Metric } from "prom-client";
export class Monitoring {
static isInitialised = false;
public static async init() {
if (Monitoring.isInitialised) return;
console.log("[Monitoring] Initialising prometheus metrics");
client.collectDefaultMetrics();
client.collectDefaultMetrics({ prefix: "spacebar_" });
Monitoring.isInitialised = true;
}
public static attachMetric<T extends Metric>(name: string, metric: T): T {
const existingMetric = client.register.getSingleMetric(name);
// TODO: is there any way to *ensure* the metric is T? We're assuming that there's no conflicting definitions across the app...
if (existingMetric) return existingMetric as T;
client.register.registerMetric(metric);
return metric;
}
public static attach(app: Application) {
const http_request_total = new client.Counter({
name: "spacebar_http_request_total",