fix: properly handle 100% thresholds to disable alerts (addresses #434)

When a threshold is set to 100%, it now effectively disables alerts for that metric.
This allows users to turn off specific alerts without disabling all alerts for a resource.
Also clears any existing alerts when threshold is changed to 100%.
This commit is contained in:
Pulse Monitor
2025-09-09 21:04:00 +00:00
parent 99f53f95af
commit ffb744d711
+29
View File
@@ -923,6 +923,35 @@ func (m *Manager) checkMetric(resourceID, resourceName, node, instance, resource
return
}
// Special case: 100% threshold effectively disables alerts for this metric
if threshold.Trigger >= 100 {
log.Debug().
Str("resource", resourceName).
Str("metric", metricType).
Float64("value", value).
Float64("threshold", threshold.Trigger).
Msg("Alert disabled (100% threshold)")
// Clear any existing alert for this metric
alertID := fmt.Sprintf("%s-%s", resourceID, metricType)
m.mu.Lock()
if _, exists := m.activeAlerts[alertID]; exists {
delete(m.activeAlerts, alertID)
log.Info().
Str("alertID", alertID).
Str("resource", resourceName).
Str("metric", metricType).
Msg("Cleared alert - threshold set to 100%")
// Notify resolution
if m.onResolved != nil {
go m.onResolved(alertID)
}
}
m.mu.Unlock()
return
}
log.Debug().
Str("resource", resourceName).
Str("metric", metricType).