diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 0d6a90585..08e6ed169 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.15.14", + "version": "3.15.15", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 1c7bc20d8..407c18c21 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -391,6 +391,7 @@ export function Connection( args, request, response, user, domain, UiContext, } = ctx.HydroContext; const h = new RouteConnHandler(ctx, args, request, response, user, domain, UiContext); + await bus.emit('connection/create', h); ctx.handler = h; h.conn = conn; try { @@ -402,7 +403,10 @@ export function Connection( h.message(JSON.parse(e.data.toString())); }; } - conn.onclose = () => h.cleanup?.(args); + conn.onclose = () => { + h.cleanup?.(args); + bus.emit('connection/close', h); + }; } catch (e) { await h.onerror(e); } diff --git a/packages/prom-client/metrics.ts b/packages/prom-client/metrics.ts index 7e448846e..a66ff8161 100644 --- a/packages/prom-client/metrics.ts +++ b/packages/prom-client/metrics.ts @@ -35,6 +35,16 @@ bus.on('handler/after/ProblemSubmit', (that) => { submissionCounter.inc({ lang: that.args.lang, domainId: that.args.domainId }); }); +const connectionGauge = createMetric(Gauge, 'hydro_connection', 'connectioncount', { + labelNames: ['domainId'], +}); +bus.on('connection/create', (h) => { + connectionGauge.inc({ domainId: h.args.domainId }); +}); +bus.on('connection/close', (h) => { + connectionGauge.inc({ domainId: h.args.domainId }, -1); +}); + const taskColl = db.collection('task'); createMetric(Gauge, 'hydro_task', 'taskcount', { async collect() { diff --git a/packages/prom-client/package.json b/packages/prom-client/package.json index 783c8baab..819400e33 100644 --- a/packages/prom-client/package.json +++ b/packages/prom-client/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/prom-client", - "version": "0.0.1", + "version": "0.0.2", "dependencies": { "prom-client": "^14.0.1" }