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