diff --git a/handlers/alerts_admin.py b/handlers/alerts_admin.py index db08e47..82419c3 100644 --- a/handlers/alerts_admin.py +++ b/handlers/alerts_admin.py @@ -32,7 +32,7 @@ async def _handle_alerts(msg: Message, action: str, args: list[str]): key = f"test:{level}:{int(time.time())}" await notify(bot, msg.chat.id, f"[TEST] {level.upper()} alert", level=level, key=key, category="test") await msg.answer(f"Sent test alert: {level}") - log_incident(cfg, f"alert_test level={level} by {msg.from_user.id}") + log_incident(cfg, f"alert_test level={level} by {msg.from_user.id}", category="test") return if action == "mute": @@ -49,7 +49,7 @@ async def _handle_alerts(msg: Message, action: str, args: list[str]): until = set_mute(category, minutes * 60) dt = datetime.fromtimestamp(until, tz=timezone.utc).astimezone() await msg.answer(f"๐Ÿ”• Muted {category} for {minutes}m (until {dt:%Y-%m-%d %H:%M:%S})") - log_incident(cfg, f"alert_mute category={category} minutes={minutes} by {msg.from_user.id}") + log_incident(cfg, f"alert_mute category={category} minutes={minutes} by {msg.from_user.id}", category=category) return if action == "unmute": @@ -59,7 +59,7 @@ async def _handle_alerts(msg: Message, action: str, args: list[str]): category = args[0].lower() clear_mute(category) await msg.answer(f"๐Ÿ”” Unmuted {category}") - log_incident(cfg, f"alert_unmute category={category} by {msg.from_user.id}") + log_incident(cfg, f"alert_unmute category={category} by {msg.from_user.id}", category=category) return if action in ("list", "mutes"): diff --git a/handlers/backup.py b/handlers/backup.py index 1e9c869..fcfbad1 100644 --- a/handlers/backup.py +++ b/handlers/backup.py @@ -367,7 +367,7 @@ async def schedule_backup(msg: Message): await msg.answer(f"๐Ÿ•“ Backup queued (#{pos})", reply_markup=backup_kb) try: from services.incidents import log_incident - log_incident(cfg, f"backup_queued by {msg.from_user.id}") + log_incident(cfg, f"backup_queued by {msg.from_user.id}", category="backup") except Exception: pass diff --git a/handlers/docker.py b/handlers/docker.py index ec0606b..f947d0a 100644 --- a/handlers/docker.py +++ b/handlers/docker.py @@ -44,7 +44,7 @@ async def cmd_docker_status(msg: Message): lines.append(f"{icon} {alias}: {status} ({up})") await msg.answer("\n".join(lines), reply_markup=docker_kb) - log_incident(cfg, f"docker_status by {msg.from_user.id}") + log_incident(cfg, f"docker_status by {msg.from_user.id}", category="docker") except Exception as e: # โฌ…๏ธ ะšะ ะ˜ะขะ˜ะงะ•ะกะšะ˜ ะ’ะะ–ะะž @@ -122,7 +122,7 @@ async def docker_health(msg: Message): out_line = entry.get("Output", "").strip() lines.append(f"- {ts} rc={exitc} {out_line}") await msg.answer("\n".join(lines), reply_markup=docker_kb) - log_incident(cfg, f"docker_health alias={alias} by {msg.from_user.id}") + log_incident(cfg, f"docker_health alias={alias} by {msg.from_user.id}", category="docker") @dp.message(F.text == "๐Ÿ“ˆ Stats") diff --git a/main.py b/main.py index 2f1261e..b2802cd 100644 --- a/main.py +++ b/main.py @@ -39,7 +39,7 @@ def _handle_async_exception(_loop, context): else: text = f"โŒ {msg}" try: - log_incident(cfg, text) + log_incident(cfg, text, category="system") except Exception: pass logging.getLogger("asyncio").error(text) diff --git a/services/incidents.py b/services/incidents.py index f394624..aa0b502 100644 --- a/services/incidents.py +++ b/services/incidents.py @@ -44,9 +44,11 @@ def _get_logger(cfg: dict[str, Any]) -> logging.Logger: return logger -def log_incident(cfg: dict[str, Any], text: str) -> None: +def log_incident(cfg: dict[str, Any], text: str, category: str | None = None) -> None: if not cfg.get("incidents", {}).get("enabled", True): return + if category and "category=" not in text: + text = f"category={category} {text}" logger = _get_logger(cfg) logger.info(text) diff --git a/services/notify.py b/services/notify.py index 61d7cd2..1fcba34 100644 --- a/services/notify.py +++ b/services/notify.py @@ -70,6 +70,6 @@ async def notify( except Exception: pass try: - log_incident(cfg, text) + log_incident(cfg, text, category=category) except Exception: pass