From cf365b5f80e68b77cca6e27cf1bf78ddc7ee3041 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Thu, 2 Oct 2025 11:31:56 +0000 Subject: [PATCH] fix: add default TimeThresholds to prevent hair-trigger alerts (fixes #491) Root cause: NewManager() was missing TimeThresholds initialization, causing all alert types to use 0-second delay. This meant alerts fired immediately on the first sample exceeding threshold, with no debouncing. Impact: LXC containers with brief CPU spikes to ~100% (normal for single-core saturation) triggered constant alerts instead of only alerting on sustained high CPU usage. Fix: Add default TimeThresholds: - guest: 10s delay (prevents alerts from brief CPU spikes) - node: 15s delay - storage: 30s delay - pbs: 30s delay This ensures CPU must stay above threshold for the configured duration before an alert fires, preventing noise from momentary spikes. Fixes #491 --- internal/alerts/alerts.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/alerts/alerts.go b/internal/alerts/alerts.go index f56e38cd9..87280f125 100644 --- a/internal/alerts/alerts.go +++ b/internal/alerts/alerts.go @@ -247,7 +247,13 @@ func NewManager() *Manager { MinimumDelta: 2.0, // 2% minimum change SuppressionWindow: 5, // 5 minutes HysteresisMargin: 5.0, // 5% default margin - Overrides: make(map[string]ThresholdConfig), + TimeThresholds: map[string]int{ + "guest": 10, // 10 second delay for guest CPU alerts + "node": 15, // 15 second delay for node alerts + "storage": 30, // 30 second delay for storage alerts + "pbs": 30, // 30 second delay for PBS alerts + }, + Overrides: make(map[string]ThresholdConfig), Schedule: ScheduleConfig{ QuietHours: QuietHours{ Enabled: false, // OFF - users should opt-in to quiet hours