add media, stickers, voice messages metrics

This commit is contained in:
soffee 2025-04-09 18:44:52 +03:00
parent fb5fd57238
commit ba6b39bd80
3 changed files with 63 additions and 8 deletions

View file

@ -1,7 +1,7 @@
{ {
"name": "mtproto_exporter", "name": "mtproto_exporter",
"type": "module", "type": "module",
"version": "1.2.0", "version": "1.3.0",
"packageManager": "pnpm@10.6.5", "packageManager": "pnpm@10.6.5",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {

View file

@ -34,7 +34,7 @@ console.log("Logged in as", user.username);
registry.registerMetric(metrics.newStaticPeerInfoGauge(tg)); registry.registerMetric(metrics.newStaticPeerInfoGauge(tg));
registry.registerMetric(metrics.newUnreadCountGauge(tg)); registry.registerMetric(metrics.newUnreadCountGauge(tg));
registry.registerMetric(metrics.newMessagesCounter(dp)); metrics.collectNewMessageMetrics(dp, registry);
if (config.keywords) { if (config.keywords) {
const counter = new metrics.KeywordsCounter(dp, rawToPatterns(config.keywords)); const counter = new metrics.KeywordsCounter(dp, rawToPatterns(config.keywords));

View file

@ -1,5 +1,6 @@
import type { Dispatcher } from "@mtcute/dispatcher"; import type { Dispatcher } from "@mtcute/dispatcher";
import type { TelegramClient } from "@mtcute/node"; import type { TelegramClient } from "@mtcute/node";
import type { Registry } from "prom-client";
import { PropagationAction } from "@mtcute/dispatcher"; import { PropagationAction } from "@mtcute/dispatcher";
import { Counter, Gauge } from "prom-client"; import { Counter, Gauge } from "prom-client";
@ -7,20 +8,74 @@ import { config } from "./config.js";
import { peersConfigBoolFilter, peersConfigFilter } from "./filters.js"; import { peersConfigBoolFilter, peersConfigFilter } from "./filters.js";
import { KeywordsCounter } from "./keywords.js"; import { KeywordsCounter } from "./keywords.js";
function newMessagesCounter(dp: Dispatcher) { function collectNewMessageMetrics(dp: Dispatcher, registry: Registry) {
const counter = new Counter({ const messages = new Counter({
name: "messenger_dialog_messages_count", name: "messenger_dialog_messages_count",
help: "Messages count since exporter startup", help: "Messages count since exporter startup",
labelNames: ["peerId"], labelNames: ["peerId"],
}); });
dp.onNewMessage(peersConfigFilter(config), async (msg) => { const media = new Counter({
counter.inc({ 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, peerId: msg.chat.id,
}); });
return PropagationAction.Continue; return PropagationAction.Continue;
}); });
return counter;
registry.registerMetric(media);
registry.registerMetric(stickers);
registry.registerMetric(voice);
registry.registerMetric(messages);
} }
function newStaticPeerInfoGauge(tg: TelegramClient) { function newStaticPeerInfoGauge(tg: TelegramClient) {
@ -87,8 +142,8 @@ function newWordsCounter(dp: Dispatcher) {
} }
export { export {
collectNewMessageMetrics,
KeywordsCounter, KeywordsCounter,
newMessagesCounter,
newStaticPeerInfoGauge, newStaticPeerInfoGauge,
newUnreadCountGauge, newUnreadCountGauge,
newWordsCounter, newWordsCounter,