*/Server.ts: Add monitoring init hook
1 files changed, 38 insertions, 0 deletions
diff --git a/src/util/monitoring/Monitoring.ts b/src/util/monitoring/Monitoring.ts
new file mode 100644
index 00000000..3d6d4ed4
--- /dev/null
+++ b/src/util/monitoring/Monitoring.ts
@@ -0,0 +1,38 @@
+/*
+ Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
+ Copyright (C) 2026 Spacebar and Spacebar Contributors
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import * as client from "prom-client";
+import { Router } from "express";
+
+export class Monitoring {
+ static isInitialised = false;
+ public static async init() {
+ if (Monitoring.isInitialised) return;
+ console.log("[Monitoring] Initialising prometheus metrics");
+ client.collectDefaultMetrics();
+ Monitoring.isInitialised = true;
+ }
+
+ public static attach(router: Router) {
+ router.get("/metrics", async (req, res) => {
+ res.setHeader("Content-Type", client.register.contentType);
+ const metrics = await client.register.metrics();
+ res.send(metrics);
+ });
+ }
+}
|