Skip to content

Commit 06f67b4

Browse files
authored
fix prometheus metric and add total users and active pad count (#7179)
* fix prometheus metric registration * add totalUsers and activePads metric to prometheus
1 parent 49d431b commit 06f67b4

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

src/node/handler/PadMessageHandler.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,25 @@ exports.socketio = () => {
9494
const sessioninfos:MapArrayType<any> = {};
9595
exports.sessioninfos = sessioninfos;
9696

97-
stats.gauge('totalUsers', () => socketio ? socketio.engine.clientsCount : 0);
98-
stats.gauge('activePads', () => {
97+
function getTotalActiveUsers() {
98+
return socketio ? socketio.engine.clientsCount : 0;
99+
}
100+
101+
exports.getTotalActiveUsers = getTotalActiveUsers;
102+
103+
function getActivePadCountFromSessionInfos() {
99104
const padIds = new Set();
100105
for (const {padId} of Object.values(sessioninfos)) {
101106
if (!padId) continue;
102107
padIds.add(padId);
103108
}
104109
return padIds.size;
110+
}
111+
exports.getActivePadCountFromSessionInfos = getActivePadCountFromSessionInfos;
112+
113+
stats.gauge('totalUsers', () => getTotalActiveUsers());
114+
stats.gauge('activePads', () => {
115+
return getActivePadCountFromSessionInfos();
105116
});
106117

107118
/**

src/node/prometheus.ts

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
1-
import client from 'prom-client'
2-
const db = require('./db/DB').db
1+
import client from 'prom-client';
32

4-
const monitor = function () {
5-
const collectDefaultMetrics = client.collectDefaultMetrics;
6-
const Registry = client.Registry;
7-
const register = new Registry();
8-
collectDefaultMetrics({register});
9-
const gaugeDB = new client.Gauge({
10-
name: "ueberdb_stats",
11-
help: "ueberdb stats",
12-
labelNames: ['type'],
13-
})
3+
const db = require('./db/DB').db;
4+
const PadMessageHandler = require('./handler/PadMessageHandler');
145

6+
const register = new client.Registry();
7+
const gaugeDB = new client.Gauge({
8+
name: 'ueberdb_stats',
9+
help: 'ueberdb stats',
10+
labelNames: ['type'],
11+
});
12+
register.registerMetric(gaugeDB);
13+
14+
const totalUsersGauge = new client.Gauge({
15+
name: 'etherpad_total_users',
16+
help: 'Total number of users',
17+
});
18+
register.registerMetric(totalUsersGauge);
19+
20+
const activePadsGauge = new client.Gauge({
21+
name: 'etherpad_active_pads',
22+
help: 'Total number of active pads',
23+
});
24+
register.registerMetric(activePadsGauge);
25+
26+
client.collectDefaultMetrics({register});
27+
28+
const monitor = async function () {
1529
for (const [metric, value] of Object.entries(db.metrics)) {
1630
if (typeof value !== 'number') continue;
1731
gaugeDB.set({type: metric}, value);
1832
}
19-
20-
21-
register.registerMetric(gaugeDB);
22-
return register
33+
activePadsGauge.set(PadMessageHandler.getActivePadCountFromSessionInfos());
34+
totalUsersGauge.set(PadMessageHandler.getTotalActiveUsers());
35+
return register;
2336
};
2437

2538
export default monitor;

0 commit comments

Comments
 (0)