fix(alerts): state changes are one-shot, icon by target state
This commit is contained in:
+11
-7
@@ -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, "🔔")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user