import asyncio import socket from datetime import datetime from app import bot, dp, cfg, ADMIN_ID from keyboards import menu_kb from services.docker import discover_containers, docker_watchdog from services.alerts import monitor_resources, monitor_smart from services.metrics import MetricsStore, start_sampler from services.queue import worker as queue_worker from services.notify import notify from services.audit import AuditMiddleware import state import handlers.menu import handlers.status import handlers.docker import handlers.backup import handlers.artifacts import handlers.system import handlers.help import handlers.callbacks import handlers.arcane async def notify_start(): await bot.send_message( ADMIN_ID, f"šŸ¤– Bot started\nšŸ–„ {socket.gethostname()}\nšŸ•’ {datetime.now():%Y-%m-%d %H:%M}", reply_markup=menu_kb, ) async def main(): dp.update.outer_middleware(AuditMiddleware(cfg)) state.DOCKER_MAP.clear() state.DOCKER_MAP.update(await discover_containers(cfg)) if cfg.get("docker", {}).get("watchdog", True): asyncio.create_task(docker_watchdog(state.DOCKER_MAP, notify, bot, ADMIN_ID)) if cfg.get("alerts", {}).get("enabled", True): asyncio.create_task(monitor_resources(cfg, notify, bot, ADMIN_ID)) if cfg.get("alerts", {}).get("smart_enabled", True): asyncio.create_task(monitor_smart(cfg, notify, bot, ADMIN_ID)) state.METRICS_STORE = MetricsStore() asyncio.create_task(start_sampler(state.METRICS_STORE, interval=5)) asyncio.create_task(queue_worker()) await notify_start() await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())