X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ves-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Fcommscope%2Ftr069adapter%2Fvesagent%2Fcontroller%2FHeartBeatMessageHandler.java;h=c62681c03aa770dfcc11dbf2614a4e8ce40fb4a6;hb=refs%2Fchanges%2F34%2F4334%2F1;hp=be253c31c7a293cb4605dc595425807893f27548;hpb=a58ada8fd244e69cf2ebe48a251fcdd4d48acec4;p=oam%2Ftr069-adapter.git diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/HeartBeatMessageHandler.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/HeartBeatMessageHandler.java index be253c3..c62681c 100644 --- a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/HeartBeatMessageHandler.java +++ b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/HeartBeatMessageHandler.java @@ -17,18 +17,28 @@ */ package org.commscope.tr069adapter.vesagent.controller; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import org.commscope.tr069adapter.acs.common.DeviceInform; +import java.util.ArrayList; +import java.util.List; + +import org.commscope.tr069adapter.acs.common.DeviceRPCRequest; +import org.commscope.tr069adapter.acs.common.DeviceRPCResponse; +import org.commscope.tr069adapter.acs.common.OperationDetails; +import org.commscope.tr069adapter.acs.common.ParameterDTO; import org.commscope.tr069adapter.mapper.model.VESNotification; import org.commscope.tr069adapter.mapper.model.VESNotificationResponse; import org.commscope.tr069adapter.vesagent.VesConfiguration; +import org.commscope.tr069adapter.vesagent.entity.DeviceDataEntity; +import org.commscope.tr069adapter.vesagent.exception.VesAgentException; import org.commscope.tr069adapter.vesagent.http.HttpRequestSender; import org.commscope.tr069adapter.vesagent.model.CommonEventHeader; import org.commscope.tr069adapter.vesagent.model.Event; import org.commscope.tr069adapter.vesagent.model.EventMessage; import org.commscope.tr069adapter.vesagent.model.HeartbeatFields; +import org.commscope.tr069adapter.vesagent.service.VesAgentServiceHelper; +import org.commscope.tr069adapter.vesagent.util.VesAgentConstants; +import org.commscope.tr069adapter.vesagent.util.VesAgentUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -39,16 +49,18 @@ public class HeartBeatMessageHandler { private static final Logger logger = LoggerFactory.getLogger(HeartBeatMessageHandler.class); + @Autowired + VesAgentServiceHelper vesAgentServiceHelper; + @Autowired VesConfiguration config; @Autowired HttpRequestSender sender; - public VESNotificationResponse handlePINotification(VESNotification vesNoti) - throws JsonProcessingException { - Event event = - convertNotificationToVESEvent(vesNoti.getDevnotification(), vesNoti.geteNodeBName()); + public VESNotificationResponse sendHeartBeatEvent(DeviceDataEntity deviceDataEntity, + int heartBeatPeriod) throws Exception { + Event event = convertNotificationToVESEvent(deviceDataEntity, heartBeatPeriod); EventMessage evMsg = new EventMessage(); evMsg.setEvent(event); @@ -64,34 +76,152 @@ public class HeartBeatMessageHandler { return sender.postRequest(url, requestBody); } - Event convertNotificationToVESEvent(DeviceInform notification, String eNodeBName) { + public void handleRegisterRequest(VESNotification vesNotification) { + try { + VesAgentUtils.validateVESNotification(vesNotification); + } catch (VesAgentException e) { + logger.error( + "Failed to create heartbeat timers for device on recieving bootstrap. ErrorMsg: {}", + e.getMessage()); + return; + } + + List deviceDataEntityList = vesAgentServiceHelper.findByDeviceIdAndGroup( + vesNotification.getDevnotification().getDeviceDetails().getDeviceId(), + VesAgentConstants.HEART_BEAT); + + if (Boolean.FALSE.equals(VesAgentUtils.isNullOrEmpty(deviceDataEntityList))) { + DeviceDataEntity deviceDataEntity = deviceDataEntityList.get(0); + String heartbeatPeriod = + deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD); + + if (!VesAgentUtils.isNullOrEmpty(heartbeatPeriod) + && !heartbeatPeriod.equalsIgnoreCase(VesAgentConstants.REMOVE_HEART_BEAT_TIMER_VAL)) { + return; + } + } + + logger.info("Creating heartbeat records and timer using default heartbeatPeriod {} minutes.", + VesAgentConstants.HEART_BEAT_PERIOD_DEFAULT_VAL); + + DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest(); + deviceRPCRequest.setDeviceDetails(vesNotification.getDevnotification().getDeviceDetails()); + + OperationDetails opDetails = new OperationDetails(); + + ParameterDTO heartBeatPeriodParam = new ParameterDTO(); + heartBeatPeriodParam.setParamName(VesAgentConstants.HEART_BEAT_PERIOD); + heartBeatPeriodParam.setParamValue(VesAgentConstants.HEART_BEAT_PERIOD_DEFAULT_VAL); + + List paramList = new ArrayList<>(); + paramList.add(heartBeatPeriodParam); + + opDetails.setParmeters(paramList); + deviceRPCRequest.setOpDetails(opDetails); + + deviceRPCRequest.addContextParam(VesAgentConstants.ENODEB_NAME, + vesNotification.geteNodeBName()); + + handleSetConfigRequest(deviceRPCRequest); + + } + + public DeviceRPCResponse handleSetConfigRequest(DeviceRPCRequest deviceRPCRequest) { + try { + VesAgentUtils.validateDeviceRPCRequest(deviceRPCRequest); + } catch (VesAgentException e) { + return VesAgentUtils.getErrorResponse(deviceRPCRequest, e.getErrorCode(), e.getMessage()); + } + + OperationDetails operationDetails = deviceRPCRequest.getOpDetails(); + + String heartBeatPeriod = null; + String countDownTimer = null; + + ParameterDTO countDownTimerDTO = null; + + List paramDTOList = operationDetails.getParmeters(); + for (ParameterDTO paramDTO : paramDTOList) { + if (paramDTO.getParamName().equalsIgnoreCase(VesAgentConstants.HEART_BEAT_PERIOD)) { + heartBeatPeriod = paramDTO.getParamValue(); + } + + if (paramDTO.getParamName().equalsIgnoreCase(VesAgentConstants.COUNT_DOWN_TIMER)) { + countDownTimer = paramDTO.getParamValue(); + countDownTimerDTO = paramDTO; + } + } + + try { + vesAgentServiceHelper.processHeartBeatSetRequest(deviceRPCRequest, heartBeatPeriod, + countDownTimer); + } catch (VesAgentException e) { + return VesAgentUtils.getErrorResponse(deviceRPCRequest, e.getErrorCode(), e.getMessage()); + } + + copyHeartBeatPeriodToTimerForResponse(countDownTimerDTO, heartBeatPeriod); + return VesAgentUtils.getSuccessResponse(deviceRPCRequest); + } + + private void copyHeartBeatPeriodToTimerForResponse(ParameterDTO countDownParam, + String heartBeatPeriod) { + if (null != countDownParam && !VesAgentUtils.isNullOrEmpty(heartBeatPeriod)) { + countDownParam.setParamValue(heartBeatPeriod); + } + } + + public DeviceRPCResponse handleGetConfigRequest(DeviceRPCRequest deviceRPCRequest) { + try { + VesAgentUtils.validateDeviceRPCRequest(deviceRPCRequest); + } catch (VesAgentException e) { + return VesAgentUtils.getErrorResponse(deviceRPCRequest, e.getErrorCode(), e.getMessage()); + } + + vesAgentServiceHelper.processHeartBeatGetRequest(deviceRPCRequest); + return VesAgentUtils.getSuccessResponse(deviceRPCRequest); + } + + public VESNotificationResponse handleDeleteConfigRequest(VESNotification vesNotification) { + try { + VesAgentUtils.validateDelVESNotification(vesNotification); + vesAgentServiceHelper.processHeartBeatDeleteRequest(vesNotification); + } catch (VesAgentException e) { + return new VESNotificationResponse(Integer.parseInt(e.getErrorCode()), e.getMessage()); + } catch (Exception e) { + return new VESNotificationResponse(VesAgentConstants.RPC_FAILED, e.getMessage()); + } + + return new VESNotificationResponse(VesAgentConstants.RPC_SUCCESS, "success"); + } + + Event convertNotificationToVESEvent(DeviceDataEntity deviceDataEntity, int heartBeatPeriod) { Event hbEvent = new Event(); CommonEventHeader eventHeader = new CommonEventHeader(); eventHeader.setDomain("heartbeat"); - eventHeader.setEventId( - "Heartbeat_" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis()); - eventHeader.setEventName("Heartbeat_" + notification.getDeviceDetails().getProductClass() + "-" - + config.getVendorName()); - eventHeader.setEventType("CommScope_RAN_Vnf"); - eventHeader.setLastEpochMicrosec(System.currentTimeMillis()); - - eventHeader.setPriority("Normal"); + eventHeader + .setEventId("heartbeat_" + deviceDataEntity.getDeviceId() + System.currentTimeMillis()); + eventHeader.setEventName( + "heartbeat_" + deviceDataEntity.getProductClass() + "-" + config.getVendorName()); + eventHeader.setEventType("CommScope_RAN_heartbeat"); + eventHeader.setLastEpochMicrosec(System.currentTimeMillis() * 1000); + + eventHeader.setPriority("High"); eventHeader.setSequence(0); - if (eNodeBName == null) { - eventHeader.setReportingEntityName(notification.getDeviceDetails().getDeviceId()); - eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId()); - eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId()); - eventHeader.setSourceName(notification.getDeviceDetails().getDeviceId()); + if (deviceDataEntity.geteNodeBName() == null) { + eventHeader.setReportingEntityName(deviceDataEntity.getDeviceId()); + eventHeader.setReportingEntityId(deviceDataEntity.getDeviceId()); + eventHeader.setSourceId(deviceDataEntity.getDeviceId()); + eventHeader.setSourceName(deviceDataEntity.getDeviceId()); } else { - eventHeader.setReportingEntityName(eNodeBName); - eventHeader.setSourceName(eNodeBName); - eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId()); - eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId()); + eventHeader.setReportingEntityName(deviceDataEntity.geteNodeBName()); + eventHeader.setSourceName(deviceDataEntity.geteNodeBName()); + eventHeader.setReportingEntityId(deviceDataEntity.getDeviceId()); + eventHeader.setSourceId(deviceDataEntity.getDeviceId()); } - eventHeader.setStartEpochMicrosec(System.currentTimeMillis()); + eventHeader.setStartEpochMicrosec(System.currentTimeMillis() * 1000); eventHeader.setVersion(config.getEventVersion()); eventHeader.setNfNamingCode(""); eventHeader.setNfcNamingCode(""); @@ -101,7 +231,7 @@ public class HeartBeatMessageHandler { HeartbeatFields heartbeatFields = new HeartbeatFields(); heartbeatFields.setHeartbeatFieldsVersion("3.0"); - heartbeatFields.setHeartbeatInterval(60); + heartbeatFields.setHeartbeatInterval(heartBeatPeriod * 60); hbEvent.setHeartbeatFields(heartbeatFields); return hbEvent;