namespace adaptation
[ric-plt/alarm-go.git] / cli / alarm-cli.go
index b213ec6..775b806 100755 (executable)
@@ -17,6 +17,7 @@ import (
        "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"
 )
@@ -69,7 +70,21 @@ func main() {
                SetVersion("1.0.0").
                SetDescription("This CLI tool provides management interface to SEP alarm system")
 
-       // Get active alarms
+       registerActiveCmd(alarmManagerHost)
+       registerHistoryCmd(alarmManagerHost)
+       registerRaiseCmd(alarmManagerHost)
+       registerClearCmd(alarmManagerHost)
+       registerDefineCmd(alarmManagerHost)
+       registerUndefineCmd(alarmManagerHost)
+       registerConfigureCmd(alarmManagerHost)
+       registerPerfCmd(alarmManagerHost)
+       registerAlertCmd(alertManagerHost)
+
+       // parse command-line arguments
+       commando.Parse(nil)
+}
+
+func registerActiveCmd(alarmManagerHost string) {
        commando.
                Register("active").
                SetShortDescription("Displays the SEP active alarms").
@@ -79,7 +94,9 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        displayAlarms(getAlarms(flags, "active"), false)
                })
+}
 
+func registerHistoryCmd(alarmManagerHost string) {
        // Get alarm history
        commando.
                Register("history").
@@ -90,7 +107,9 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        displayAlarms(getAlarms(flags, "history"), true)
                })
+}
 
+func registerRaiseCmd(alarmManagerHost string) {
        // Raise an alarm
        commando.
                Register("raise").
@@ -108,6 +127,9 @@ func main() {
                        postAlarm(flags, readAlarmParams(flags, false), alarm.AlarmActionRaise, nil)
                })
 
+}
+
+func registerClearCmd(alarmManagerHost string) {
        // Clear an alarm
        commando.
                Register("clear").
@@ -123,6 +145,9 @@ func main() {
                        postAlarm(flags, readAlarmParams(flags, true), alarm.AlarmActionClear, nil)
                })
 
+}
+
+func registerConfigureCmd(alarmManagerHost string) {
        // Configure an alarm manager
        commando.
                Register("configure").
@@ -134,6 +159,9 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        postAlarmConfig(flags)
                })
+}
+
+func registerDefineCmd(alarmManagerHost string) {
        // Create alarm definition
        commando.
                Register("define").
@@ -149,7 +177,10 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        postAlarmDefinition(flags)
                })
-               // Delete alarm definition
+}
+
+func registerUndefineCmd(alarmManagerHost string) {
+       // Delete alarm definition
        commando.
                Register("undefine").
                SetShortDescription("Define alarm with given parameters").
@@ -159,7 +190,10 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        deleteAlarmDefinition(flags)
                })
-               // Conduct performance test for alarm-go
+}
+
+func registerPerfCmd(alarmManagerHost string) {
+       // Conduct performance test for alarm-go
        commando.
                Register("perf").
                SetShortDescription("Conduct performance test with given parameters").
@@ -173,10 +207,12 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        conductperformancetest(flags)
                })
+}
 
+func registerAlertCmd(alertManagerHost string) {
        // Get alerts from Prometheus Alert Manager
        commando.
-               Register("gapam").
+               Register("alerts").
                SetShortDescription("Get alerts from Prometheus Alert Manager").
                AddFlag("active", "Active alerts in Prometheus Alert Manager", commando.Bool, true).
                AddFlag("inhibited", "Inhibited alerts in Prometheus Alert Manager", commando.Bool, true).
@@ -187,9 +223,6 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        displayAlerts(flags)
                })
-
-       // parse command-line arguments
-       commando.Parse(nil)
 }
 
 func readAlarmParams(flags map[string]commando.FlagValue, clear bool) (a alarm.Alarm) {
@@ -539,7 +572,7 @@ func readPerfAlarmDefinitionFromJson() error {
        } else {
                fmt.Printf("ReadPerfAlarmDefinitionFromJson: ioutil.ReadFile failed with error: %v, filename: %s\n", err, filename)
                fmt.Printf("ReadPerfAlarmDefinitionFromJson: current directory: %s\n", getCurrentDirectory())
-       
+
                return err
        }
        return nil
@@ -616,6 +649,39 @@ func raiseClearAlarmOverPeriod(alarmobject *alarm.Alarm, flags map[string]comman
        }
 }
 
+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 {
@@ -632,38 +698,11 @@ func displayAlerts(flags map[string]commando.FlagValue) {
        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()
@@ -708,4 +747,4 @@ func getCurrentDirectory() string {
                fmt.Println(err)
        }
        return dir
-}
\ No newline at end of file
+}