diff --git a/src/httpserver/metrics/metrics.js b/src/httpserver/metrics/metrics.js new file mode 100644 index 00000000..e753285b --- /dev/null +++ b/src/httpserver/metrics/metrics.js @@ -0,0 +1,24 @@ +const promclient = require("prom-client"); + +// Collect default metrics +const collectDefaultMetrics = promclient.collectDefaultMetrics; +const register = new promclient.Registry(); +collectDefaultMetrics({ + app: 'sentinel-monitoring-app', + timeout: 10000, + gcDurationBuckets: [0.001, 0.01, 0.1, 1, 2, 5], + register +}); + +const accountBalanceGauge = new promclient.Gauge({ + name: 'sentinel_account_balance', + help: 'Current balance of the Sentinel account' +}); + +// Register your custom metrics +register.registerMetric(accountBalanceGauge); + +module.exports = { + register, + accountBalanceGauge +}; \ No newline at end of file diff --git a/src/httpserver/server.js b/src/httpserver/server.js index e14a8d4e..92c59581 100644 --- a/src/httpserver/server.js +++ b/src/httpserver/server.js @@ -1,20 +1,20 @@ const express = require("express"); -const promclient = require('prom-client'); - +const { register, accountBalanceGauge } = require('./metrics/metrics'); // import the register and custom metrics class HTTPServer { constructor (app) { this.app = app; this.server = express(); this.port = this.app.config.METRICS_PORT; - const register = new promclient.Registry(); this.register = register; - promclient.collectDefaultMetrics({ - app: 'sentinel-monitoring-app', - timeout: 10000, - gcDurationBuckets: [0.001, 0.01, 0.1, 1, 2, 5], - register - }); - + } + + async updateAccountBalance() { + try { + const balance = await this.app.client.getAccountBalance(); + accountBalanceGauge.set(balance); + } catch (e) { + console.error('Failed to update account balance:', e); + } } start () { @@ -80,12 +80,21 @@ class HTTPServer { res.send(await this.register.metrics()); }); + this.balanceInterval = setInterval(() => { + this.updateAccountBalance(); + }, 30 * 60 * 1000); // 30 minutes + this.runningInstance = this.server.listen(this.port, () => { this.app.logger.info(`Metrics: listening via http on port ${this.port}`); }); + + + } close () { + // stop the balance interval + clearInterval(this.balanceInterval); this.runningInstance.close(() => { console.debug("HTTP server closed"); }); diff --git a/src/services/notificationJobs.js b/src/services/notificationJobs.js index bccc61da..a123eaa0 100644 --- a/src/services/notificationJobs.js +++ b/src/services/notificationJobs.js @@ -1,4 +1,3 @@ -const BN = require("bn.js"); const {wad4human} = require("@decentral.ee/web3-helpers/src/math-utils"); const timeout = ms => new Promise(resolve => setTimeout(resolve, ms)); async function trigger (obj, ms) {