-/*\r
- * ============LICENSE_START========================================================================\r
- * ONAP : tr-069-adapter\r
- * =================================================================================================\r
- * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
- * =================================================================================================\r
- * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
- * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
- * may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
- * either express or implied. See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ===============LICENSE_END=======================================================================\r
- */\r
-package org.commscope.tr069adapter.vesagent.controller;\r
-\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-\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
-import org.springframework.stereotype.Component;\r
-\r
-@Component\r
-public class HeartBeatMessageHandler {\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 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
-\r
- ObjectMapper mapper = new ObjectMapper();\r
-\r
- String requestBody = mapper.writeValueAsString(evMsg);\r
- if (requestBody.isEmpty()) {\r
- logger.debug("VES Event body is empty");\r
- }\r
-\r
- String url = config.getPnfRegVesUrl();\r
- return sender.postRequest(url, requestBody);\r
- }\r
-\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\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 (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(deviceDataEntity.geteNodeBName());\r
- eventHeader.setSourceName(deviceDataEntity.geteNodeBName());\r
- eventHeader.setReportingEntityId(deviceDataEntity.getDeviceId());\r
- eventHeader.setSourceId(deviceDataEntity.getDeviceId());\r
- }\r
-\r
- eventHeader.setStartEpochMicrosec(deviceDataEntity.getStartEpochMicrosec());\r
- eventHeader.setVersion(config.getEventVersion());\r
- eventHeader.setNfNamingCode("");\r
- eventHeader.setNfcNamingCode("");\r
- eventHeader.setNfVendorName(config.getVendorName());\r
- eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
- hbEvent.setCommonEventHeader(eventHeader);\r
-\r
- HeartbeatFields heartbeatFields = new HeartbeatFields();\r
- heartbeatFields.setHeartbeatFieldsVersion("3.0");\r
- heartbeatFields.setHeartbeatInterval(heartBeatPeriod * 60);\r
- hbEvent.setHeartbeatFields(heartbeatFields);\r
-\r
- return hbEvent;\r
- }\r
-}\r
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : tr-069-adapter
+ * =================================================================================================
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.
+ * =================================================================================================
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
+ * may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ===============LICENSE_END=======================================================================
+ */
+package org.commscope.tr069adapter.vesagent.controller;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+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;
+import org.springframework.stereotype.Component;
+
+@Component
+public class HeartBeatMessageHandler {
+
+ private static final Logger logger = LoggerFactory.getLogger(HeartBeatMessageHandler.class);
+
+ @Autowired
+ VesAgentServiceHelper vesAgentServiceHelper;
+
+ @Autowired
+ VesConfiguration config;
+
+ @Autowired
+ HttpRequestSender sender;
+
+ public VESNotificationResponse sendHeartBeatEvent(DeviceDataEntity deviceDataEntity,
+ int heartBeatPeriod) throws Exception {
+ Event event = convertNotificationToVESEvent(deviceDataEntity, heartBeatPeriod);
+
+ EventMessage evMsg = new EventMessage();
+ evMsg.setEvent(event);
+
+ ObjectMapper mapper = new ObjectMapper();
+
+ String requestBody = mapper.writeValueAsString(evMsg);
+ if (requestBody.isEmpty()) {
+ logger.debug("VES Event body is empty");
+ }
+
+ String url = config.getPnfRegVesUrl();
+ return sender.postRequest(url, requestBody);
+ }
+
+ 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<DeviceDataEntity> 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<ParameterDTO> 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<ParameterDTO> 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" + 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 (deviceDataEntity.geteNodeBName() == null) {
+ eventHeader.setReportingEntityName(deviceDataEntity.getDeviceId());
+ eventHeader.setReportingEntityId(deviceDataEntity.getDeviceId());
+ eventHeader.setSourceId(deviceDataEntity.getDeviceId());
+ eventHeader.setSourceName(deviceDataEntity.getDeviceId());
+ } else {
+ eventHeader.setReportingEntityName(deviceDataEntity.geteNodeBName());
+ eventHeader.setSourceName(deviceDataEntity.geteNodeBName());
+ eventHeader.setReportingEntityId(deviceDataEntity.getDeviceId());
+ eventHeader.setSourceId(deviceDataEntity.getDeviceId());
+ }
+
+ eventHeader.setStartEpochMicrosec(deviceDataEntity.getStartEpochMicrosec());
+ eventHeader.setVersion(config.getEventVersion());
+ eventHeader.setNfNamingCode("");
+ eventHeader.setNfcNamingCode("");
+ eventHeader.setNfVendorName(config.getVendorName());
+ eventHeader.setVesEventListenerVersion(config.getVesVersion());
+ hbEvent.setCommonEventHeader(eventHeader);
+
+ HeartbeatFields heartbeatFields = new HeartbeatFields();
+ heartbeatFields.setHeartbeatFieldsVersion("3.0");
+ heartbeatFields.setHeartbeatInterval(heartBeatPeriod * 60);
+ hbEvent.setHeartbeatFields(heartbeatFields);
+
+ return hbEvent;
+ }
+}