From 222bdb08abb5d3a5e7e1eaa49887ba5223e015a9 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Wed, 13 May 2026 13:14:46 -0400 Subject: [PATCH] Fix suppression annotation for interface_down not checking host-level rules monitor.py checks both 'interface' and 'host' suppressions for interface_down events, but _annotate_suppressions only checked 'interface'. A host-level suppression would silently suppress tickets but not mark the table row as suppressed in the UI. Co-Authored-By: Claude Sonnet 4.6 --- app.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/app.py b/app.py index 339cd9a..ea74689 100644 --- a/app.py +++ b/app.py @@ -174,17 +174,26 @@ _PAGE_LIMIT = 200 # max events returned per request def _annotate_suppressions(events: list, suppressions: list) -> None: - """Annotate each event dict in-place with an is_suppressed bool.""" + """Annotate each event dict in-place with an is_suppressed bool. + + Mirrors the suppression check order in monitor.py exactly: + interface_down → interface OR host + unifi_device_* → unifi_device + everything else → host + """ for ev in events: - sup_type = ( - 'unifi_device' if ev.get('event_type') == 'unifi_device_offline' - else 'interface' if ev.get('event_type') == 'interface_down' - else 'host' - ) - ev['is_suppressed'] = db.check_suppressed( - suppressions, sup_type, - ev.get('target_name', ''), ev.get('target_detail', '') or '', - ) + etype = ev.get('event_type', '') + name = ev.get('target_name', '') + detail = ev.get('target_detail', '') or '' + if etype == 'interface_down': + ev['is_suppressed'] = ( + db.check_suppressed(suppressions, 'interface', name, detail) or + db.check_suppressed(suppressions, 'host', name) + ) + elif etype == 'unifi_device_offline': + ev['is_suppressed'] = db.check_suppressed(suppressions, 'unifi_device', name, detail) + else: + ev['is_suppressed'] = db.check_suppressed(suppressions, 'host', name, detail) # ---------------------------------------------------------------------------