1
0
Fork 0
mirror of https://github.com/EDeev/alertbot.git synced 2026-10-07 20:49:56 +03:00
alertbot/bot.py
Egor Deev 56638f5878 Docker: образ на python:3.12-slim, compose с томом для базы
Лог в файл стал необязательным (ALERTBOT_LOG_FILE): в контейнере пишем только в stdout.
2026-10-02 19:25:42 +00:00

55 lines
1.8 KiB
Python

import asyncio
import logging
import os
import sys
from aiogram.types import BotCommand
from init import bot, dp
from handlers import router, alert_poller
_log_handlers = [logging.StreamHandler(sys.stdout)]
# File log is optional: in Docker set ALERTBOT_LOG_FILE= (empty) and read `docker logs`
if os.environ.get("ALERTBOT_LOG_FILE", "bot.log"):
_log_handlers.append(logging.FileHandler(os.environ.get("ALERTBOT_LOG_FILE", "bot.log"), encoding="utf-8"))
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=_log_handlers,
)
log = logging.getLogger(__name__)
COMMANDS = [
BotCommand(command="servers", description="CPU / RAM / диск / аптайм по узлам"),
BotCommand(command="services", description="что работает и что нет"),
BotCommand(command="certs", description="дни до истечения TLS"),
BotCommand(command="alerts", description="активные алерты (on/off — подписка)"),
BotCommand(command="status", description="что включено"),
BotCommand(command="help", description="справка"),
]
async def main() -> None:
log.info("alertbot starting")
dp.include_router(router)
await bot.delete_webhook(drop_pending_updates=True)
try:
await bot.set_my_commands(COMMANDS)
except Exception as e:
log.warning("set_my_commands failed: %s", e)
poller = asyncio.create_task(alert_poller())
try:
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(),
timeout=20, relax=0.1)
finally:
poller.cancel()
await bot.session.close()
log.info("alertbot stopped")
if __name__ == "__main__":
try:
asyncio.run(main())
except (KeyboardInterrupt, SystemExit):
pass