Copy latest code to master
[ric-plt/resource-status-manager.git] / RSM / handlers / rmrmsghandlers / resource_status_response_handler.go
index 04c4dc7..5f32d58 100644 (file)
 
 package rmrmsghandlers
 
-
 import (
-//     "rsm/converters"
-//     "rsm/e2pdus"
+       "rsm/converters"
+       "rsm/e2pdus"
        "rsm/logger"
        "rsm/models"
+       "rsm/services"
 )
 
 type ResourceStatusResponseHandler struct {
-       logger *logger.Logger
+       logger          *logger.Logger
+       rnibDataService services.RNibDataService
+       converter       converters.IResourceStatusResponseConverter
 }
 
-func NewResourceStatusResponseHandler(logger *logger.Logger) ResourceStatusResponseHandler {
+func NewResourceStatusResponseHandler(logger *logger.Logger, converter converters.IResourceStatusResponseConverter, rnibDataService services.RNibDataService) ResourceStatusResponseHandler {
        return ResourceStatusResponseHandler{
-               logger:logger,
+               logger:          logger,
+               converter:       converter,
+               rnibDataService: rnibDataService,
        }
 }
 
 func (h ResourceStatusResponseHandler) Handle(request *models.RmrRequest) {
        h.logger.Infof("#ResourceStatusResponseHandler.Handle - RAN name: %s - Received resource status response notification", request.RanName)
-       //_, err := converters.UnpackX2apPduAsString(h.logger, request.Len, request.Payload, e2pdus.MaxAsn1CodecMessageBufferSize)
-       //if err != nil {
-       //      logger.Errorf("#ResourceStatusResponseHandler.Handle - unpack failed. Error: %v", err)
-       //}
+
+       if h.logger.DebugEnabled() {
+               pduAsString, err := h.converter.UnpackX2apPduAsString(request.Payload, e2pdus.MaxAsn1CodecMessageBufferSize)
+               if err != nil {
+                       h.logger.Errorf("#ResourceStatusResponseHandler.Handle - RAN name: %s - unpack failed. Error: %v", request.RanName, err)
+                       return
+               }
+               h.logger.Debugf("#ResourceStatusResponseHandler.Handle - RAN name: %s - pdu: %s", request.RanName, pduAsString)
+       }
+
+       response, err := h.converter.Convert(request.Payload)
+
+       if err != nil {
+               h.logger.Errorf("#ResourceStatusResponseHandler.Handle - RAN name: %s - unpack failed. Error: %v", request.RanName, err)
+               return
+       }
+
+       if response.ENB2_Measurement_ID == 0 {
+               h.logger.Errorf("#ResourceStatusResponseHandler.Handle - RAN name: %s - ignoring response without ENB2_Measurement_ID", request.RanName)
+               return
+       }
+
+       h.logger.Infof("#ResourceStatusResponseHandler.Handle - RAN name: %s - (success) ENB1_Measurement_ID: %d, ENB2_Measurement_ID: %d",
+               request.RanName,
+               response.ENB1_Measurement_ID,
+               response.ENB2_Measurement_ID)
+
+       rsmRanInfo, err := h.rnibDataService.GetRsmRanInfo(request.RanName)
+
+       if err != nil {
+               return
+       }
+
+       rsmRanInfo.Enb2MeasurementId = response.ENB2_Measurement_ID
+       rsmRanInfo.ActionStatus = true
+
+       err = h.rnibDataService.SaveRsmRanInfo(rsmRanInfo)
+
+       if err != nil {
+               return
+       }
+
+       h.logger.Infof("#ResourceStatusResponseHandler.Handle - RAN name: %s - Successfully updated RsmRanInfo", request.RanName)
 }