diff --git a/CHANGELOG.md b/CHANGELOG.md index 473e67d1d..bafcaa3f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [unreleased] + +### Fixed + +- Overview modal could show incorrect counters for `@state` labels. + ## v0.91 ### Fixed diff --git a/cmd/karma/alerts.go b/cmd/karma/alerts.go index a578c24f2..94247d1e1 100644 --- a/cmd/karma/alerts.go +++ b/cmd/karma/alerts.go @@ -394,3 +394,21 @@ func filterAlerts(dedupedAlerts []models.AlertGroup, fl []filters.FilterT) (filt return } + +func newStateCount() map[string]int { + stateCount := map[string]int{} + for _, s := range models.AlertStateList { + stateCount[s] = 0 + } + return stateCount +} + +func stateFromStateCount(stateCount map[string]int) string { + if stateCount[models.AlertStateActive] > 0 { + return models.AlertStateActive + } else if stateCount[models.AlertStateSuppressed] > 0 { + return models.AlertStateSuppressed + } else { + return models.AlertStateUnprocessed + } +} diff --git a/cmd/karma/views.go b/cmd/karma/views.go index bdf2bf40c..3ed2bf211 100644 --- a/cmd/karma/views.go +++ b/cmd/karma/views.go @@ -315,10 +315,7 @@ func alerts(w http.ResponseWriter, r *http.Request) { perGridAlertGroup[alertGridLabelValue] = agCopy } - stateCount := map[string]int{} - for _, s := range models.AlertStateList { - stateCount[s] = 0 - } + stateCount := newStateCount() switch gridLabel { case "@alertmanager": ams := []models.AlertmanagerInstance{} @@ -344,13 +341,7 @@ func alerts(w http.ResponseWriter, r *http.Request) { } } - if stateCount[models.AlertStateActive] > 0 { - alert.State = models.AlertStateActive - } else if stateCount[models.AlertStateSuppressed] > 0 { - alert.State = models.AlertStateSuppressed - } else { - alert.State = models.AlertStateUnprocessed - } + alert.State = stateFromStateCount(stateCount) agCopy.Alerts = append(agCopy.Alerts, alert) @@ -800,6 +791,14 @@ func counters(w http.ResponseWriter, r *http.Request) { for _, ag := range filtered { total += len(ag.Alerts) for _, alert := range ag.Alerts { + alert := alert + + stateCount := newStateCount() + for _, am := range alert.Alertmanager { + stateCount[am.State]++ + } + alert.State = stateFromStateCount(stateCount) + if len(upstreams.Clusters) > 1 { clusters := map[string]struct{}{} for _, am := range alert.Alertmanager {