--- /dev/null
+/*\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