Path: blob/master/bot/modules/status.py
1619 views
from psutil import cpu_percent, virtual_memory, disk_usage1from time import time2from asyncio import gather, iscoroutinefunction34from .. import (5task_dict_lock,6status_dict,7task_dict,8bot_start_time,9intervals,10sabnzbd_client,11DOWNLOAD_DIR,12)13from ..core.torrent_manager import TorrentManager14from ..core.jdownloader_booter import jdownloader15from ..helper.ext_utils.bot_utils import new_task16from ..helper.ext_utils.status_utils import (17MirrorStatus,18get_readable_file_size,19get_readable_time,20speed_string_to_bytes,21)22from ..helper.telegram_helper.bot_commands import BotCommands23from ..helper.telegram_helper.message_utils import (24send_message,25delete_message,26auto_delete_message,27send_status_message,28update_status_message,29edit_message,30)31from ..helper.telegram_helper.button_build import ButtonMaker323334@new_task35async def task_status(_, message):36async with task_dict_lock:37count = len(task_dict)38if count == 0:39currentTime = get_readable_time(time() - bot_start_time)40free = get_readable_file_size(disk_usage(DOWNLOAD_DIR).free)41msg = f"No Active Tasks!\nEach user can get status for his tasks by adding me or user_id after cmd: /{BotCommands.StatusCommand} me"42msg += (43f"\n<b>CPU:</b> {cpu_percent()}% | <b>FREE:</b> {free}"44f"\n<b>RAM:</b> {virtual_memory().percent}% | <b>UPTIME:</b> {currentTime}"45)46reply_message = await send_message(message, msg)47await auto_delete_message(message, reply_message)48else:49text = message.text.split()50if len(text) > 1:51user_id = message.from_user.id if text[1] == "me" else int(text[1])52else:53user_id = 054sid = message.chat.id55if obj := intervals["status"].get(sid):56obj.cancel()57del intervals["status"][sid]58await send_status_message(message, user_id)59await delete_message(message)606162async def get_download_status(download):63tool = download.tool64if tool in [65"telegram",66"yt-dlp",67"rclone",68"gDriveApi",69]:70speed = download.speed()71else:72speed = 073return (74await download.status()75if iscoroutinefunction(download.status)76else download.status()77), speed787980@new_task81async def status_pages(_, query):82data = query.data.split()83key = int(data[1])84await query.answer()85if data[2] == "ref":86await update_status_message(key, force=True)87elif data[2] in ["nex", "pre"]:88async with task_dict_lock:89if key in status_dict:90if data[2] == "nex":91status_dict[key]["page_no"] += status_dict[key]["page_step"]92else:93status_dict[key]["page_no"] -= status_dict[key]["page_step"]94elif data[2] == "ps":95async with task_dict_lock:96if key in status_dict:97status_dict[key]["page_step"] = int(data[3])98elif data[2] == "st":99async with task_dict_lock:100if key in status_dict:101status_dict[key]["status"] = data[3]102await update_status_message(key, force=True)103elif data[2] == "ov":104ds, ss = await TorrentManager.overall_speed()105if sabnzbd_client.LOGGED_IN:106sds = await sabnzbd_client.get_downloads()107sds = int(float(sds["queue"].get("kbpersec", "0"))) * 1024108ds += sds109if jdownloader.is_connected:110jdres = await jdownloader.device.downloadcontroller.get_speed_in_bytes()111ds += jdres112message = query.message113tasks = {114"Download": 0,115"Upload": 0,116"Seed": 0,117"Archive": 0,118"Extract": 0,119"Split": 0,120"QueueDl": 0,121"QueueUp": 0,122"Clone": 0,123"CheckUp": 0,124"Pause": 0,125"SamVid": 0,126"ConvertMedia": 0,127"FFmpeg": 0,128}129dl_speed = ds130up_speed = 0131seed_speed = ss132async with task_dict_lock:133status_results = await gather(134*(get_download_status(download) for download in task_dict.values())135)136for status, speed in status_results:137match status:138case MirrorStatus.STATUS_DOWNLOAD:139tasks["Download"] += 1140if speed:141dl_speed += speed_string_to_bytes(speed)142case MirrorStatus.STATUS_UPLOAD:143tasks["Upload"] += 1144up_speed += speed_string_to_bytes(speed)145case MirrorStatus.STATUS_SEED:146tasks["Seed"] += 1147case MirrorStatus.STATUS_ARCHIVE:148tasks["Archive"] += 1149case MirrorStatus.STATUS_EXTRACT:150tasks["Extract"] += 1151case MirrorStatus.STATUS_SPLIT:152tasks["Split"] += 1153case MirrorStatus.STATUS_QUEUEDL:154tasks["QueueDl"] += 1155case MirrorStatus.STATUS_QUEUEUP:156tasks["QueueUp"] += 1157case MirrorStatus.STATUS_CLONE:158tasks["Clone"] += 1159case MirrorStatus.STATUS_CHECK:160tasks["CheckUp"] += 1161case MirrorStatus.STATUS_PAUSED:162tasks["Pause"] += 1163case MirrorStatus.STATUS_SAMVID:164tasks["SamVid"] += 1165case MirrorStatus.STATUS_CONVERT:166tasks["ConvertMedia"] += 1167case MirrorStatus.STATUS_FFMPEG:168tasks["FFmpeg"] += 1169case _:170tasks["Download"] += 1171172msg = f"""<b>DL:</b> {tasks['Download']} | <b>UP:</b> {tasks['Upload']} | <b>SD:</b> {tasks['Seed']} | <b>AR:</b> {tasks['Archive']}173<b>EX:</b> {tasks['Extract']} | <b>SP:</b> {tasks['Split']} | <b>QD:</b> {tasks['QueueDl']} | <b>QU:</b> {tasks['QueueUp']}174<b>CL:</b> {tasks['Clone']} | <b>CK:</b> {tasks['CheckUp']} | <b>PA:</b> {tasks['Pause']} | <b>SV:</b> {tasks['SamVid']}175<b>CM:</b> {tasks['ConvertMedia']} | <b>FF:</b> {tasks['FFmpeg']}176177<b>ODLS:</b> {get_readable_file_size(dl_speed)}/s178<b>OULS:</b> {get_readable_file_size(up_speed)}/s179<b>OSDS:</b> {get_readable_file_size(seed_speed)}/s180"""181button = ButtonMaker()182button.data_button("Back", f"status {data[1]} ref")183await edit_message(message, msg, button.build_menu())184185186