*/\r
package org.commscope.tr069adapter.vesagent.controller;\r
\r
-import com.fasterxml.jackson.core.JsonProcessingException;\r
import com.fasterxml.jackson.databind.ObjectMapper;\r
\r
-import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
+import org.commscope.tr069adapter.acs.common.OperationDetails;\r
+import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
import org.commscope.tr069adapter.mapper.model.VESNotification;\r
import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
+import org.commscope.tr069adapter.vesagent.entity.DeviceDataEntity;\r
+import org.commscope.tr069adapter.vesagent.exception.VesAgentException;\r
import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;\r
import org.commscope.tr069adapter.vesagent.model.CommonEventHeader;\r
import org.commscope.tr069adapter.vesagent.model.Event;\r
import org.commscope.tr069adapter.vesagent.model.EventMessage;\r
import org.commscope.tr069adapter.vesagent.model.HeartbeatFields;\r
+import org.commscope.tr069adapter.vesagent.service.VesAgentServiceHelper;\r
+import org.commscope.tr069adapter.vesagent.util.VesAgentConstants;\r
+import org.commscope.tr069adapter.vesagent.util.VesAgentUtils;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
import org.springframework.beans.factory.annotation.Autowired;\r
\r
private static final Logger logger = LoggerFactory.getLogger(HeartBeatMessageHandler.class);\r
\r
+ @Autowired\r
+ VesAgentServiceHelper vesAgentServiceHelper;\r
+\r
@Autowired\r
VesConfiguration config;\r
\r
@Autowired\r
HttpRequestSender sender;\r
\r
- public VESNotificationResponse handlePINotification(VESNotification vesNoti)\r
- throws JsonProcessingException {\r
- Event event =\r
- convertNotificationToVESEvent(vesNoti.getDevnotification(), vesNoti.geteNodeBName());\r
+ public VESNotificationResponse sendHeartBeatEvent(DeviceDataEntity deviceDataEntity,\r
+ int heartBeatPeriod) throws Exception {\r
+ Event event = convertNotificationToVESEvent(deviceDataEntity, heartBeatPeriod);\r
\r
EventMessage evMsg = new EventMessage();\r
evMsg.setEvent(event);\r
return sender.postRequest(url, requestBody);\r
}\r
\r
- Event convertNotificationToVESEvent(DeviceInform notification, String eNodeBName) {\r
+ public void handleRegisterRequest(VESNotification vesNotification) {\r
+ try {\r
+ VesAgentUtils.validateVESNotification(vesNotification);\r
+ } catch (VesAgentException e) {\r
+ logger.error(\r
+ "Failed to create heartbeat timers for device on recieving bootstrap. ErrorMsg: {}",\r
+ e.getMessage());\r
+ return;\r
+ }\r
+\r
+ List<DeviceDataEntity> deviceDataEntityList = vesAgentServiceHelper.findByDeviceIdAndGroup(\r
+ vesNotification.getDevnotification().getDeviceDetails().getDeviceId(),\r
+ VesAgentConstants.HEART_BEAT);\r
+\r
+ if (Boolean.FALSE.equals(VesAgentUtils.isNullOrEmpty(deviceDataEntityList))) {\r
+ DeviceDataEntity deviceDataEntity = deviceDataEntityList.get(0);\r
+ String heartbeatPeriod =\r
+ deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD);\r
+\r
+ if (!VesAgentUtils.isNullOrEmpty(heartbeatPeriod)\r
+ && !heartbeatPeriod.equalsIgnoreCase(VesAgentConstants.REMOVE_HEART_BEAT_TIMER_VAL)) {\r
+ return;\r
+ }\r
+ }\r
+\r
+ logger.info("Creating heartbeat records and timer using default heartbeatPeriod {} minutes.",\r
+ VesAgentConstants.HEART_BEAT_PERIOD_DEFAULT_VAL);\r
+\r
+ DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
+ deviceRPCRequest.setDeviceDetails(vesNotification.getDevnotification().getDeviceDetails());\r
+\r
+ OperationDetails opDetails = new OperationDetails();\r
+\r
+ ParameterDTO heartBeatPeriodParam = new ParameterDTO();\r
+ heartBeatPeriodParam.setParamName(VesAgentConstants.HEART_BEAT_PERIOD);\r
+ heartBeatPeriodParam.setParamValue(VesAgentConstants.HEART_BEAT_PERIOD_DEFAULT_VAL);\r
+\r
+ List<ParameterDTO> paramList = new ArrayList<>();\r
+ paramList.add(heartBeatPeriodParam);\r
+\r
+ opDetails.setParmeters(paramList);\r
+ deviceRPCRequest.setOpDetails(opDetails);\r
+\r
+ deviceRPCRequest.addContextParam(VesAgentConstants.ENODEB_NAME,\r
+ vesNotification.geteNodeBName());\r
+\r
+ handleSetConfigRequest(deviceRPCRequest);\r
+\r
+ }\r
+\r
+ public DeviceRPCResponse handleSetConfigRequest(DeviceRPCRequest deviceRPCRequest) {\r
+ try {\r
+ VesAgentUtils.validateDeviceRPCRequest(deviceRPCRequest);\r
+ } catch (VesAgentException e) {\r
+ return VesAgentUtils.getErrorResponse(deviceRPCRequest, e.getErrorCode(), e.getMessage());\r
+ }\r
+\r
+ OperationDetails operationDetails = deviceRPCRequest.getOpDetails();\r
+\r
+ String heartBeatPeriod = null;\r
+ String countDownTimer = null;\r
+\r
+ ParameterDTO countDownTimerDTO = null;\r
+\r
+ List<ParameterDTO> paramDTOList = operationDetails.getParmeters();\r
+ for (ParameterDTO paramDTO : paramDTOList) {\r
+ if (paramDTO.getParamName().equalsIgnoreCase(VesAgentConstants.HEART_BEAT_PERIOD)) {\r
+ heartBeatPeriod = paramDTO.getParamValue();\r
+ }\r
+\r
+ if (paramDTO.getParamName().equalsIgnoreCase(VesAgentConstants.COUNT_DOWN_TIMER)) {\r
+ countDownTimer = paramDTO.getParamValue();\r
+ countDownTimerDTO = paramDTO;\r
+ }\r
+ }\r
+\r
+ try {\r
+ vesAgentServiceHelper.processHeartBeatSetRequest(deviceRPCRequest, heartBeatPeriod,\r
+ countDownTimer);\r
+ } catch (VesAgentException e) {\r
+ return VesAgentUtils.getErrorResponse(deviceRPCRequest, e.getErrorCode(), e.getMessage());\r
+ }\r
+\r
+ copyHeartBeatPeriodToTimerForResponse(countDownTimerDTO, heartBeatPeriod);\r
+ return VesAgentUtils.getSuccessResponse(deviceRPCRequest);\r
+ }\r
+\r
+ private void copyHeartBeatPeriodToTimerForResponse(ParameterDTO countDownParam,\r
+ String heartBeatPeriod) {\r
+ if (null != countDownParam && !VesAgentUtils.isNullOrEmpty(heartBeatPeriod)) {\r
+ countDownParam.setParamValue(heartBeatPeriod);\r
+ }\r
+ }\r
+\r
+ public DeviceRPCResponse handleGetConfigRequest(DeviceRPCRequest deviceRPCRequest) {\r
+ try {\r
+ VesAgentUtils.validateDeviceRPCRequest(deviceRPCRequest);\r
+ } catch (VesAgentException e) {\r
+ return VesAgentUtils.getErrorResponse(deviceRPCRequest, e.getErrorCode(), e.getMessage());\r
+ }\r
+\r
+ vesAgentServiceHelper.processHeartBeatGetRequest(deviceRPCRequest);\r
+ return VesAgentUtils.getSuccessResponse(deviceRPCRequest);\r
+ }\r
+\r
+ public VESNotificationResponse handleDeleteConfigRequest(VESNotification vesNotification) {\r
+ try {\r
+ VesAgentUtils.validateDelVESNotification(vesNotification);\r
+ vesAgentServiceHelper.processHeartBeatDeleteRequest(vesNotification);\r
+ } catch (VesAgentException e) {\r
+ return new VESNotificationResponse(Integer.parseInt(e.getErrorCode()), e.getMessage());\r
+ } catch (Exception e) {\r
+ return new VESNotificationResponse(VesAgentConstants.RPC_FAILED, e.getMessage());\r
+ }\r
+\r
+ return new VESNotificationResponse(VesAgentConstants.RPC_SUCCESS, "success");\r
+ }\r
+\r
+ Event convertNotificationToVESEvent(DeviceDataEntity deviceDataEntity, int heartBeatPeriod) {\r
Event hbEvent = new Event();\r
CommonEventHeader eventHeader = new CommonEventHeader();\r
\r
eventHeader.setDomain("heartbeat");\r
- eventHeader.setEventId(\r
- "Heartbeat_" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis());\r
- eventHeader.setEventName("Heartbeat_" + notification.getDeviceDetails().getProductClass() + "-"\r
- + config.getVendorName());\r
- eventHeader.setEventType("CommScope_RAN_Vnf");\r
- eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
-\r
- eventHeader.setPriority("Normal");\r
+ eventHeader\r
+ .setEventId("heartbeat_" + deviceDataEntity.getDeviceId() + System.currentTimeMillis());\r
+ eventHeader.setEventName(\r
+ "heartbeat_" + deviceDataEntity.getProductClass() + "-" + config.getVendorName());\r
+ eventHeader.setEventType("CommScope_RAN_heartbeat");\r
+ eventHeader.setLastEpochMicrosec(System.currentTimeMillis() * 1000);\r
+\r
+ eventHeader.setPriority("High");\r
eventHeader.setSequence(0);\r
\r
- if (eNodeBName == null) {\r
- eventHeader.setReportingEntityName(notification.getDeviceDetails().getDeviceId());\r
- eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
- eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
- eventHeader.setSourceName(notification.getDeviceDetails().getDeviceId());\r
+ if (deviceDataEntity.geteNodeBName() == null) {\r
+ eventHeader.setReportingEntityName(deviceDataEntity.getDeviceId());\r
+ eventHeader.setReportingEntityId(deviceDataEntity.getDeviceId());\r
+ eventHeader.setSourceId(deviceDataEntity.getDeviceId());\r
+ eventHeader.setSourceName(deviceDataEntity.getDeviceId());\r
} else {\r
- eventHeader.setReportingEntityName(eNodeBName);\r
- eventHeader.setSourceName(eNodeBName);\r
- eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
- eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+ eventHeader.setReportingEntityName(deviceDataEntity.geteNodeBName());\r
+ eventHeader.setSourceName(deviceDataEntity.geteNodeBName());\r
+ eventHeader.setReportingEntityId(deviceDataEntity.getDeviceId());\r
+ eventHeader.setSourceId(deviceDataEntity.getDeviceId());\r
}\r
\r
- eventHeader.setStartEpochMicrosec(System.currentTimeMillis());\r
+ eventHeader.setStartEpochMicrosec(System.currentTimeMillis() * 1000);\r
eventHeader.setVersion(config.getEventVersion());\r
eventHeader.setNfNamingCode("");\r
eventHeader.setNfcNamingCode("");\r
\r
HeartbeatFields heartbeatFields = new HeartbeatFields();\r
heartbeatFields.setHeartbeatFieldsVersion("3.0");\r
- heartbeatFields.setHeartbeatInterval(60);\r
+ heartbeatFields.setHeartbeatInterval(heartBeatPeriod * 60);\r
hbEvent.setHeartbeatFields(heartbeatFields);\r
\r
return hbEvent;\r