7 "github.com/jedib0t/go-pretty/table"
8 "github.com/thatisuday/commando"
14 "gerrit.o-ran-sc.org/r/ric-plt/alarm-go/alarm"
21 SetExecutableName("alarm-cli").
23 SetDescription("This CLI tool provides management interface to SEP alarm system")
28 SetShortDescription("Displays the SEP active alarms").
29 SetDescription("This command displays more information about the SEP active alarms").
30 AddFlag("host", "Alarm manager host address", commando.String, "localhost").
31 AddFlag("port", "Alarm manager host address", commando.String, "8080").
32 SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
33 displayAlarms(getAlarms(flags, "active"), false)
39 SetShortDescription("Displays the SEP alarm history").
40 SetDescription("This command displays more information about the SEP alarm history").
41 AddFlag("host", "Alarm manager host address", commando.String, "localhost").
42 AddFlag("port", "Alarm manager host address", commando.String, "8080").
43 SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
44 displayAlarms(getAlarms(flags, "history"), true)
50 SetShortDescription("Raises alarm with given parameters").
51 AddFlag("moid", "Managed object Id", commando.String, nil).
52 AddFlag("apid", "Application Id", commando.String, nil).
53 AddFlag("sp", "Specific problem Id", commando.Int, nil).
54 AddFlag("severity", "Perceived severity", commando.String, nil).
55 AddFlag("iinfo", "Application identifying info", commando.String, nil).
56 AddFlag("aai", "Application additional info", commando.String, "-").
57 AddFlag("host", "Alarm manager host address", commando.String, "localhost").
58 AddFlag("port", "Alarm manager host address", commando.String, "8080").
59 SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
60 postAlarm(flags, readAlarmParams(flags, false), alarm.AlarmActionRaise)
66 SetShortDescription("Raises alarm with given parameters").
67 AddFlag("moid", "Managed object Id", commando.String, nil).
68 AddFlag("apid", "Application Id", commando.String, nil).
69 AddFlag("sp", "Specific problem Id", commando.Int, nil).
70 AddFlag("iinfo", "Application identifying info", commando.String, nil).
71 AddFlag("host", "Alarm manager host address", commando.String, "localhost").
72 AddFlag("port", "Alarm manager host address", commando.String, "8080").
73 SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
74 postAlarm(flags, readAlarmParams(flags, true), alarm.AlarmActionClear)
77 // parse command-line arguments
81 func readAlarmParams(flags map[string]commando.FlagValue, clear bool) (a alarm.Alarm) {
82 a.ManagedObjectId, _ = flags["moid"].GetString()
83 a.ApplicationId, _ = flags["apid"].GetString()
84 a.SpecificProblem, _ = flags["sp"].GetInt()
85 a.IdentifyingInfo, _ = flags["iinfo"].GetString()
88 s, _ := flags["severity"].GetString()
89 a.PerceivedSeverity = alarm.Severity(s)
93 a.AdditionalInfo, _ = flags["aai"].GetString()
99 func getAlarms(flags map[string]commando.FlagValue, action alarm.AlarmAction) (alarms []alarm.AlarmMessage) {
100 host, _ := flags["host"].GetString()
101 port, _ := flags["port"].GetString()
102 targetUrl := fmt.Sprintf("http://%s:%s/ric/v1/alarms/%s", host, port, action)
103 resp, err := http.Get(targetUrl)
104 if err != nil || resp == nil || resp.Body == nil {
105 fmt.Println("Couldn't fetch active alarm list due to error: %v", err)
109 defer resp.Body.Close()
111 body, err := ioutil.ReadAll(resp.Body)
113 fmt.Println("ioutil.ReadAll failed: %v", err)
117 json.Unmarshal([]byte(body), &alarms)
122 func postAlarm(flags map[string]commando.FlagValue, a alarm.Alarm, action alarm.AlarmAction) {
123 host, _ := flags["host"].GetString()
124 port, _ := flags["port"].GetString()
125 targetUrl := fmt.Sprintf("http://%s:%s/ric/v1/alarms", host, port)
127 m := alarm.AlarmMessage{Alarm: a, AlarmAction: action}
128 jsonData, err := json.Marshal(m)
130 fmt.Println("json.Marshal failed: %v", err)
134 resp, err := http.Post(targetUrl, "application/json", bytes.NewBuffer(jsonData))
135 if err != nil || resp == nil {
136 fmt.Println("Couldn't fetch active alarm list due to error: %v", err)
141 func displayAlarms(alarms []alarm.AlarmMessage, isHistory bool) {
142 t := table.NewWriter()
143 t.SetOutputMirror(os.Stdout)
145 t.AppendHeader(table.Row{"SP", "MOID", "APPID", "IINFO", "SEVERITY", "AAI", "TIME", "ACTION"})
147 t.AppendHeader(table.Row{"SP", "MOID", "APPID", "IINFO", "SEVERITY", "AAI", "TIME"})
150 for _, a := range alarms {
151 alarmTime := time.Unix(0, a.AlarmTime).Format("02/01/2006, 15:04:05")
153 t.AppendRows([]table.Row{
154 {a.SpecificProblem, a.ManagedObjectId, a.ApplicationId, a.IdentifyingInfo, a.PerceivedSeverity, a.AdditionalInfo, alarmTime, a.AlarmAction},
157 t.AppendRows([]table.Row{
158 {a.SpecificProblem, a.ManagedObjectId, a.ApplicationId, a.IdentifyingInfo, a.PerceivedSeverity, a.AdditionalInfo, alarmTime},
163 t.SetStyle(table.StyleColoredBright)