diff --git a/src/lib/metrics-gauge.ts b/src/lib/metrics-gauge.ts index 60accbeaba..86a0c639ec 100644 --- a/src/lib/metrics-gauge.ts +++ b/src/lib/metrics-gauge.ts @@ -20,9 +20,13 @@ type GaugeDefinition = { }; type Task = () => Promise; + +interface GaugeUpdater { + target: Gauge; + task: Task; +} export class DbMetricsMonitor { - private tasks: Set = new Set(); - private gauges: Map> = new Map(); + private updaters: Map = new Map(); private log: Logger; constructor({ getLogger }: Pick) { @@ -37,7 +41,6 @@ export class DbMetricsMonitor { definition: GaugeDefinition, ): Task { const gauge = createGauge(definition); - this.gauges.set(definition.name, gauge); const task = async () => { try { const result = await definition.query(); @@ -56,12 +59,15 @@ export class DbMetricsMonitor { this.log.warn(`Failed to refresh ${definition.name}`, e); } }; - this.tasks.add(task); + this.updaters.set(definition.name, { target: gauge, task }); return task; } refreshDbMetrics = async () => { - for (const task of this.tasks) { + const tasks = Array.from(this.updaters.values()).map( + (updater) => updater.task, + ); + for (const task of tasks) { await task(); } }; @@ -70,7 +76,7 @@ export class DbMetricsMonitor { name: string, labels?: Record, ): Promise { - const gauge = await this.gauges.get(name)?.gauge?.get(); + const gauge = await this.updaters.get(name)?.target.gauge?.get(); if (gauge && gauge.values.length > 0) { const values = labels ? gauge.values.filter(({ labels: l }) => {