From dab53c68571af3552dbfe790ebd0494825dc518a Mon Sep 17 00:00:00 2001 From: soffee Date: Wed, 9 Apr 2025 20:13:09 +0300 Subject: [PATCH] add api dialogs iter duration histogram metric --- src/metrics/dialogs.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/metrics/dialogs.ts b/src/metrics/dialogs.ts index 9596079..7bd3e8c 100644 --- a/src/metrics/dialogs.ts +++ b/src/metrics/dialogs.ts @@ -2,9 +2,9 @@ import type { Dialog, TelegramClient } from "@mtcute/node"; import type { Registry } from "prom-client"; import process from "node:process"; - import timers from "node:timers/promises"; -import { Gauge } from "prom-client"; + +import { Gauge, Histogram } from "prom-client"; import { config } from "../config.js"; import { peersConfigBoolFilter } from "../filters.js"; @@ -41,6 +41,7 @@ export function collectDialogMetrics(tg: TelegramClient, registry: Registry) { }, }); + dialogs.registerMetrics(registry); registry.registerMetric(info); registry.registerMetric(unread); } @@ -51,8 +52,18 @@ class DialogsHolder { private isUpdating = false; private ttl: bigint; + private dialogsIterDurationHistogram: Histogram; + constructor(private tg: TelegramClient, ttl: number, private timeout: number, private pollInterval = 10) { this.ttl = BigInt(ttl) * 1000000n; + this.dialogsIterDurationHistogram = new Histogram({ + name: "telegram_api_dialogs_iter_duration", + help: "Duration of iteration over telegram dialogs", + }); + } + + public registerMetrics(registry: Registry) { + registry.registerMetric(this.dialogsIterDurationHistogram); } public async get() { @@ -67,12 +78,14 @@ class DialogsHolder { if (process.hrtime.bigint() - this.lastUpdate > this.ttl) { this.isUpdating = true; this.dialogs = []; + const end = this.dialogsIterDurationHistogram.startTimer(); for await (const d of this.tg.iterDialogs()) { if (!peersConfigBoolFilter(config, d.peer.id)) { continue; } this.dialogs.push(d); } + end(); this.lastUpdate = process.hrtime.bigint(); this.isUpdating = false; }