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)
}