From 4a9c6cacc5cadccbf88d910d62e222bf3f4ff5ff Mon Sep 17 00:00:00 2001 From: Rory& Date: Wed, 20 May 2026 13:51:11 +0200 Subject: [PATCH] */Server.ts: Add monitoring init hook --- package-lock.json | Bin 327380 -> 329088 bytes package.json | 1 + src/api/Server.ts | 1 - src/cdn/Server.ts | 1 - src/util/monitoring/Monitoring.ts | 38 ++++++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/util/monitoring/Monitoring.ts diff --git a/package-lock.json b/package-lock.json index 2b96765dcccacc49ed1765d328bee3149d033062..659cd6a61e4e4a2f25716b938417e0eb73dee26e 100644 GIT binary patch delta 763 zcmZWn+iTNs6sBoL5p--;LB{CHhA*pKldb8+ONJ8;hVzRy3MyH772gdGB z8BltHy5Rl^vNFB;Z%_7l2MF1VFNFK8`}16l?old}WW-`6(!i-$HWH>m5-1|T3vw{% zGYTNC`SgsS<&(Z-TvW@fFSjUAq=ybw8znQ#w(1p2?Ivf3oC)pH`8Z z{fRduJa>$a!!Nt&)Zz2jr>A4GZkYf|6K7Xr@#cE4NH&xcHd@vY|nQ5HH zvRjQ3u#|FB*yg)wD2*Y}hn+p!z>uTPo;{LtjJ^$9C^BOs-~op$yUvg>SnN#Z#fb$R z;*ad}TtJj_WOc3AZAbkLoXmz(0=6mE;~tA@@S#>nRhfW4K_n%m?Wb~prCj___<;jo7C8yX$k4|Ir7huOhAsRzgTXv472X~DkF9zS;vt8pn z35=#|iqZ^|qOh2$Rys^I>B*$&HFHZ9*dizsQHd!scohUvy?Pb%RauR~N^x1l;~}yT uC?^DUkv3E-Z&=%kkiH#jq~QaNa+@=(w?eD`>u-?tn(cLXEojpJWF!URD8 delta 68 zcmZqZ7P<0Qc!MST^b_SQdeaT|Fbhl%t6&kHEU=wr^A7e4lP2>m;M}Y;N8n|9c^e}T YGi@(#V|MW0e(O5(gS_p|9xS$d0l&!{NB{r; diff --git a/package.json b/package.json index dc3fe06a8..f20e31d40 100644 --- a/package.json +++ b/package.json @@ -115,6 +115,7 @@ "pg-query-stream": "^4.15.0", "picocolors": "^1.1.1", "probe-image-size": "^7.3.0", + "prom-client": "^15.1.3", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "typeorm": "^0.3.30", diff --git a/src/api/Server.ts b/src/api/Server.ts index f9f1c708f..a1edb986c 100644 --- a/src/api/Server.ts +++ b/src/api/Server.ts @@ -53,7 +53,6 @@ export class SpacebarServer extends Server { async start() { await Monitoring.init(); - Monitoring.attach(this.app); await initDatabase(); await Config.init(); await initEvent(); diff --git a/src/cdn/Server.ts b/src/cdn/Server.ts index 8964161dc..9327de836 100644 --- a/src/cdn/Server.ts +++ b/src/cdn/Server.ts @@ -37,7 +37,6 @@ export class CDNServer extends Server { async start() { await Monitoring.init(); - Monitoring.attach(this.app); await initDatabase(); await Config.init(); diff --git a/src/util/monitoring/Monitoring.ts b/src/util/monitoring/Monitoring.ts new file mode 100644 index 000000000..3d6d4ed47 --- /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 . +*/ + +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); + }); + } +}