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",
"type": "module",
"version": "1.2.0",
"version": "1.3.0",
"packageManager": "pnpm@10.6.5",
"license": "MIT",
"scripts": {

View file

@ -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));

View file

@ -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,