X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=ric-plt%2Fresource-status-manager.git;a=blobdiff_plain;f=RSM%2Fhandlers%2Frmrmsghandlers%2Fresource_status_initiate_notification_handler.go;fp=RSM%2Fhandlers%2Frmrmsghandlers%2Fresource_status_initiate_notification_handler.go;h=8afd23e666cbae275881ed5e74e677e3a789dfd7;hp=1d9cac74e360879ee9100c440b28b6b1817625a0;hb=60652d98d51ee23c1eaca2e8bc2bf19c74c57658;hpb=b8d3ff3abf409da49ecab244cd6d2c2124dbce7c diff --git a/RSM/handlers/rmrmsghandlers/resource_status_initiate_notification_handler.go b/RSM/handlers/rmrmsghandlers/resource_status_initiate_notification_handler.go index 1d9cac7..8afd23e 100644 --- a/RSM/handlers/rmrmsghandlers/resource_status_initiate_notification_handler.go +++ b/RSM/handlers/rmrmsghandlers/resource_status_initiate_notification_handler.go @@ -21,73 +21,107 @@ package rmrmsghandlers import ( "encoding/json" + "fmt" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" - "rsm/configuration" - "rsm/e2pdus" + "rsm/enums" "rsm/logger" - "rsm/managers" "rsm/models" + "rsm/services" ) type ResourceStatusInitiateNotificationHandler struct { - logger *logger.Logger - config *configuration.Configuration - resourceStatusInitiateManager managers.IResourceStatusInitiateManager - requestName string + logger *logger.Logger + rnibDataService services.RNibDataService + resourceStatusService services.IResourceStatusService + requestName string } -func NewResourceStatusInitiateNotificationHandler(logger *logger.Logger, config *configuration.Configuration, resourceStatusInitiateManager managers.IResourceStatusInitiateManager, requestName string) ResourceStatusInitiateNotificationHandler { +func NewResourceStatusInitiateNotificationHandler(logger *logger.Logger, rnibDataService services.RNibDataService, resourceStatusService services.IResourceStatusService, requestName string) ResourceStatusInitiateNotificationHandler { return ResourceStatusInitiateNotificationHandler{ - logger: logger, - config: config, - resourceStatusInitiateManager: resourceStatusInitiateManager, - requestName: requestName, + logger: logger, + rnibDataService: rnibDataService, + resourceStatusService: resourceStatusService, + requestName: requestName, } } +func (h ResourceStatusInitiateNotificationHandler) UnmarshalResourceStatusPayload(inventoryName string, payload []byte) (*models.ResourceStatusPayload, error) { + unmarshalledPayload := models.ResourceStatusPayload{} + err := json.Unmarshal(payload, &unmarshalledPayload) + + if err != nil { + h.logger.Errorf("#ResourceStatusInitiateNotificationHandler.UnmarshalResourceStatusPayload - RAN name: %s - Error unmarshaling RMR request payload: %v", inventoryName, err) + return nil, err + } + + if unmarshalledPayload.NodeType == entities.Node_UNKNOWN { + h.logger.Errorf("#ResourceStatusInitiateNotificationHandler.UnmarshalResourceStatusPayload - RAN name: %s - Unknown Node Type", inventoryName) + return nil, fmt.Errorf("unknown node type for RAN %s", inventoryName) + } + + h.logger.Infof("#ResourceStatusInitiateNotificationHandler.UnmarshalResourceStatusPayload - Unmarshaled payload successfully: %+v", unmarshalledPayload) + return &unmarshalledPayload, nil + +} + +func (h ResourceStatusInitiateNotificationHandler) SaveRsmRanInfoStopTrue(inventoryName string) { + rsmRanInfo := models.NewRsmRanInfo(inventoryName, 0, 0, enums.Stop, true) + _ = h.rnibDataService.SaveRsmRanInfo(rsmRanInfo) +} + func (h ResourceStatusInitiateNotificationHandler) Handle(request *models.RmrRequest) { inventoryName := request.RanName - h.logger.Infof("#ResourceStatusInitiateNotificationHandler - RAN name: %s - Received %s notification", inventoryName, h.requestName) + h.logger.Infof("#ResourceStatusInitiateNotificationHandler.Handle - RAN name: %s - Received %s notification", inventoryName, h.requestName) + + payload, err := h.UnmarshalResourceStatusPayload(inventoryName, request.Payload) - if !isResourceStatusEnabled(h.config) { - h.logger.Warnf("#ResourceStatusInitiateNotificationHandler - RAN name: %s - resource status is disabled", inventoryName) + if err != nil { return } - payload := models.ResourceStatusPayload{} - err := json.Unmarshal(request.Payload, &payload) + if payload.NodeType != entities.Node_ENB { + h.logger.Debugf("#ResourceStatusInitiateNotificationHandler.Handle - RAN name: %s, Node type isn't ENB", inventoryName) + return + } + + config, err := h.rnibDataService.GetRsmGeneralConfiguration() if err != nil { - h.logger.Errorf("#ResourceStatusInitiateNotificationHandler - RAN name: %s - Error unmarshaling RMR request payload: %v", inventoryName, err) return } - h.logger.Infof("#ResourceStatusInitiateNotificationHandler - Unmarshaled payload successfully: %+v", payload) + if !config.EnableResourceStatus { + h.SaveRsmRanInfoStopTrue(inventoryName) + return + } - if payload.NodeType != entities.Node_ENB { - h.logger.Debugf("#ResourceStatusInitiateNotificationHandler - RAN name: %s, Node type isn't ENB", inventoryName) + nodeb, err := h.rnibDataService.GetNodeb(inventoryName) + + if err != nil { return } - resourceStatusInitiateRequestParams := &e2pdus.ResourceStatusRequestData{} - populateResourceStatusInitiateRequestParams(resourceStatusInitiateRequestParams, h.config) + nodebConnectionStatus := nodeb.GetConnectionStatus() - _ = h.resourceStatusInitiateManager.Execute(inventoryName, resourceStatusInitiateRequestParams) -} + h.logger.Infof("#ResourceStatusInitiateNotificationHandler.Handle - RAN name: %s - successfully fetched RAN from db. RAN's connection status: %s", inventoryName, nodebConnectionStatus) -func isResourceStatusEnabled(configuration *configuration.Configuration) bool { - return configuration.ResourceStatusParams.EnableResourceStatus -} + if nodebConnectionStatus != entities.ConnectionStatus_CONNECTED { + h.logger.Errorf("#ResourceStatusInitiateNotificationHandler.Handle - RAN name: %s - RAN's connection status isn't CONNECTED", inventoryName) + h.SaveRsmRanInfoStopTrue(inventoryName) + return + } + + rsmRanInfo := models.NewRsmRanInfo(inventoryName, enums.Enb1MeasurementId, 0, enums.Start, false) + err = h.rnibDataService.SaveRsmRanInfo(rsmRanInfo) -func populateResourceStatusInitiateRequestParams(params *e2pdus.ResourceStatusRequestData, config *configuration.Configuration) { - params.PartialSuccessAllowed = config.ResourceStatusParams.PartialSuccessAllowed - params.PrbPeriodic = config.ResourceStatusParams.PrbPeriodic - params.TnlLoadIndPeriodic = config.ResourceStatusParams.TnlLoadIndPeriodic - params.HwLoadIndPeriodic = config.ResourceStatusParams.HwLoadIndPeriodic - params.AbsStatusPeriodic = config.ResourceStatusParams.AbsStatusPeriodic - params.RsrpMeasurementPeriodic = config.ResourceStatusParams.RsrpMeasurementPeriodic - params.CsiPeriodic = config.ResourceStatusParams.CsiPeriodic - params.PeriodicityMS = config.ResourceStatusParams.PeriodicityMs - params.PeriodicityRsrpMeasurementMS = config.ResourceStatusParams.PeriodicityRsrpMeasurementMs - params.PeriodicityCsiMS = config.ResourceStatusParams.PeriodicityCsiMs + if err != nil { + return + } + + err = h.resourceStatusService.BuildAndSendInitiateRequest(nodeb, config, rsmRanInfo.Enb1MeasurementId) + + if err != nil { + h.SaveRsmRanInfoStopTrue(inventoryName) + return + } }