From ba6b39bd80daf16081297115fddf9a43c082a76b Mon Sep 17 00:00:00 2001 From: soffee Date: Wed, 9 Apr 2025 18:44:52 +0300 Subject: [PATCH] add media, stickers, voice messages metrics --- package.json | 2 +- src/main.ts | 2 +- src/metrics.ts | 67 +++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index a0e5b1e..c2a8be1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mtproto_exporter", "type": "module", - "version": "1.2.0", + "version": "1.3.0", "packageManager": "pnpm@10.6.5", "license": "MIT", "scripts": { diff --git a/src/main.ts b/src/main.ts index 53db075..0221ace 100644 --- a/src/main.ts +++ b/src/main.ts @@ -34,7 +34,7 @@ console.log("Logged in as", user.username); registry.registerMetric(metrics.newStaticPeerInfoGauge(tg)); registry.registerMetric(metrics.newUnreadCountGauge(tg)); -registry.registerMetric(metrics.newMessagesCounter(dp)); +metrics.collectNewMessageMetrics(dp, registry); if (config.keywords) { const counter = new metrics.KeywordsCounter(dp, rawToPatterns(config.keywords)); diff --git a/src/metrics.ts b/src/metrics.ts index daa9a55..84e4e2e 100644 --- a/src/metrics.ts +++ b/src/metrics.ts @@ -1,5 +1,6 @@ import type { Dispatcher } from "@mtcute/dispatcher"; import type { TelegramClient } from "@mtcute/node"; +import type { Registry } from "prom-client"; import { PropagationAction } from "@mtcute/dispatcher"; import { Counter, Gauge } from "prom-client"; @@ -7,20 +8,74 @@ import { config } from "./config.js"; import { peersConfigBoolFilter, peersConfigFilter } from "./filters.js"; import { KeywordsCounter } from "./keywords.js"; -function newMessagesCounter(dp: Dispatcher) { - const counter = new Counter({ +function collectNewMessageMetrics(dp: Dispatcher, registry: Registry) { + const messages = new Counter({ name: "messenger_dialog_messages_count", help: "Messages count since exporter startup", labelNames: ["peerId"], }); - dp.onNewMessage(peersConfigFilter(config), async (msg) => { - counter.inc({ + const media = new Counter({ + name: "messenger_dialog_media_sent_count", + help: "Medias sent since exporter startup", + labelNames: ["peerId"], + }); + + const stickers = new Counter({ + name: "messenger_dialog_stickers_sent_count", + help: "Stickers sent since exporter startup", + labelNames: ["peerId"], + }); + + const voice = new Counter({ + name: "messenger_dialog_voice_messages_count", + help: "Voice messages sent since exporter startup", + labelNames: ["peerId"], + }); + + dp.onNewMessage(peersConfigFilter(config), (msg) => { + if (msg.media) { + let counter; + switch (msg.media.type) { + case "photo": case "audio": case "document": { + counter = media; + break; + } + case "sticker": { + counter = stickers; + break; + } + case "voice": { + counter = voice; + break; + } + case "video": { + if (msg.media.isRound) { + counter = voice; + } else { + counter = media; + } + break; + } + } + if (counter) { + counter.inc({ + peerId: msg.chat.id, + }); + } + } + + messages.inc({ peerId: msg.chat.id, }); + return PropagationAction.Continue; }); - return counter; + + registry.registerMetric(media); + registry.registerMetric(stickers); + registry.registerMetric(voice); + registry.registerMetric(messages); } function newStaticPeerInfoGauge(tg: TelegramClient) { @@ -87,8 +142,8 @@ function newWordsCounter(dp: Dispatcher) { } export { + collectNewMessageMetrics, KeywordsCounter, - newMessagesCounter, newStaticPeerInfoGauge, newUnreadCountGauge, newWordsCounter,