X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=manager%2Fcmd%2Fmanager.go;h=0cb528f04393c9d99ea5903db51247310ea8b9d5;hb=refs%2Fchanges%2F81%2F4781%2F3;hp=564a2d4ad20d345847f2e4d2e2aebbeadb020f63;hpb=4cedd5020e5c7ba0383156f9929ab3db986c0593;p=ric-plt%2Falarm-go.git diff --git a/manager/cmd/manager.go b/manager/cmd/manager.go index 564a2d4..0cb528f 100755 --- a/manager/cmd/manager.go +++ b/manager/cmd/manager.go @@ -23,17 +23,17 @@ package main import ( "encoding/json" "fmt" - "time" - + "gerrit.o-ran-sc.org/r/ric-plt/alarm-go/alarm" + app "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" clientruntime "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/client" "github.com/prometheus/alertmanager/api/v2/client/alert" "github.com/prometheus/alertmanager/api/v2/models" "github.com/spf13/viper" - - "gerrit.o-ran-sc.org/r/ric-plt/alarm-go/alarm" - app "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" + "io/ioutil" + "os" + "time" ) func (a *AlarmManager) StartAlertTimer() { @@ -98,7 +98,13 @@ 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 len(a.alarmHistory) >= a.maxAlarmHistory { + 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) + } if a.postClear { return a.PostAlert(a.GenerateAlertLabels(m.Alarm, AlertStatusResolved, m.AlarmTime)) } @@ -143,7 +149,7 @@ func (a *AlarmManager) UpdateAlarmLists(newAlarm *alarm.AlarmMessage) { The attempt to raise the alarm next time will be supressed when found as duplicate. */ if len(a.activeAlarms) >= a.maxActiveAlarms { app.Logger.Error("active alarm count exceeded maxActiveAlarms threshold") - actAlarm := a.alarmClient.NewAlarm(alarm.ACTIVE_ALARM_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "clear alarms or raise threshold", "active alarms full") + 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) @@ -151,7 +157,7 @@ func (a *AlarmManager) UpdateAlarmLists(newAlarm *alarm.AlarmMessage) { if len(a.alarmHistory) >= a.maxAlarmHistory { app.Logger.Error("alarm history count exceeded maxAlarmHistory threshold") - histAlarm := a.alarmClient.NewAlarm(alarm.ALARM_HISTORY_EXCEED_MAX_THRESHOLD, alarm.SeverityWarning, "clear alarms or raise threshold", "alarm history full") + 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) @@ -218,13 +224,47 @@ func (a *AlarmManager) ConfigChangeCB(configparam string) { a.maxActiveAlarms = app.Config.GetInt("controls.maxActiveAlarms") a.maxAlarmHistory = app.Config.GetInt("controls.maxAlarmHistory") + a.alertInterval = viper.GetInt("controls.promAlertManager.alertInterval") + a.amHost = viper.GetString("controls.promAlertManager.address") app.Logger.Debug("ConfigChangeCB: maxActiveAlarms %v", a.maxActiveAlarms) app.Logger.Debug("ConfigChangeCB: maxAlarmHistory = %v", a.maxAlarmHistory) + app.Logger.Debug("ConfigChangeCB: alertInterval %v", a.alertInterval) + app.Logger.Debug("ConfigChangeCB: amHost = %v", a.amHost) return } +func (a *AlarmManager) ReadAlarmDefinitionFromJson() { + + filename := os.Getenv("DEF_FILE") + file, err := ioutil.ReadFile(filename) + if err == nil { + data := RicAlarmDefinitions{} + err = json.Unmarshal([]byte(file), &data) + if err == nil { + for _, alarmDefinition := range data.AlarmDefinitions { + _, exists := alarm.RICAlarmDefinitions[alarmDefinition.AlarmId] + if exists { + app.Logger.Error("ReadAlarmDefinitionFromJson: alarm definition already exists for %v", alarmDefinition.AlarmId) + } else { + app.Logger.Debug("ReadAlarmDefinitionFromJson: alarm %v", alarmDefinition.AlarmId) + ricAlarmDefintion := new(alarm.AlarmDefinition) + ricAlarmDefintion.AlarmId = alarmDefinition.AlarmId + ricAlarmDefintion.AlarmText = alarmDefinition.AlarmText + ricAlarmDefintion.EventType = alarmDefinition.EventType + ricAlarmDefintion.OperationInstructions = alarmDefinition.OperationInstructions + alarm.RICAlarmDefinitions[alarmDefinition.AlarmId] = ricAlarmDefintion + } + } + } else { + app.Logger.Error("json.Unmarshal failed with error %v", err) + } + } else { + app.Logger.Error("ioutil.ReadFile failed with error %v", err) + } +} + 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) @@ -232,6 +272,7 @@ func (a *AlarmManager) Run(sdlcheck bool) { app.AddConfigChangeListener(a.ConfigChangeCB) alarm.RICAlarmDefinitions = make(map[int]*alarm.AlarmDefinition) + a.ReadAlarmDefinitionFromJson() app.Resource.InjectRoute("/ric/v1/alarms", a.RaiseAlarm, "POST") app.Resource.InjectRoute("/ric/v1/alarms", a.ClearAlarm, "DELETE")