Optimize suppression checks: load once per cycle, add error logging
db.py: - Add check_suppressed(suppressions, ...) for in-memory suppression lookups against pre-loaded list (eliminates N*M DB queries per monitoring cycle) - get_baseline(): log error instead of silently swallowing JSON parse failure monitor.py: - Load active suppressions once per cycle at the top of the alert loop - Pass suppressions list to _process_interfaces, _process_unifi, _process_ping_hosts - Replace all db.is_suppressed() calls with db.check_suppressed(suppressions, ...) - Reduces DB queries from 100-600+ per cycle down to 1 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
15
db.py
15
db.py
@@ -81,7 +81,7 @@ def get_baseline() -> dict:
|
||||
try:
|
||||
return json.loads(raw)
|
||||
except Exception:
|
||||
pass
|
||||
logger.error('Failed to parse interface_baseline JSON; resetting baseline')
|
||||
return {}
|
||||
|
||||
|
||||
@@ -269,6 +269,19 @@ def deactivate_suppression(sup_id: int) -> None:
|
||||
)
|
||||
|
||||
|
||||
def check_suppressed(suppressions: list, target_type: str, target_name: str, target_detail: str = '') -> bool:
|
||||
"""Check suppression against a pre-loaded list (avoids per-call DB queries)."""
|
||||
for s in suppressions:
|
||||
if s['target_type'] == 'all':
|
||||
return True
|
||||
if s['target_type'] == target_type and s['target_name'] == target_name:
|
||||
if not (s.get('target_detail') or ''):
|
||||
return True
|
||||
if target_detail and s.get('target_detail') == target_detail:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def is_suppressed(target_type: str, target_name: str, target_detail: str = '') -> bool:
|
||||
with get_conn() as conn:
|
||||
with conn.cursor() as cur:
|
||||
|
||||
Reference in New Issue
Block a user