Initial source code
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / controller / PnfRegMappingHandler.java
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/PnfRegMappingHandler.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/controller/PnfRegMappingHandler.java
new file mode 100644 (file)
index 0000000..d449d0b
--- /dev/null
@@ -0,0 +1,231 @@
+/*\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
+\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 java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+\r
+import org.commscope.tr069adapter.acs.common.DeviceInform;\r
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\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.fault.Parser;\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.PnfRegEventAdditionalFeilds;\r
+import org.commscope.tr069adapter.vesagent.model.PnfRegEventFields;\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 PnfRegMappingHandler {\r
+  private static final Logger logger = LoggerFactory.getLogger(PnfRegMappingHandler.class);\r
+  public static final String SSH_USERNAME = "netconf";\r
+  public static final String SSH_PSSWORD = "netconf";\r
+\r
+  @Autowired\r
+  VesConfiguration config;\r
+\r
+  @Autowired\r
+  HttpRequestSender sender;\r
+\r
+  public VESNotificationResponse handlePnfRegNotification(VESNotification vesNoti)\r
+      throws JsonProcessingException {\r
+    Event event = convertNotificationToVESEvent(vesNoti.getDevnotification(),\r
+        vesNoti.getNetconfDetails(), vesNoti.geteNodeBName());\r
+    if (null != event) {\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
+    } else {\r
+      return new VESNotificationResponse(-1,\r
+          "unable to prepare ves event due to insufficient data");\r
+    }\r
+  }\r
+\r
+  public VESNotificationResponse handlePnfRegNotificationOnRestart(VESNotification vesNoti)\r
+      throws JsonProcessingException {\r
+    Event event = convertNotificationToVESEventOnRestart(vesNoti.getNetconfDetails());\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
+  Event convertNotificationToVESEvent(DeviceInform notification,\r
+      NetConfServerDetails netconfServerDetails, String eNodeBName) {\r
+    logger.debug("Converting Notification to VES pnfevent started");\r
+    Parser parser = new Parser();\r
+\r
+\r
+    Event regEvent = new Event();\r
+    CommonEventHeader eventHeader = new CommonEventHeader();\r
+\r
+    eventHeader.setDomain("pnfRegistration");\r
+    eventHeader.setEventId(\r
+        "PnfReg" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis());\r
+    eventHeader.setEventName("pnfReg_" + notification.getDeviceDetails().getProductClass() + "-"\r
+        + config.getVendorName());\r
+    eventHeader.setEventType(config.getPnfRegEventType());\r
+    eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\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
+    } else {\r
+      eventHeader.setReportingEntityName(eNodeBName);\r
+      eventHeader.setSourceName(eNodeBName);\r
+\r
+      eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());\r
+      eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());\r
+    }\r
+\r
+    eventHeader.setStartEpochMicrosec(System.currentTimeMillis());\r
+    eventHeader.setVersion(config.getEventVersion());\r
+    eventHeader.setNfNamingCode("");\r
+    eventHeader.setNfcNamingCode("");\r
+    eventHeader.setNfVendorName(config.getVendorName());\r
+    eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
+    regEvent.setCommonEventHeader(eventHeader);\r
+\r
+    PnfRegEventFields pnfRegistrationFields =\r
+        parser.parseNotificationParams(notification.getParameters());\r
+    populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields);\r
+    pnfRegistrationFields.setModelNumber(notification.getDeviceDetails().getProductClass());\r
+\r
+    regEvent.setPnfRegistrationFields(pnfRegistrationFields);\r
+    logger.debug("Converting Notification to VES pnfevent completed");\r
+    return regEvent;\r
+  }\r
+\r
+  Event convertNotificationToVESEventOnRestart(NetConfServerDetails netconfServerDetails) {\r
+    logger.debug("Converting Notification to VES pnfevent started");\r
+\r
+    Event regEvent = new Event();\r
+    CommonEventHeader eventHeader = new CommonEventHeader();\r
+\r
+    if (null == netconfServerDetails) {\r
+      logger.error("netconf server details as received as null {}", netconfServerDetails);\r
+      return null;\r
+    }\r
+    eventHeader.setDomain("pnfRegistration");\r
+    eventHeader\r
+        .setEventId("PnfReg" + netconfServerDetails.getDeviceId() + System.currentTimeMillis());\r
+    eventHeader.setEventName(\r
+        "pnfReg_" + netconfServerDetails.getDeviceId() + "-" + config.getVendorName());\r
+    eventHeader.setEventType(config.getPnfRegEventType());\r
+    eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
+\r
+    eventHeader.setPriority("High");\r
+    eventHeader.setSequence(0);\r
+\r
+    if (netconfServerDetails.getEnodeBName() == null) {\r
+      eventHeader.setReportingEntityName(netconfServerDetails.getDeviceId());\r
+      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());\r
+      eventHeader.setSourceId(netconfServerDetails.getDeviceId());\r
+      eventHeader.setSourceName(netconfServerDetails.getDeviceId());\r
+    } else {\r
+      eventHeader.setReportingEntityName(netconfServerDetails.getEnodeBName());\r
+      eventHeader.setSourceName(netconfServerDetails.getEnodeBName());\r
+\r
+      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());\r
+      eventHeader.setSourceId(netconfServerDetails.getDeviceId());\r
+    }\r
+\r
+    eventHeader.setStartEpochMicrosec(System.currentTimeMillis());\r
+    eventHeader.setVersion(config.getEventVersion());\r
+    eventHeader.setNfNamingCode("");\r
+    eventHeader.setNfcNamingCode("");\r
+    eventHeader.setNfVendorName(config.getVendorName());\r
+    eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
+    regEvent.setCommonEventHeader(eventHeader);\r
+    PnfRegEventFields pnfRegistrationFields = new PnfRegEventFields();\r
+    regEvent.setPnfRegistrationFields(\r
+        populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields));\r
+    logger.debug("Converting Notification to VES pnfevent completed");\r
+    return regEvent;\r
+  }\r
+\r
+  private PnfRegEventFields populatePnfRegFeilds(NetConfServerDetails netconfServerDetails,\r
+      PnfRegEventFields pnfRegistrationFields) {\r
+\r
+    pnfRegistrationFields.setSerialNumber(netconfServerDetails.getDeviceId());\r
+    pnfRegistrationFields.setPnfRegistrationFieldsVersion(config.getPnfFeildVersion());\r
+    pnfRegistrationFields.setMacAddress(netconfServerDetails.getDeviceId());\r
+    pnfRegistrationFields.setVendorName(config.getVendorName());\r
+    PnfRegEventAdditionalFeilds additionalFields = new PnfRegEventAdditionalFeilds();\r
+\r
+    pnfRegistrationFields.setOamV4IpAddress(netconfServerDetails.getListenAddress());\r
+    // TODO: since not supporting 1pv6 we are configuring empty value\r
+    pnfRegistrationFields.setOamV6IpAddress("");\r
+\r
+    pnfRegistrationFields.setManufactureDate("");\r
+    pnfRegistrationFields.setUnitType(config.getUnitType());\r
+    pnfRegistrationFields.setUnitFamily(config.getUnitFamily());\r
+    pnfRegistrationFields.setLastServiceDate(new SimpleDateFormat("ddMMyyyy").format(new Date()));\r
+    additionalFields.setOamPort(netconfServerDetails.getListenPort());\r
+    additionalFields.setProtocol("SSH");\r
+    additionalFields.setUsername(SSH_USERNAME);\r
+    additionalFields.setPassword(SSH_PSSWORD);\r
+    additionalFields.setReconnectOnChangedSchema(Boolean.FALSE.toString());\r
+    additionalFields.setSleepfactor("1.5");\r
+    additionalFields.setTcpOnly(Boolean.FALSE.toString());\r
+    additionalFields.setConnectionTimeout("20000");\r
+    additionalFields.setMaxConnectionAttempts("100");\r
+    additionalFields.setBetweenAttemptsTimeout("2000");\r
+    additionalFields.setKeepaliveDelay("120");\r
+\r
+    pnfRegistrationFields.setAdditionalFields(additionalFields);\r
+\r
+    return pnfRegistrationFields;\r
+\r
+  }\r
+\r
+}\r