Separate port for prometheus metrics

Add Prometheus metrics [Feat]: Simple Stats API #1285
This commit is contained in:
Vadim Babadzhanyan
2024-08-22 11:47:05 +03:00
parent a35387ab68
commit 6d246ea4bd
5 changed files with 35 additions and 15 deletions
+1
View File
@@ -42,3 +42,4 @@ module.exports.WG_ENABLE_ONE_TIME_LINKS = process.env.WG_ENABLE_ONE_TIME_LINKS |
module.exports.UI_ENABLE_SORT_CLIENTS = process.env.UI_ENABLE_SORT_CLIENTS || 'false';
module.exports.WG_ENABLE_EXPIRES_TIME = process.env.WG_ENABLE_EXPIRES_TIME || 'false';
module.exports.ENABLE_PROMETHEUS_METRICS = process.env.ENABLE_PROMETHEUS_METRICS || 'true';
module.exports.PROMETHEUS_METRICS_PORT = process.env.PROMETHEUS_METRICS_PORT || '9586';
+30 -14
View File
@@ -37,6 +37,7 @@ const {
UI_ENABLE_SORT_CLIENTS,
WG_ENABLE_EXPIRES_TIME,
ENABLE_PROMETHEUS_METRICS,
PROMETHEUS_METRICS_PORT,
} = require('../config');
const requiresPassword = !!PASSWORD_HASH;
@@ -308,20 +309,6 @@ module.exports = class Server {
const { expireDate } = await readBody(event);
await WireGuard.updateClientExpireDate({ clientId, expireDate });
return { success: true };
}))
.get('/metrics', defineEventHandler(async (event) => {
setHeader(event, 'Content-Type', 'text/plain');
if (ENABLE_PROMETHEUS_METRICS === 'true') {
return WireGuard.getMetrics();
}
return '';
}))
.get('/metrics/json', defineEventHandler(async (event) => {
setHeader(event, 'Content-Type', 'application/json');
if (ENABLE_PROMETHEUS_METRICS === 'true') {
return WireGuard.getMetricsJSON();
}
return '';
}));
const safePathJoin = (base, target) => {
@@ -398,6 +385,35 @@ module.exports = class Server {
createServer(toNodeListener(app)).listen(PORT, WEBUI_HOST);
debug(`Listening on http://${WEBUI_HOST}:${PORT}`);
if (ENABLE_PROMETHEUS_METRICS === 'true') {
const appMetrics = createApp();
this.app_metrics = appMetrics;
appMetrics.use(fromNodeMiddleware(expressSession({
secret: crypto.randomBytes(256).toString('hex'),
resave: true,
saveUninitialized: true,
})));
const metricsRouter = createRouter();
appMetrics.use(metricsRouter);
metricsRouter
.get('/metrics', defineEventHandler(async (event) => {
setHeader(event, 'Content-Type', 'text/plain');
if (ENABLE_PROMETHEUS_METRICS === 'true') {
return WireGuard.getMetrics();
}
return '';
}))
.get('/metrics/json', defineEventHandler(async (event) => {
setHeader(event, 'Content-Type', 'application/json');
if (ENABLE_PROMETHEUS_METRICS === 'true') {
return WireGuard.getMetricsJSON();
}
return '';
}));
createServer(toNodeListener(appMetrics)).listen(PROMETHEUS_METRICS_PORT, WEBUI_HOST);
debug(`Prometheus metrics on http://${WEBUI_HOST}:${PROMETHEUS_METRICS_PORT}/metrics`);
}
cronJobEveryMinute();
}