X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=RSM%2Fmanagers%2Fresource_status_initiate_manager.go;fp=RSM%2Fmanagers%2Fresource_status_initiate_manager.go;h=b96574d5b13b149f0e35d5c148f82912ab7e592d;hb=7b80668df78103cebafdfb7caa0070dc92ed3779;hp=0000000000000000000000000000000000000000;hpb=66db8f159a8034a65cc02f3ff4701cdfb908b496;p=ric-plt%2Fresource-status-manager.git diff --git a/RSM/managers/resource_status_initiate_manager.go b/RSM/managers/resource_status_initiate_manager.go new file mode 100644 index 0000000..b96574d --- /dev/null +++ b/RSM/managers/resource_status_initiate_manager.go @@ -0,0 +1,75 @@ +package managers + +import ( + "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" + "rsm/e2pdus" + "rsm/enums" + "rsm/logger" + "rsm/models" + "rsm/rmrcgo" + "rsm/rsmerrors" + "rsm/services" + "rsm/services/rmrsender" +) + +type ResourceStatusInitiateManager struct { + logger *logger.Logger + rnibDataService services.RNibDataService + rmrSender *rmrsender.RmrSender +} + +type IResourceStatusInitiateManager interface { + Execute(inventoryName string, resourceStatusInitiateRequestParams *e2pdus.ResourceStatusRequestData) error +} + +func NewResourceStatusInitiateManager(logger *logger.Logger, rnibDataService services.RNibDataService, rmrSender *rmrsender.RmrSender) *ResourceStatusInitiateManager { + return &ResourceStatusInitiateManager{ + logger: logger, + rnibDataService: rnibDataService, + rmrSender: rmrSender, + } +} + +func (m *ResourceStatusInitiateManager) Execute(inventoryName string, resourceStatusInitiateRequestParams *e2pdus.ResourceStatusRequestData) error { + + nodebInfo, err := m.rnibDataService.GetNodeb(inventoryName) + + if err != nil { + m.logger.Errorf("#ResourceStatusInitiateManager.Execute - RAN name: %s - Error fetching RAN from rNib: %v", inventoryName, err) + return rsmerrors.NewRnibDbError() + } + + m.logger.Infof("#ResourceStatusInitiateManager.Execute - RAN name: %s, connection status: %s", nodebInfo.GetRanName(), nodebInfo.GetConnectionStatus()) + + if nodebInfo.GetConnectionStatus() != entities.ConnectionStatus_CONNECTED { + m.logger.Errorf("#ResourceStatusInitiateManager.Execute - RAN name: %s - RAN's connection status isn't CONNECTED", inventoryName) + return rsmerrors.NewWrongStateError("Resource Status Initiate", entities.ConnectionStatus_name[int32(nodebInfo.ConnectionStatus)]) + } + + m.sendResourceStatusInitiatePerCell(nodebInfo, *resourceStatusInitiateRequestParams) + + return nil +} + +func (m *ResourceStatusInitiateManager) sendResourceStatusInitiatePerCell(nodebInfo *entities.NodebInfo, requestParams e2pdus.ResourceStatusRequestData) { + enb, _ := nodebInfo.Configuration.(*entities.NodebInfo_Enb) + cells := enb.Enb.ServedCells + + for index, cellInfo := range cells { + requestParams.CellID = cellInfo.CellId + requestParams.MeasurementID = e2pdus.Measurement_ID(index + 1) + + m.logger.Infof("#ResourceStatusInitiateManager.sendResourceStatusInitiatePerCell - RAN name: %s, Going to send request for cell id %s, measurement id %d", nodebInfo.RanName, requestParams.CellID, requestParams.MeasurementID) + + payload, payloadAsString, err := e2pdus.BuildPackedResourceStatusRequest(enums.Registration_Request_start, &requestParams, e2pdus.MaxAsn1PackedBufferSize, e2pdus.MaxAsn1CodecMessageBufferSize, m.logger.DebugEnabled()) + if err != nil { + m.logger.Errorf("#ResourceStatusInitiateManager.sendResourceStatusInitiatePerCell - RAN name: %s. Failed to build and pack the resource status initiate request for cell id %s, measurement id %d. error: %s", nodebInfo.RanName, requestParams.CellID, requestParams.MeasurementID, err) + continue + } + + m.logger.Debugf("#ResourceStatusInitiateManager.sendResourceStatusInitiatePerCell - RAN name: %s, cell id: %s, measurement id: %d, payload: %s", nodebInfo.RanName, requestParams.CellID, requestParams.MeasurementID, payloadAsString) + + rmrMsg := models.NewRmrMessage(rmrcgo.RicResStatusReq, nodebInfo.RanName, payload) + go m.rmrSender.Send(rmrMsg) + } +}