From 78b2b0a83eb5ed740f21efb0b177d7c5609d7230 Mon Sep 17 00:00:00 2001 From: vipin Date: Wed, 28 Oct 2020 10:10:18 +0000 Subject: [PATCH] enabled persistence storage for active alarms and alarm history enabled persistence storage for alarm id Change-Id: I43a7f0dd851663e1cc7a7aea91acfc0793de68ff Signed-off-by: vipin --- config/config-file.json | 3 ++- manager/cmd/manager.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++-- manager/cmd/types.go | 7 +++++++ 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/config/config-file.json b/config/config-file.json index 73a6c92..06f1e92 100755 --- a/config/config-file.json +++ b/config/config-file.json @@ -26,6 +26,7 @@ "alarmUrl": "ric/v1/noma/alarms" }, "maxActiveAlarms": 5000, - "maxAlarmHistory": 20000 + "maxAlarmHistory": 20000, + "alarmInfoPvFile": "/mnt/disk/amvol/alarminfo.json" } } diff --git a/manager/cmd/manager.go b/manager/cmd/manager.go index 1a950db..2b5af17 100755 --- a/manager/cmd/manager.go +++ b/manager/cmd/manager.go @@ -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"), } } diff --git a/manager/cmd/types.go b/manager/cmd/types.go index 7a0fd90..27376e9 100755 --- a/manager/cmd/types.go +++ b/manager/cmd/types.go @@ -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"` +} -- 2.16.6