feat: always notify agent.lifecycle via SAC with telegram_via routing
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -277,7 +277,52 @@ def format_generic_event_html(event: Event) -> str:
|
||||
return msg.rstrip()
|
||||
|
||||
|
||||
_LIFECYCLE_HEADERS: dict[str, str] = {
|
||||
"started": "✅ Агент запущен",
|
||||
"stopped": "⚠️ Агент остановлен",
|
||||
"settings_reloaded": "🔄 Настройки агента перечитаны",
|
||||
}
|
||||
|
||||
_LIFECYCLE_TRIGGER_LABELS: dict[str, str] = {
|
||||
"boot": "загрузка ОС / задача планировщика",
|
||||
"deploy_recycle": "обновление скрипта (recycle)",
|
||||
"settings_reload": "graceful restart (settings)",
|
||||
"manual_recycle": "ручной recycle",
|
||||
"shutdown": "остановка процесса",
|
||||
}
|
||||
|
||||
|
||||
def format_lifecycle_html(event: Event) -> str:
|
||||
details = _details_dict(event)
|
||||
lifecycle = _detail(details, "lifecycle", default="started").strip().lower()
|
||||
trigger = _detail(details, "trigger", default="").strip().lower()
|
||||
header = _LIFECYCLE_HEADERS.get(lifecycle, f"📋 Lifecycle: {html_escape(lifecycle)}")
|
||||
|
||||
msg = f"<b>{header}</b>\n"
|
||||
msg += _line("🏢", "Хост", host_label(event.host))
|
||||
product = ""
|
||||
version = ""
|
||||
payload = event.payload if isinstance(event.payload, dict) else {}
|
||||
source = payload.get("source")
|
||||
if isinstance(source, dict):
|
||||
product = str(source.get("product") or "").strip()
|
||||
version = str(source.get("product_version") or "").strip()
|
||||
if product or version:
|
||||
label = " ".join(x for x in (product, version) if x).strip()
|
||||
if label:
|
||||
msg += _line("📦", "Версия", html_escape(label))
|
||||
if trigger and trigger != "-":
|
||||
trigger_human = _LIFECYCLE_TRIGGER_LABELS.get(trigger, trigger)
|
||||
msg += _line("🔁", "Причина", html_escape(trigger_human))
|
||||
msg += _line("🕐", "Время", format_time(event.occurred_at))
|
||||
if event.summary:
|
||||
msg += f"\n{html_escape(event.summary)}"
|
||||
return msg.rstrip()
|
||||
|
||||
|
||||
def _format_event_body_html(event: Event) -> str:
|
||||
if event.type == "agent.lifecycle":
|
||||
return format_lifecycle_html(event)
|
||||
if event.type in ("report.daily.ssh", "report.daily.rdp"):
|
||||
details = _details_dict(event)
|
||||
platform = "windows" if event.type == "report.daily.rdp" else "ssh"
|
||||
|
||||
Reference in New Issue
Block a user