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(
|
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
|
def _gb(value: Any) -> str: # noqa: ANN401
|
||||||
@@ -121,6 +122,9 @@ def format_alert(payload: dict) -> str:
|
|||||||
icon = "ℹ️"
|
icon = "ℹ️"
|
||||||
elif resolved:
|
elif resolved:
|
||||||
icon = "✅"
|
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:
|
else:
|
||||||
icon = LEVEL_ICON.get(level, "🔔")
|
icon = LEVEL_ICON.get(level, "🔔")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user