More code refactoring 49/4949/1
authorMohamed Abukar <abukar.mohamed@nokia.com>
Fri, 30 Oct 2020 14:19:38 +0000 (16:19 +0200)
committerMohamed Abukar <abukar.mohamed@nokia.com>
Fri, 30 Oct 2020 14:19:56 +0000 (16:19 +0200)
Change-Id: I3d407763112c7e809f501e7aa69278af40a18b15
Signed-off-by: Mohamed Abukar <abukar.mohamed@nokia.com>
cli/alarm-cli.go
manager/cmd/manager.go
manager/cmd/manager_test.go

index 1b630cd..775b806 100755 (executable)
@@ -70,7 +70,21 @@ func main() {
                SetVersion("1.0.0").
                SetDescription("This CLI tool provides management interface to SEP alarm system")
 
                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").
        commando.
                Register("active").
                SetShortDescription("Displays the SEP active alarms").
@@ -80,7 +94,9 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        displayAlarms(getAlarms(flags, "active"), false)
                })
                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").
        // Get alarm history
        commando.
                Register("history").
@@ -91,7 +107,9 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        displayAlarms(getAlarms(flags, "history"), true)
                })
                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").
        // Raise an alarm
        commando.
                Register("raise").
@@ -109,6 +127,9 @@ func main() {
                        postAlarm(flags, readAlarmParams(flags, false), alarm.AlarmActionRaise, nil)
                })
 
                        postAlarm(flags, readAlarmParams(flags, false), alarm.AlarmActionRaise, nil)
                })
 
+}
+
+func registerClearCmd(alarmManagerHost string) {
        // Clear an alarm
        commando.
                Register("clear").
        // Clear an alarm
        commando.
                Register("clear").
@@ -124,6 +145,9 @@ func main() {
                        postAlarm(flags, readAlarmParams(flags, true), alarm.AlarmActionClear, nil)
                })
 
                        postAlarm(flags, readAlarmParams(flags, true), alarm.AlarmActionClear, nil)
                })
 
+}
+
+func registerConfigureCmd(alarmManagerHost string) {
        // Configure an alarm manager
        commando.
                Register("configure").
        // Configure an alarm manager
        commando.
                Register("configure").
@@ -135,6 +159,9 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        postAlarmConfig(flags)
                })
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        postAlarmConfig(flags)
                })
+}
+
+func registerDefineCmd(alarmManagerHost string) {
        // Create alarm definition
        commando.
                Register("define").
        // Create alarm definition
        commando.
                Register("define").
@@ -150,7 +177,10 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        postAlarmDefinition(flags)
                })
                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").
        commando.
                Register("undefine").
                SetShortDescription("Define alarm with given parameters").
@@ -160,7 +190,10 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        deleteAlarmDefinition(flags)
                })
                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").
        commando.
                Register("perf").
                SetShortDescription("Conduct performance test with given parameters").
@@ -174,10 +207,12 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        conductperformancetest(flags)
                })
                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.
        // 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).
                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).
@@ -188,9 +223,6 @@ func main() {
                SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                        displayAlerts(flags)
                })
                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) {
 }
 
 func readAlarmParams(flags map[string]commando.FlagValue, clear bool) (a alarm.Alarm) {
@@ -540,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())
        } 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
                return err
        }
        return nil
@@ -715,4 +747,4 @@ func getCurrentDirectory() string {
                fmt.Println(err)
        }
        return dir
                fmt.Println(err)
        }
        return dir
-}
\ No newline at end of file
+}
index 0036679..789093c 100755 (executable)
@@ -102,53 +102,28 @@ func (a *AlarmManager) ProcessAlarm(m *AlarmNotification) (*alert.PostAlertsOK,
        }
 
        // Clear alarm if found from active alarm list
        }
 
        // Clear alarm if found from active alarm list
-       if m.AlarmAction == alarm.AlarmActionClear {
-               if !found {
-                       app.Logger.Info("No matching active alarm found, suppressing ...")
-                       a.mutex.Unlock()
-                       return nil, nil
-               }
-
-               if a.ProcessClearAlarm(m, alarmDef, idx) == false {
-                       return nil, nil
-               }
-
-               a.mutex.Unlock()
-               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)
-               }
+       if found && m.AlarmAction == alarm.AlarmActionClear {
+               return a.ProcessClearAlarm(m, alarmDef, idx)
        }
 
        // New alarm -> update active alarms and post to Alert Manager
        if m.AlarmAction == alarm.AlarmActionRaise {
        }
 
        // New alarm -> update active alarms and post to Alert Manager
        if m.AlarmAction == alarm.AlarmActionRaise {
-               if a.ProcessRaiseAlarm(m, alarmDef) == false {
-                       return nil, nil
-               }
-               // Send alarm notification to NOMA, if enabled
-               if app.Config.GetBool("controls.noma.enabled") {
-                       return a.PostAlarm(m)
-               }
-               return a.PostAlert(a.GenerateAlertLabels(m.Alarm, AlertStatusActive, m.AlarmTime))
+               return a.ProcessRaiseAlarm(m, alarmDef)
        }
 
        a.mutex.Unlock()
        return nil, nil
 }
 
        }
 
        a.mutex.Unlock()
        return nil, nil
 }
 
-func (a *AlarmManager)ProcessRaiseAlarm(m *AlarmNotification, alarmDef *alarm.AlarmDefinition) bool {
+func (a *AlarmManager) ProcessRaiseAlarm(m *AlarmNotification, alarmDef *alarm.AlarmDefinition) (*alert.PostAlertsOK, error) {
        app.Logger.Debug("Raise alarmDef.RaiseDelay = %v, AlarmNotification = %v", alarmDef.RaiseDelay, *m)
        app.Logger.Debug("Raise alarmDef.RaiseDelay = %v, AlarmNotification = %v", alarmDef.RaiseDelay, *m)
+
        // RaiseDelay > 0 in an alarm object in active alarm table indicates that raise delay is still ongoing for the alarm
        m.AlarmDefinition.RaiseDelay = alarmDef.RaiseDelay
        a.UpdateAlarmFields(a.GenerateAlarmId(), m)
        a.UpdateActiveAlarmList(m)
        a.mutex.Unlock()
        // RaiseDelay > 0 in an alarm object in active alarm table indicates that raise delay is still ongoing for the alarm
        m.AlarmDefinition.RaiseDelay = alarmDef.RaiseDelay
        a.UpdateAlarmFields(a.GenerateAlarmId(), m)
        a.UpdateActiveAlarmList(m)
        a.mutex.Unlock()
+
        if alarmDef.RaiseDelay > 0 {
                timerDelay(alarmDef.RaiseDelay)
                a.mutex.Lock()
        if alarmDef.RaiseDelay > 0 {
                timerDelay(alarmDef.RaiseDelay)
                a.mutex.Lock()
@@ -162,16 +137,22 @@ func (a *AlarmManager)ProcessRaiseAlarm(m *AlarmNotification, alarmDef *alarm.Al
                } else {
                        app.Logger.Debug("Alarm deleted during raise delay. AlarmNotification = %v", *m)
                        a.mutex.Unlock()
                } else {
                        app.Logger.Debug("Alarm deleted during raise delay. AlarmNotification = %v", *m)
                        a.mutex.Unlock()
-                       return false
+                       return nil, nil
                }
        }
                }
        }
+
        m.AlarmDefinition.RaiseDelay = 0
        a.UpdateAlarmHistoryList(m)
        m.AlarmDefinition.RaiseDelay = 0
        a.UpdateAlarmHistoryList(m)
-       a.WriteAlarmInfoToPersistentVolume()    
-       return true
+       a.WriteAlarmInfoToPersistentVolume()
+
+       // Send alarm notification to NOMA, if enabled
+       if app.Config.GetBool("controls.noma.enabled") {
+               return a.PostAlarm(m)
+       }
+       return a.PostAlert(a.GenerateAlertLabels(m.Alarm, AlertStatusActive, m.AlarmTime))
 }
 
 }
 
-func (a *AlarmManager)ProcessClearAlarm(m *AlarmNotification, alarmDef *alarm.AlarmDefinition, idx int) bool {
+func (a *AlarmManager) ProcessClearAlarm(m *AlarmNotification, alarmDef *alarm.AlarmDefinition, idx int) (*alert.PostAlertsOK, error) {
        app.Logger.Debug("Clear alarmDef.ClearDelay = %v, AlarmNotification = %v", alarmDef.ClearDelay, *m)
        if alarmDef.ClearDelay > 0 {
                a.mutex.Unlock()
        app.Logger.Debug("Clear alarmDef.ClearDelay = %v, AlarmNotification = %v", alarmDef.ClearDelay, *m)
        if alarmDef.ClearDelay > 0 {
                a.mutex.Unlock()
@@ -182,9 +163,8 @@ func (a *AlarmManager)ProcessClearAlarm(m *AlarmNotification, alarmDef *alarm.Al
                var found bool
                idx, found = a.IsMatchFound(m.Alarm)
                if !found {
                var found bool
                idx, found = a.IsMatchFound(m.Alarm)
                if !found {
-                       app.Logger.Debug("Alarm not anymore in the active alarms table. AlarmNotification = %v", *m)
                        a.mutex.Unlock()
                        a.mutex.Unlock()
-                       return false
+                       return nil, nil
                }
        }
        a.UpdateAlarmFields(a.activeAlarms[idx].AlarmId, m)
                }
        }
        a.UpdateAlarmFields(a.activeAlarms[idx].AlarmId, m)
@@ -202,8 +182,14 @@ func (a *AlarmManager)ProcessClearAlarm(m *AlarmNotification, alarmDef *alarm.Al
        if a.exceededAlarmHistoryOn && m.Alarm.SpecificProblem == alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD {
                a.exceededAlarmHistoryOn = false
        }
        if a.exceededAlarmHistoryOn && m.Alarm.SpecificProblem == alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD {
                a.exceededAlarmHistoryOn = false
        }
-       a.WriteAlarmInfoToPersistentVolume()    
-       return true
+       a.WriteAlarmInfoToPersistentVolume()
+
+       a.mutex.Unlock()
+       if a.postClear && app.Config.GetBool("controls.noma.enabled") {
+               m.PerceivedSeverity = alarm.SeverityCleared
+               return a.PostAlarm(m)
+       }
+       return nil, nil
 }
 
 func timerDelay(delay int) {
 }
 
 func timerDelay(delay int) {
index b75cae5..c50084b 100755 (executable)
@@ -392,17 +392,17 @@ func TestDelayedAlarmRaiseAndClear(t *testing.T) {
        ts := CreatePromAlertSimulator(t, "POST", "/api/v2/alerts", http.StatusOK, models.LabelSet{})
        defer ts.Close()
 
        ts := CreatePromAlertSimulator(t, "POST", "/api/v2/alerts", http.StatusOK, models.LabelSet{})
        defer ts.Close()
 
-       // Raise alarm. Posting alert and updating alarm history should be delayed 
+       // Raise alarm. Posting alert and updating alarm history should be delayed
        a := alarmer.NewAlarm(9999, alarm.SeverityCritical, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(a), "raise failed")
        a := alarmer.NewAlarm(9999, alarm.SeverityCritical, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(a), "raise failed")
-       VerifyAlarm(t, a, activeAlarmsBeforeTest + 1)
+       VerifyAlarm(t, a, activeAlarmsBeforeTest+1)
 
        // Clear the alarm and check the alarm is removed. Posting alert clear and updating alarm history should be delayed
        assert.Nil(t, alarmer.Clear(a), "clear failed")
 
        time.Sleep(time.Duration(2) * time.Second)
        assert.Equal(t, len(alarmManager.activeAlarms), activeAlarmsBeforeTest)
 
        // Clear the alarm and check the alarm is removed. Posting alert clear and updating alarm history should be delayed
        assert.Nil(t, alarmer.Clear(a), "clear failed")
 
        time.Sleep(time.Duration(2) * time.Second)
        assert.Equal(t, len(alarmManager.activeAlarms), activeAlarmsBeforeTest)
-       assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest + 2)
+       assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest+2)
 }
 
 func TestDelayedAlarmRaiseAndClear2(t *testing.T) {
 }
 
 func TestDelayedAlarmRaiseAndClear2(t *testing.T) {
@@ -417,11 +417,11 @@ func TestDelayedAlarmRaiseAndClear2(t *testing.T) {
        // Raise two alarms. The first should be delayed
        a := alarmer.NewAlarm(9999, alarm.SeverityCritical, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(a), "raise failed")
        // Raise two alarms. The first should be delayed
        a := alarmer.NewAlarm(9999, alarm.SeverityCritical, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(a), "raise failed")
-       VerifyAlarm(t, a, activeAlarmsBeforeTest + 1)
+       VerifyAlarm(t, a, activeAlarmsBeforeTest+1)
 
        b := alarmer.NewAlarm(alarm.RIC_RT_DISTRIBUTION_FAILED, alarm.SeverityMajor, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(b), "raise failed")
 
        b := alarmer.NewAlarm(alarm.RIC_RT_DISTRIBUTION_FAILED, alarm.SeverityMajor, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(b), "raise failed")
-       VerifyAlarm(t, b, activeAlarmsBeforeTest + 2)
+       VerifyAlarm(t, b, activeAlarmsBeforeTest+2)
 
        // Clear two alarms. The first should be delayed. Check the alarms are removed
        assert.Nil(t, alarmer.Clear(a), "clear failed")
 
        // Clear two alarms. The first should be delayed. Check the alarms are removed
        assert.Nil(t, alarmer.Clear(a), "clear failed")
@@ -429,7 +429,7 @@ func TestDelayedAlarmRaiseAndClear2(t *testing.T) {
 
        time.Sleep(time.Duration(2) * time.Second)
        assert.Equal(t, len(alarmManager.activeAlarms), activeAlarmsBeforeTest)
 
        time.Sleep(time.Duration(2) * time.Second)
        assert.Equal(t, len(alarmManager.activeAlarms), activeAlarmsBeforeTest)
-       assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest + 4)
+       assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest+4)
 }
 
 func TestDelayedAlarmRaiseAndClear3(t *testing.T) {
 }
 
 func TestDelayedAlarmRaiseAndClear3(t *testing.T) {
@@ -475,11 +475,11 @@ func TestDelayedAlarmRaiseAndClear3(t *testing.T) {
        // Raise two alarms. The first should be delayed
        a := alarmer.NewAlarm(9999, alarm.SeverityCritical, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(a), "raise failed")
        // Raise two alarms. The first should be delayed
        a := alarmer.NewAlarm(9999, alarm.SeverityCritical, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(a), "raise failed")
-       VerifyAlarm(t, a, activeAlarmsBeforeTest + 1)
+       VerifyAlarm(t, a, activeAlarmsBeforeTest+1)
 
        b := alarmer.NewAlarm(alarm.RIC_RT_DISTRIBUTION_FAILED, alarm.SeverityMajor, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(b), "raise failed")
 
        b := alarmer.NewAlarm(alarm.RIC_RT_DISTRIBUTION_FAILED, alarm.SeverityMajor, "Some App data", "eth 0 1")
        assert.Nil(t, alarmer.Raise(b), "raise failed")
-       VerifyAlarm(t, b, activeAlarmsBeforeTest + 2)
+       VerifyAlarm(t, b, activeAlarmsBeforeTest+2)
 
        // Clear two alarms. The first should be delayed. Check the alarms are removed
        assert.Nil(t, alarmer.Clear(a), "clear failed")
 
        // Clear two alarms. The first should be delayed. Check the alarms are removed
        assert.Nil(t, alarmer.Clear(a), "clear failed")
@@ -487,7 +487,7 @@ func TestDelayedAlarmRaiseAndClear3(t *testing.T) {
 
        time.Sleep(time.Duration(2) * time.Second)
        assert.Equal(t, len(alarmManager.activeAlarms), activeAlarmsBeforeTest)
 
        time.Sleep(time.Duration(2) * time.Second)
        assert.Equal(t, len(alarmManager.activeAlarms), activeAlarmsBeforeTest)
-       assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest + 4)
+       assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest+4)
 }
 
 func VerifyAlarm(t *testing.T, a alarm.Alarm, expectedCount int) string {
 }
 
 func VerifyAlarm(t *testing.T, a alarm.Alarm, expectedCount int) string {