enabled persistence storage for active alarms and alarm history 29/4929/2
authorvipin <vipin.mavila@nokia.com>
Wed, 28 Oct 2020 10:10:18 +0000 (10:10 +0000)
committervipin <vipin.mavila@nokia.com>
Thu, 29 Oct 2020 06:42:04 +0000 (06:42 +0000)
enabled persistence storage for alarm id

Change-Id: I43a7f0dd851663e1cc7a7aea91acfc0793de68ff
Signed-off-by: vipin <vipin.mavila@nokia.com>
config/config-file.json
manager/cmd/manager.go
manager/cmd/types.go

index 73a6c92..06f1e92 100755 (executable)
@@ -26,6 +26,7 @@
             "alarmUrl": "ric/v1/noma/alarms"
         },
         "maxActiveAlarms": 5000,
-        "maxAlarmHistory": 20000
+        "maxAlarmHistory": 20000,
+        "alarmInfoPvFile": "/mnt/disk/amvol/alarminfo.json"
     }
 }
index 1a950db..2b5af17 100755 (executable)
@@ -78,6 +78,7 @@ func (a *AlarmManager) HandleAlarms(rp *app.RMRParams) (*alert.PostAlertsOK, err
 
 func (a *AlarmManager) ProcessAlarm(m *AlarmNotification) (*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.Unlock()
@@ -117,6 +118,8 @@ func (a *AlarmManager) ProcessAlarm(m *AlarmNotification) (*alert.PostAlertsOK,
                                a.exceededAlarmHistoryOn = false
                        }
 
+                       a.WriteAlarmInfoToPersistentVolume()
+
                        if a.postClear {
                                a.mutex.Unlock()
 
@@ -137,6 +140,7 @@ func (a *AlarmManager) ProcessAlarm(m *AlarmNotification) (*alert.PostAlertsOK,
        if m.AlarmAction == alarm.AlarmActionRaise {
                a.UpdateAlarmFields(a.GenerateAlarmId(), m)
                a.UpdateAlarmLists(m)
+               a.WriteAlarmInfoToPersistentVolume()
                a.mutex.Unlock()
 
                // Send alarm notification to NOMA, if enabled
@@ -185,8 +189,11 @@ func (a *AlarmManager) GenerateThresholdAlarm(sp int, data string) bool {
                AlarmAction: alarm.AlarmActionRaise,
                AlarmTime:   (time.Now().UnixNano()),
        }
-       a.activeAlarms = append(a.activeAlarms, AlarmNotification{thresholdMessage, alarm.AlarmDefinition{}})
-       a.alarmHistory = append(a.alarmHistory, AlarmNotification{thresholdMessage, alarm.AlarmDefinition{}})
+       alarmDef := alarm.RICAlarmDefinitions[sp]
+       alarmId := a.GenerateAlarmId()
+       alarmDef.AlarmId = alarmId
+       a.activeAlarms = append(a.activeAlarms, AlarmNotification{thresholdMessage, *alarmDef})
+       a.alarmHistory = append(a.alarmHistory, AlarmNotification{thresholdMessage, *alarmDef})
 
        return true
 }
@@ -326,6 +333,43 @@ func (a *AlarmManager) ReadAlarmDefinitionFromJson() {
        }
 }
 
+func (a *AlarmManager) ReadAlarmInfoFromPersistentVolume() {
+       var alarmpersistentinfo AlarmPersistentInfo
+       byteValue, rerr := ioutil.ReadFile(a.alarmInfoPvFile)
+       if rerr != nil {
+               app.Logger.Error("ararminfo.json file read error %v", rerr)
+       } else {
+               err := json.Unmarshal(byteValue, &alarmpersistentinfo)
+               if err != nil {
+                       app.Logger.Error("alarmpersistentinfo json unmarshal error %v", err)
+               } else {
+                       a.uniqueAlarmId = alarmpersistentinfo.UniqueAlarmId
+                       a.activeAlarms = make([]AlarmNotification, len(alarmpersistentinfo.ActiveAlarms))
+                       a.alarmHistory = make([]AlarmNotification, len(alarmpersistentinfo.AlarmHistory))
+                       copy(a.activeAlarms, alarmpersistentinfo.ActiveAlarms)
+                       copy(a.alarmHistory, alarmpersistentinfo.AlarmHistory)
+               }
+       }
+}
+
+func (a *AlarmManager) WriteAlarmInfoToPersistentVolume() {
+       var alarmpersistentinfo AlarmPersistentInfo
+       alarmpersistentinfo.UniqueAlarmId = a.uniqueAlarmId
+       alarmpersistentinfo.ActiveAlarms = make([]AlarmNotification, len(a.activeAlarms))
+       alarmpersistentinfo.AlarmHistory = make([]AlarmNotification, len(a.alarmHistory))
+       copy(alarmpersistentinfo.ActiveAlarms, a.activeAlarms)
+       copy(alarmpersistentinfo.AlarmHistory, a.alarmHistory)
+       wdata, err := json.MarshalIndent(alarmpersistentinfo, "", " ")
+       if err != nil {
+               app.Logger.Error("alarmpersistentinfo json marshal error %v", err)
+       } else {
+               werr := ioutil.WriteFile(a.alarmInfoPvFile, wdata, 0777)
+               if werr != nil {
+                       app.Logger.Error("alarminfo.json file write error %v", werr)
+               }
+       }
+}
+
 func (a *AlarmManager) Run(sdlcheck bool) {
        app.Logger.SetMdc("alarmManager", fmt.Sprintf("%s:%s", Version, Hash))
        app.SetReadyCB(func(d interface{}) { a.rmrReady = true }, true)
@@ -350,6 +394,8 @@ func (a *AlarmManager) Run(sdlcheck bool) {
        go a.StartAlertTimer()
        a.alarmClient, _ = alarm.InitAlarm("SEP", "ALARMMANAGER")
 
+       a.ReadAlarmInfoFromPersistentVolume()
+
        app.RunWithParams(a, sdlcheck)
 }
 
@@ -376,6 +422,7 @@ func NewAlarmManager(amHost string, alertInterval int, clearAlarm bool) *AlarmMa
                maxAlarmHistory:        app.Config.GetInt("controls.maxAlarmHistory"),
                exceededActiveAlarmOn:  false,
                exceededAlarmHistoryOn: false,
+               alarmInfoPvFile:        app.Config.GetString("controls.alarmInfoPvFile"),
        }
 }
 
index 7a0fd90..27376e9 100755 (executable)
@@ -42,6 +42,7 @@ type AlarmManager struct {
        alarmClient            *alarm.RICAlarm
        exceededActiveAlarmOn  bool
        exceededAlarmHistoryOn bool
+       alarmInfoPvFile        string
 }
 
 type AlarmNotification struct {
@@ -66,3 +67,9 @@ type RicAlarmDefinitions struct {
 type RicPerfAlarmObjects struct {
        AlarmObjects []*alarm.Alarm `json:"alarmobjects"`
 }
+
+type AlarmPersistentInfo struct {
+       UniqueAlarmId int                 `json:"uiniquealarmid"`
+       ActiveAlarms  []AlarmNotification `json:"activealarms"`
+       AlarmHistory  []AlarmNotification `json:"alarmhistory"`
+}