File size: 2,817 Bytes
de2f8a3
2c41c5f
 
de2f8a3
 
2c41c5f
de2f8a3
2c41c5f
07f63a8
2c41c5f
de2f8a3
02f9eb2
2c41c5f
de2f8a3
 
2c41c5f
de2f8a3
 
2c41c5f
de2f8a3
 
 
 
 
 
2c41c5f
de2f8a3
 
 
2c41c5f
de2f8a3
 
 
 
 
 
 
 
 
 
 
 
 
07f63a8
de2f8a3
 
 
 
 
 
 
 
 
2c41c5f
 
de2f8a3
 
 
 
 
 
 
2c41c5f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import time

from pyrogram import Client, enums, filters
from pyrogram.types import Message

from Backend import StartTime, __version__, db
from Backend.helper.custom_filter import CustomFilters
from Backend.helper.pyro import get_readable_file_size, get_readable_time
from Backend.helper.settings_manager import SettingsManager
from Backend.logger import LOGGER


#----- Owner-only /stats: aggregate content and system metrics across DBs
@Client.on_message(filters.command('stats') & filters.private & CustomFilters.owner, group=10)
async def stats_command(client: Client, message: Message):
    status_msg = await message.reply_text("πŸ“Š Gathering stats…", quote=True)

    try:
        total_movies = total_tv = total_episodes = total_streams = total_db_size = 0

        for i in range(1, db.current_db_index + 1):
            storage = db.dbs.get(f"storage_{i}")
            if storage is None:
                continue

            total_movies += await storage["movie"].count_documents({})
            async for movie in storage["movie"].find({}, {"telegram": 1}):
                total_streams += len(movie.get("telegram", []))

            total_tv += await storage["tv"].count_documents({})
            async for show in storage["tv"].find({}, {"seasons": 1}):
                for season in show.get("seasons", []):
                    for episode in season.get("episodes", []):
                        total_episodes += 1
                        total_streams += len(episode.get("telegram", []))

            try:
                db_stats = await storage.command("dbStats")
                total_db_size += db_stats.get("dataSize", 0)
            except Exception:
                pass

        uptime_sec = int(time.time() - StartTime)
        channels_count = len(SettingsManager.current().auth_channels)

        text = (
            f"<blockquote>πŸ“Š <b>Telegram-Stremio v{__version__}</b></blockquote>\n\n"
            f"<b>Content</b>\n"
            f"  🎬 Movies: <code>{total_movies}</code>\n"
            f"  πŸ“Ί TV Shows: <code>{total_tv}</code>\n"
            f"  🎞 Episodes: <code>{total_episodes}</code>\n"
            f"  πŸ“ Total streams: <code>{total_streams}</code>\n\n"
            f"<b>System</b>\n"
            f"  ⏱ Uptime: <code>{get_readable_time(uptime_sec)}</code>\n"
            f"  πŸ’Ύ DB size: <code>{get_readable_file_size(total_db_size)}</code>\n"
            f"  πŸ—„ Storage DBs: <code>{db.current_db_index}</code>\n"
            f"  πŸ“‘ AUTH channels: <code>{channels_count}</code>\n"
        )
        await status_msg.edit_text(text, parse_mode=enums.ParseMode.HTML)

    except Exception as e:
        LOGGER.error(f"[Stats] Error: {e}")
        await status_msg.edit_text(f"❌ Error gathering stats: <code>{e}</code>", parse_mode=enums.ParseMode.HTML)