From 764f89e1d856169ca7c86466a9e93ea91793cc40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Fri, 30 Nov 2018 18:57:52 +0000 Subject: [PATCH] feat(api): expose all known Alertmanager clusters --- alerts.go | 17 ++++++++++++++++- internal/models/alertmanager.go | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/alerts.go b/alerts.go index 358cde79b..267c7f189 100644 --- a/alerts.go +++ b/alerts.go @@ -1,6 +1,9 @@ package main import ( + "sort" + "strings" + "github.com/prymitive/karma/internal/alertmanager" "github.com/prymitive/karma/internal/filters" "github.com/prymitive/karma/internal/models" @@ -33,15 +36,23 @@ func countLabel(countStore models.LabelsCountMap, key string, val string) { func getUpstreams() models.AlertmanagerAPISummary { summary := models.AlertmanagerAPISummary{} + clusters := map[string][]string{} upstreams := alertmanager.GetAlertmanagers() for _, upstream := range upstreams { + members := upstream.ClusterMemberNames() + sort.Strings(members) + key := strings.Join(members[:], "\n") + if _, found := clusters[key]; !found { + clusters[key] = members + } + u := models.AlertmanagerAPIStatus{ Name: upstream.Name, URI: upstream.SanitizedURI(), PublicURI: upstream.PublicURI(), Error: upstream.Error(), Version: upstream.Version(), - ClusterMembers: upstream.ClusterMemberNames(), + ClusterMembers: members, } summary.Instances = append(summary.Instances, u) @@ -53,5 +64,9 @@ func getUpstreams() models.AlertmanagerAPISummary { } } + for _, cluster := range clusters { + summary.Clusters = append(summary.Clusters, cluster) + } + return summary } diff --git a/internal/models/alertmanager.go b/internal/models/alertmanager.go index d40087a91..718322822 100644 --- a/internal/models/alertmanager.go +++ b/internal/models/alertmanager.go @@ -47,4 +47,5 @@ type AlertmanagerAPICounters struct { type AlertmanagerAPISummary struct { Counters AlertmanagerAPICounters `json:"counters"` Instances []AlertmanagerAPIStatus `json:"instances"` + Clusters [][]string `json:"clusters"` }