Additional alarm information
[ric-plt/alarm-go.git] / manager / cmd / manager.go
index f00a812..b7f9ce2 100755 (executable)
@@ -71,10 +71,10 @@ func (a *AlarmManager) HandleAlarms(rp *app.RMRParams) (*alert.PostAlertsOK, err
        }
        app.Logger.Info("newAlarm: %v", m)
 
        }
        app.Logger.Info("newAlarm: %v", m)
 
-       return a.ProcessAlarm(&m)
+       return a.ProcessAlarm(&AlarmInformation{m, alarm.AlarmDefinition{}})
 }
 
 }
 
-func (a *AlarmManager) ProcessAlarm(m *alarm.AlarmMessage) (*alert.PostAlertsOK, error) {
+func (a *AlarmManager) ProcessAlarm(m *AlarmInformation) (*alert.PostAlertsOK, error) {
        a.mutex.Lock()
        if _, ok := alarm.RICAlarmDefinitions[m.Alarm.SpecificProblem]; !ok {
                app.Logger.Warn("Alarm (SP='%d') not recognized, suppressing ...", m.Alarm.SpecificProblem)
        a.mutex.Lock()
        if _, ok := alarm.RICAlarmDefinitions[m.Alarm.SpecificProblem]; !ok {
                app.Logger.Warn("Alarm (SP='%d') not recognized, suppressing ...", m.Alarm.SpecificProblem)
@@ -101,17 +101,18 @@ func (a *AlarmManager) ProcessAlarm(m *alarm.AlarmMessage) (*alert.PostAlertsOK,
                if found {
                        a.alarmHistory = append(a.alarmHistory, *m)
                        a.activeAlarms = a.RemoveAlarm(a.activeAlarms, idx, "active")
                if found {
                        a.alarmHistory = append(a.alarmHistory, *m)
                        a.activeAlarms = a.RemoveAlarm(a.activeAlarms, idx, "active")
-                       if ((len(a.alarmHistory) >= a.maxAlarmHistory) && (a.exceededAlarmHistoryOn == false)){
+                       if (len(a.alarmHistory) >= a.maxAlarmHistory) && (a.exceededAlarmHistoryOn == false) {
                                app.Logger.Error("alarm history count exceeded maxAlarmHistory threshold")
                                histAlarm := a.alarmClient.NewAlarm(alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "threshold", "history")
                                app.Logger.Error("alarm history count exceeded maxAlarmHistory threshold")
                                histAlarm := a.alarmClient.NewAlarm(alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "threshold", "history")
-                               histAlarmMessage := alarm.AlarmMessage{Alarm: histAlarm, AlarmAction: alarm.AlarmActionRaise, AlarmTime: (time.Now().UnixNano())}
+                               am := alarm.AlarmMessage{Alarm: histAlarm, AlarmAction: alarm.AlarmActionRaise, AlarmTime: (time.Now().UnixNano())}
+                               histAlarmMessage := AlarmInformation{am, alarm.AlarmDefinition{}}
                                a.activeAlarms = append(a.activeAlarms, histAlarmMessage)
                                a.alarmHistory = append(a.alarmHistory, histAlarmMessage)
                        }
                                a.activeAlarms = append(a.activeAlarms, histAlarmMessage)
                                a.alarmHistory = append(a.alarmHistory, histAlarmMessage)
                        }
-                       if ((a.exceededActiveAlarmOn == true) && (m.Alarm.SpecificProblem == alarm.ACTIVE_ALARM_EXCEED_MAX_THRESHOLD)) {
+                       if (a.exceededActiveAlarmOn == true) && (m.Alarm.SpecificProblem == alarm.ACTIVE_ALARM_EXCEED_MAX_THRESHOLD) {
                                a.exceededActiveAlarmOn = false
                        }
                                a.exceededActiveAlarmOn = false
                        }
-                       if ((a.exceededAlarmHistoryOn == true) && (m.Alarm.SpecificProblem == alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD)) {
+                       if (a.exceededAlarmHistoryOn == true) && (m.Alarm.SpecificProblem == alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD) {
                                a.exceededAlarmHistoryOn = false
                        }
                        if a.postClear {
                                a.exceededAlarmHistoryOn = false
                        }
                        if a.postClear {
@@ -145,33 +146,43 @@ func (a *AlarmManager) IsMatchFound(newAlarm alarm.Alarm) (int, bool) {
        return -1, false
 }
 
        return -1, false
 }
 
-func (a *AlarmManager) RemoveAlarm(alarms []alarm.AlarmMessage, i int, listName string) []alarm.AlarmMessage {
+func (a *AlarmManager) RemoveAlarm(alarms []AlarmInformation, i int, listName string) []AlarmInformation {
        app.Logger.Info("Alarm '%+v' deleted from the '%s' list", alarms[i], listName)
        copy(alarms[i:], alarms[i+1:])
        return alarms[:len(alarms)-1]
 }
 
        app.Logger.Info("Alarm '%+v' deleted from the '%s' list", alarms[i], listName)
        copy(alarms[i:], alarms[i+1:])
        return alarms[:len(alarms)-1]
 }
 
-func (a *AlarmManager) UpdateAlarmLists(newAlarm *alarm.AlarmMessage) {
+func (a *AlarmManager) UpdateAlarmFields(newAlarm *AlarmInformation) {
+       alarmDef := alarm.RICAlarmDefinitions[newAlarm.SpecificProblem]
+       newAlarm.AlarmId = a.uniqueAlarmId
+       a.uniqueAlarmId++ // @todo: generate a unique ID
+       newAlarm.AlarmText = alarmDef.AlarmText
+       newAlarm.EventType = alarmDef.EventType
+}
+
+func (a *AlarmManager) UpdateAlarmLists(newAlarm *AlarmInformation) {
        /* If maximum number of active alarms is reached, an error log writing is made, and new alarm indicating the problem is raised.
           The attempt to raise the alarm next time will be supressed when found as duplicate. */
        /* If maximum number of active alarms is reached, an error log writing is made, and new alarm indicating the problem is raised.
           The attempt to raise the alarm next time will be supressed when found as duplicate. */
-       if ((len(a.activeAlarms) >= a.maxActiveAlarms) && (a.exceededActiveAlarmOn == false)) {
+       if (len(a.activeAlarms) >= a.maxActiveAlarms) && (a.exceededActiveAlarmOn == false) {
                app.Logger.Error("active alarm count exceeded maxActiveAlarms threshold")
                actAlarm := a.alarmClient.NewAlarm(alarm.ACTIVE_ALARM_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "threshold", "active")
                actAlarmMessage := alarm.AlarmMessage{Alarm: actAlarm, AlarmAction: alarm.AlarmActionRaise, AlarmTime: (time.Now().UnixNano())}
                app.Logger.Error("active alarm count exceeded maxActiveAlarms threshold")
                actAlarm := a.alarmClient.NewAlarm(alarm.ACTIVE_ALARM_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "threshold", "active")
                actAlarmMessage := alarm.AlarmMessage{Alarm: actAlarm, AlarmAction: alarm.AlarmActionRaise, AlarmTime: (time.Now().UnixNano())}
-               a.activeAlarms = append(a.activeAlarms, actAlarmMessage)
-               a.alarmHistory = append(a.alarmHistory, actAlarmMessage)
+               a.activeAlarms = append(a.activeAlarms, AlarmInformation{actAlarmMessage, alarm.AlarmDefinition{}})
+               a.alarmHistory = append(a.alarmHistory, AlarmInformation{actAlarmMessage, alarm.AlarmDefinition{}})
                a.exceededActiveAlarmOn = true
        }
 
                a.exceededActiveAlarmOn = true
        }
 
-       if ((len(a.alarmHistory) >= a.maxAlarmHistory) && (a.exceededAlarmHistoryOn == false)) {
+       if (len(a.alarmHistory) >= a.maxAlarmHistory) && (a.exceededAlarmHistoryOn == false) {
                app.Logger.Error("alarm history count exceeded maxAlarmHistory threshold")
                histAlarm := a.alarmClient.NewAlarm(alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "threshold", "history")
                histAlarmMessage := alarm.AlarmMessage{Alarm: histAlarm, AlarmAction: alarm.AlarmActionRaise, AlarmTime: (time.Now().UnixNano())}
                app.Logger.Error("alarm history count exceeded maxAlarmHistory threshold")
                histAlarm := a.alarmClient.NewAlarm(alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "threshold", "history")
                histAlarmMessage := alarm.AlarmMessage{Alarm: histAlarm, AlarmAction: alarm.AlarmActionRaise, AlarmTime: (time.Now().UnixNano())}
-               a.activeAlarms = append(a.activeAlarms, histAlarmMessage)
-               a.alarmHistory = append(a.alarmHistory, histAlarmMessage)
+               a.activeAlarms = append(a.activeAlarms, AlarmInformation{histAlarmMessage, alarm.AlarmDefinition{}})
+               a.alarmHistory = append(a.alarmHistory, AlarmInformation{histAlarmMessage, alarm.AlarmDefinition{}})
                a.exceededAlarmHistoryOn = true
        }
 
                a.exceededAlarmHistoryOn = true
        }
 
+       a.UpdateAlarmFields(newAlarm)
+
        // @todo: For now just keep the alarms (both active and history) in-memory. Use SDL later for persistence
        a.activeAlarms = append(a.activeAlarms, *newAlarm)
        a.alarmHistory = append(a.alarmHistory, *newAlarm)
        // @todo: For now just keep the alarms (both active and history) in-memory. Use SDL later for persistence
        a.activeAlarms = append(a.activeAlarms, *newAlarm)
        a.alarmHistory = append(a.alarmHistory, *newAlarm)
@@ -312,15 +323,16 @@ func NewAlarmManager(amHost string, alertInterval int) *AlarmManager {
        }
 
        return &AlarmManager{
        }
 
        return &AlarmManager{
-               rmrReady:        false,
-               amHost:          amHost,
-               amBaseUrl:       viper.GetString("controls.promAlertManager.baseUrl"),
-               amSchemes:       []string{viper.GetString("controls.promAlertManager.schemes")},
-               alertInterval:   alertInterval,
-               activeAlarms:    make([]alarm.AlarmMessage, 0),
-               alarmHistory:    make([]alarm.AlarmMessage, 0),
-               maxActiveAlarms: app.Config.GetInt("controls.maxActiveAlarms"),
-               maxAlarmHistory: app.Config.GetInt("controls.maxAlarmHistory"),
+               rmrReady:               false,
+               amHost:                 amHost,
+               amBaseUrl:              viper.GetString("controls.promAlertManager.baseUrl"),
+               amSchemes:              []string{viper.GetString("controls.promAlertManager.schemes")},
+               alertInterval:          alertInterval,
+               activeAlarms:           make([]AlarmInformation, 0),
+               alarmHistory:           make([]AlarmInformation, 0),
+               uniqueAlarmId:          1,
+               maxActiveAlarms:        app.Config.GetInt("controls.maxActiveAlarms"),
+               maxAlarmHistory:        app.Config.GetInt("controls.maxAlarmHistory"),
                exceededActiveAlarmOn:  false,
                exceededAlarmHistoryOn: false,
        }
                exceededActiveAlarmOn:  false,
                exceededAlarmHistoryOn: false,
        }