"github.com/jedib0t/go-pretty/table"
"github.com/prometheus/alertmanager/api/v2/client"
"github.com/prometheus/alertmanager/api/v2/client/alert"
+ "github.com/prometheus/alertmanager/api/v2/models"
"github.com/spf13/viper"
"github.com/thatisuday/commando"
)
}
}
+func displaySingleAlert(t table.Writer, gettableAlert *models.GettableAlert) {
+ t.AppendRow([]interface{}{"------------------------------------"})
+ for key, item := range gettableAlert.Annotations {
+ t.AppendRow([]interface{}{key, item})
+ }
+ if gettableAlert.EndsAt != nil {
+ t.AppendRow([]interface{}{"EndsAt", *gettableAlert.EndsAt})
+ }
+ if gettableAlert.Fingerprint != nil {
+ t.AppendRow([]interface{}{"Fingerprint", *gettableAlert.Fingerprint})
+ }
+ for key, item := range gettableAlert.Receivers {
+ if gettableAlert.Receivers != nil {
+ t.AppendRow([]interface{}{key, *item.Name})
+ }
+ }
+ if gettableAlert.StartsAt != nil {
+ t.AppendRow([]interface{}{"StartsAt", *gettableAlert.StartsAt})
+ }
+ if gettableAlert.Status != nil {
+ t.AppendRow([]interface{}{"InhibitedBy", gettableAlert.Status.InhibitedBy})
+ t.AppendRow([]interface{}{"SilencedBy", gettableAlert.Status.SilencedBy})
+ t.AppendRow([]interface{}{"State", *gettableAlert.Status.State})
+ }
+ if gettableAlert.UpdatedAt != nil {
+ t.AppendRow([]interface{}{"UpdatedAt", *gettableAlert.UpdatedAt})
+ }
+ t.AppendRow([]interface{}{"GeneratorURL", gettableAlert.Alert.GeneratorURL})
+ for key, item := range gettableAlert.Alert.Labels {
+ t.AppendRow([]interface{}{key, item})
+ }
+}
+
func displayAlerts(flags map[string]commando.FlagValue) {
resp, err := getAlerts(flags)
if err != nil {
t.SetOutputMirror(os.Stdout)
t.AppendHeader(table.Row{"Alerts from Prometheus Alert Manager"})
for _, gettableAlert := range resp.Payload {
- t.AppendRow([]interface{}{"------------------------------------"})
- if gettableAlert != nil {
- for key, item := range gettableAlert.Annotations {
- t.AppendRow([]interface{}{key, item})
- }
- if gettableAlert.EndsAt != nil {
- t.AppendRow([]interface{}{"EndsAt", *gettableAlert.EndsAt})
- }
- if gettableAlert.Fingerprint != nil {
- t.AppendRow([]interface{}{"Fingerprint", *gettableAlert.Fingerprint})
- }
- for key, item := range gettableAlert.Receivers {
- if gettableAlert.Receivers != nil {
- t.AppendRow([]interface{}{key, *item.Name})
- }
- }
- if gettableAlert.StartsAt != nil {
- t.AppendRow([]interface{}{"StartsAt", *gettableAlert.StartsAt})
- }
- if gettableAlert.Status != nil {
- t.AppendRow([]interface{}{"InhibitedBy", gettableAlert.Status.InhibitedBy})
- t.AppendRow([]interface{}{"SilencedBy", gettableAlert.Status.SilencedBy})
- t.AppendRow([]interface{}{"State", *gettableAlert.Status.State})
- }
- if gettableAlert.UpdatedAt != nil {
- t.AppendRow([]interface{}{"UpdatedAt", *gettableAlert.UpdatedAt})
- }
- t.AppendRow([]interface{}{"GeneratorURL", gettableAlert.Alert.GeneratorURL})
- for key, item := range gettableAlert.Alert.Labels {
- t.AppendRow([]interface{}{key, item})
- }
+ if gettableAlert == nil {
+ continue
}
+
+ displaySingleAlert(t, gettableAlert)
}
t.SetStyle(table.StyleColoredBright)
t.Render()
// Clear alarm if found from active alarm list
if m.AlarmAction == alarm.AlarmActionClear {
- if found {
- if a.ProcessClearAlarm(m, alarmDef, idx) == false {
- return nil, nil
- }
- if a.postClear {
- a.mutex.Unlock()
+ if !found {
+ app.Logger.Info("No matching active alarm found, suppressing ...")
+ a.mutex.Unlock()
+ return nil, nil
+ }
- // Send alarm notification to NOMA, if enabled
- if app.Config.GetBool("controls.noma.enabled") {
- m.PerceivedSeverity = alarm.SeverityCleared
- return a.PostAlarm(m)
- }
- return a.PostAlert(a.GenerateAlertLabels(m.Alarm, AlertStatusResolved, m.AlarmTime))
- }
+ if a.ProcessClearAlarm(m, alarmDef, idx) == false {
+ return nil, nil
}
- app.Logger.Info("No matching active alarm found, suppressing ...")
+
a.mutex.Unlock()
- return nil, nil
+ if !a.postClear {
+ app.Logger.Info("Sending clear notification disabled!")
+ return nil, nil
+ }
+
+ // Send alarm notification to NOMA, if enabled
+ if app.Config.GetBool("controls.noma.enabled") {
+ m.PerceivedSeverity = alarm.SeverityCleared
+ return a.PostAlarm(m)
+ }
}
// New alarm -> update active alarms and post to Alert Manager