From 992d07e904f672876684aed0cb5cf7783e5d6a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Fri, 12 Jun 2020 11:38:18 +0100 Subject: [PATCH] fix(api): fix handling of clusters in silence responses --- cmd/karma/api_test.go | 4 ++-- cmd/karma/views.go | 21 +++++++-------------- internal/alertmanager/dedup.go | 2 +- internal/alertmanager/models.go | 12 ------------ 4 files changed, 10 insertions(+), 29 deletions(-) diff --git a/cmd/karma/api_test.go b/cmd/karma/api_test.go index 8493da951..ecdf613e1 100644 --- a/cmd/karma/api_test.go +++ b/cmd/karma/api_test.go @@ -1024,9 +1024,9 @@ func TestVerifyAllGroups(t *testing.T) { } } - am, foundAM := ur.Silences["843c4a11660fe38ea61e6960a29d4f4796da6488"] + am, foundAM := ur.Silences["default"] if !foundAM { - t.Errorf("[%s] Alertmanager cluster '843c4a11660fe38ea61e6960a29d4f4796da6488' (default) missing from silences", version) + t.Errorf("[%s] Alertmanager cluster 'default' (default) missing from silences", version) } else if len(am) == 0 { t.Errorf("[%s] Silences mismatch, expected >0 but got %d", version, len(am)) } diff --git a/cmd/karma/views.go b/cmd/karma/views.go index 6025829cd..a16fabc4d 100644 --- a/cmd/karma/views.go +++ b/cmd/karma/views.go @@ -217,7 +217,7 @@ func alerts(c *gin.Context) { amNameToCluster := map[string]string{} silences := map[string]map[string]models.Silence{} for _, am := range alertmanager.GetAlertmanagers() { - key := am.ClusterID() + key := am.ClusterName() amNameToCluster[am.Name] = key _, found := silences[key] if !found { @@ -253,30 +253,23 @@ func alerts(c *gin.Context) { // only for alerts left after filtering alert.UpdateFingerprints() - var alertGridLabelValues []string + alertGridLabelValues := map[string]bool{} switch gridLabel { case "@receiver": - alertGridLabelValues = []string{alert.Receiver} + alertGridLabelValues[alert.Receiver] = true case "@alertmanager": - alertGridLabelValues = make([]string, 0, len(alert.Alertmanager)) for _, am := range alert.Alertmanager { - alertGridLabelValues = append(alertGridLabelValues, am.Name) + alertGridLabelValues[am.Name] = true } case "@cluster": - alertGridLabelValues = make([]string, 0, len(alert.Alertmanager)) for _, am := range alert.Alertmanager { - for _, upstream := range upstreams.Instances { - if am.Name == upstream.Name { - alertGridLabelValues = append(alertGridLabelValues, upstream.Cluster) - } - break - } + alertGridLabelValues[am.Cluster] = true } default: - alertGridLabelValues = []string{alert.Labels[gridLabel]} + alertGridLabelValues[alert.Labels[gridLabel]] = true } - for _, alertGridLabelValue := range alertGridLabelValues { + for alertGridLabelValue, _ := range alertGridLabelValues { agCopy, found := perGridAlertGroup[alertGridLabelValue] if !found { agCopy = &models.AlertGroup{ diff --git a/internal/alertmanager/dedup.go b/internal/alertmanager/dedup.go index baf2b2fb4..6d32e33c5 100644 --- a/internal/alertmanager/dedup.go +++ b/internal/alertmanager/dedup.go @@ -102,7 +102,7 @@ func DedupSilences() []models.ManagedSilence { for _, am := range upstreams { for id, silence := range am.Silences() { - cluster := am.ClusterID() + cluster := am.ClusterName() if _, found := silenceByCluster[cluster]; !found { silenceByCluster[cluster] = map[string]models.Silence{} diff --git a/internal/alertmanager/models.go b/internal/alertmanager/models.go index 01c259abb..c2faa619b 100644 --- a/internal/alertmanager/models.go +++ b/internal/alertmanager/models.go @@ -478,18 +478,6 @@ func (am *Alertmanager) ClusterMemberNames() []string { return members } -// ClusterID returns the ID (sha1) of the cluster this Alertmanager instance -// belongs to -func (am *Alertmanager) ClusterID() string { - members := am.ClusterMemberNames() - id, err := slices.StringSliceToSHA1(members) - if err != nil { - log.Errorf("slices.StringSliceToSHA1 error: %s", err) - return am.Name - } - return id -} - func (am *Alertmanager) ClusterName() string { am.lock.RLock() if am.clusterName != "" {