X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=manager%2Fcmd%2Fmanager.go;h=6e67672c1599815c496424c2ba16d5396f2319ef;hb=663b8e1a9cb5add7ea8bf6ec33696243e7d7d0dc;hp=fb30ba7c3cdd26a474869b69b9098f28834f2ce0;hpb=fe07bd1ea2f550225a209f1393fbaf14fe0a46a2;p=ric-plt%2Falarm-go.git diff --git a/manager/cmd/manager.go b/manager/cmd/manager.go index fb30ba7..6e67672 100755 --- a/manager/cmd/manager.go +++ b/manager/cmd/manager.go @@ -24,16 +24,16 @@ import ( "encoding/json" "fmt" "time" - + "os" + "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" ) func (a *AlarmManager) StartAlertTimer() { @@ -82,7 +82,7 @@ func (a *AlarmManager) ProcessAlarm(m *alarm.AlarmMessage) (*alert.PostAlertsOK, // Suppress duplicate alarms idx, found := a.IsMatchFound(m.Alarm) - if found && m.AlarmAction == alarm.AlarmActionRaise { + if found && m.AlarmAction == alarm.AlarmActionRaise { app.Logger.Info("Duplicate alarm found, suppressing ...") if m.PerceivedSeverity == a.activeAlarms[idx].PerceivedSeverity { // Duplicate with same severity found @@ -93,7 +93,6 @@ func (a *AlarmManager) ProcessAlarm(m *alarm.AlarmMessage) (*alert.PostAlertsOK, } } - // Clear alarm if found from active alarm list if m.AlarmAction == alarm.AlarmActionClear { if found { @@ -226,18 +225,55 @@ func (a *AlarmManager) ConfigChangeCB(configparam string) { 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) app.Resource.InjectStatusCb(a.StatusCB) 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") app.Resource.InjectRoute("/ric/v1/alarms/active", a.GetActiveAlarms, "GET") app.Resource.InjectRoute("/ric/v1/alarms/history", a.GetAlarmHistory, "GET") app.Resource.InjectRoute("/ric/v1/alarms/config", a.SetAlarmConfig, "POST") app.Resource.InjectRoute("/ric/v1/alarms/config", a.GetAlarmConfig, "GET") + app.Resource.InjectRoute("/ric/v1/alarms/define", a.SetAlarmDefinition, "POST") + app.Resource.InjectRoute("/ric/v1/alarms/define/{alarmId}", a.DeleteAlarmDefinition, "DELETE") + app.Resource.InjectRoute("/ric/v1/alarms/define", a.GetAlarmDefinition, "GET") + app.Resource.InjectRoute("/ric/v1/alarms/define/{alarmId}", a.GetAlarmDefinition, "GET") // Start background timer for re-raising alerts a.postClear = sdlcheck