fix(alerts): state changes are one-shot, icon by target state

This commit is contained in:
hh
2026-08-30 18:09:25 +02:00
parent 6bc97297b1
commit f8169810dc
+11 -7
View File
@@ -18,15 +18,16 @@ INFORMATIONAL = frozenset(
)
FAILURE = frozenset(
{
"ProcedureFailed",
"ActionFailed",
"BuildFailed",
"RepoBuildFailed",
}
{"ProcedureFailed", "ActionFailed", "BuildFailed", "RepoBuildFailed"}
)
ONE_SHOT = INFORMATIONAL | FAILURE
# Komodo создаёт их сразу с resolved=true (resolved_ts == ts): это факт
# «состояние сменилось», а не тревога, которую потом снимают. Без этого
# и running → unhealthy, и unhealthy → running приходили как «Отбой».
STATE_CHANGE = frozenset({"StackStateChange", "ContainerStateChange"})
HEALTHY_STATES = frozenset({"running", "healthy"})
ONE_SHOT = INFORMATIONAL | FAILURE | STATE_CHANGE
def _gb(value: Any) -> str: # noqa: ANN401
@@ -121,6 +122,9 @@ def format_alert(payload: dict) -> str:
icon = ""
elif resolved:
icon = ""
elif kind in STATE_CHANGE:
to = str((inner or {}).get("to", "")).lower() if isinstance(inner, dict) else ""
icon = "" if to in HEALTHY_STATES else LEVEL_ICON.get(level, "🟠")
else:
icon = LEVEL_ICON.get(level, "🔔")