Store alert state per instance

This commit is contained in:
Łukasz Mierzwa
2017-07-01 12:43:15 -07:00
parent 8ef0f3881e
commit f2b21a60e2
3 changed files with 18 additions and 0 deletions
+15
View File
@@ -24,6 +24,7 @@ func DedupAlerts() []models.AlertGroup {
}
dedupedGroups := []models.AlertGroup{}
alertStates := map[string][]string{}
for _, agList := range uniqueGroups {
alerts := map[string]models.Alert{}
for _, ag := range agList {
@@ -48,14 +49,28 @@ func DedupAlerts() []models.AlertGroup {
}
// update map
alerts[alertLFP] = a
// and append alert state to the slice
alertStates[alertLFP] = append(alertStates[alertLFP], a.State)
} else {
alerts[alertLFP] = models.Alert(alert)
// seed alert state slice
alertStates[alertLFP] = []string{alert.State}
}
}
}
ag := models.AlertGroup(agList[0])
ag.Alerts = models.AlertList{}
for _, alert := range alerts {
// calculate final alert state based on the most important value found
// in the list of states from all instances
alertLFP := alert.LabelsFingerprint()
if slices.StringInSlice(alertStates[alertLFP], models.AlertStateActive) {
alert.State = models.AlertStateActive
} else if slices.StringInSlice(alertStates[alertLFP], models.AlertStateSuppressed) {
alert.State = models.AlertStateSuppressed
} else {
alert.State = models.AlertStateUnprocessed
}
// sort Alertmanager instances for every alert
sort.Slice(alert.Alertmanager, func(i, j int) bool {
return alert.Alertmanager[i].Name < alert.Alertmanager[j].Name
+1
View File
@@ -153,6 +153,7 @@ func (am *Alertmanager) pullAlerts(version string) error {
models.AlertmanagerInstance{
Name: am.Name,
URI: am.URI,
State: alert.State,
StartsAt: alert.StartsAt,
EndsAt: alert.EndsAt,
Source: alert.GeneratorURL,
+2
View File
@@ -7,6 +7,8 @@ import "time"
type AlertmanagerInstance struct {
Name string `json:"name"`
URI string `json:"uri"`
// per instance alert state
State string `json:"state"`
// timestamp collected from this instance, those on the alert itself
// will be calculated min/max values
StartsAt time.Time `json:"startsAt"`