Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / controller / HeartBeatMessageHandler.java
index 80da0f6..f72a731 100644 (file)
-/*\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;
+  }
+}