More code refactoring
Change-Id: I3d407763112c7e809f501e7aa69278af40a18b15
Signed-off-by: Mohamed Abukar <abukar.mohamed@nokia.com>
diff --git a/cli/alarm-cli.go b/cli/alarm-cli.go
index 1b630cd..775b806 100755
--- a/cli/alarm-cli.go
+++ b/cli/alarm-cli.go
@@ -70,7 +70,21 @@
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").
@@ -80,7 +94,9 @@
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").
@@ -91,7 +107,9 @@
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").
@@ -109,6 +127,9 @@
postAlarm(flags, readAlarmParams(flags, false), alarm.AlarmActionRaise, nil)
})
+}
+
+func registerClearCmd(alarmManagerHost string) {
// Clear an alarm
commando.
Register("clear").
@@ -124,6 +145,9 @@
postAlarm(flags, readAlarmParams(flags, true), alarm.AlarmActionClear, nil)
})
+}
+
+func registerConfigureCmd(alarmManagerHost string) {
// Configure an alarm manager
commando.
Register("configure").
@@ -135,6 +159,9 @@
SetAction(func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
postAlarmConfig(flags)
})
+}
+
+func registerDefineCmd(alarmManagerHost string) {
// Create alarm definition
commando.
Register("define").
@@ -150,7 +177,10 @@
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").
@@ -160,7 +190,10 @@
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").
@@ -174,10 +207,12 @@
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).
@@ -188,9 +223,6 @@
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) {
@@ -540,7 +572,7 @@
} 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
@@ -715,4 +747,4 @@
fmt.Println(err)
}
return dir
-}
\ No newline at end of file
+}
diff --git a/manager/cmd/manager.go b/manager/cmd/manager.go
index 0036679..789093c 100755
--- a/manager/cmd/manager.go
+++ b/manager/cmd/manager.go
@@ -102,53 +102,28 @@
}
// 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 {
- 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
}
-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)
+
// 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()
@@ -162,16 +137,22 @@
} 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)
- 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()
@@ -182,9 +163,8 @@
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()
- return false
+ return nil, nil
}
}
a.UpdateAlarmFields(a.activeAlarms[idx].AlarmId, m)
@@ -202,8 +182,14 @@
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) {
diff --git a/manager/cmd/manager_test.go b/manager/cmd/manager_test.go
index b75cae5..c50084b 100755
--- a/manager/cmd/manager_test.go
+++ b/manager/cmd/manager_test.go
@@ -392,17 +392,17 @@
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")
- 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)
- assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest + 2)
+ assert.Equal(t, len(alarmManager.alarmHistory), alarmHistoryBeforeTest+2)
}
func TestDelayedAlarmRaiseAndClear2(t *testing.T) {
@@ -417,11 +417,11 @@
// 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")
- 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")
@@ -429,7 +429,7 @@
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) {
@@ -475,11 +475,11 @@
// 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")
- 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")
@@ -487,7 +487,7 @@
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 {