2 * ============LICENSE_START========================================================================
\r
3 * ONAP : tr-069-adapter
\r
4 * =================================================================================================
\r
5 * Copyright (C) 2020 CommScope Inc Intellectual Property.
\r
6 * =================================================================================================
\r
7 * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
\r
8 * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
\r
9 * may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
\r
14 * either express or implied. See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
16 * ===============LICENSE_END=======================================================================
\r
19 package org.commscope.tr069adapter.vesagent.controller;
\r
21 import com.fasterxml.jackson.core.JsonProcessingException;
\r
22 import com.fasterxml.jackson.databind.ObjectMapper;
\r
24 import java.text.SimpleDateFormat;
\r
25 import java.util.Date;
\r
27 import org.commscope.tr069adapter.acs.common.DeviceInform;
\r
28 import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;
\r
29 import org.commscope.tr069adapter.mapper.model.VESNotification;
\r
30 import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;
\r
31 import org.commscope.tr069adapter.vesagent.VesConfiguration;
\r
32 import org.commscope.tr069adapter.vesagent.fault.Parser;
\r
33 import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;
\r
34 import org.commscope.tr069adapter.vesagent.model.CommonEventHeader;
\r
35 import org.commscope.tr069adapter.vesagent.model.Event;
\r
36 import org.commscope.tr069adapter.vesagent.model.EventMessage;
\r
37 import org.commscope.tr069adapter.vesagent.model.PnfRegEventAdditionalFeilds;
\r
38 import org.commscope.tr069adapter.vesagent.model.PnfRegEventFields;
\r
39 import org.slf4j.Logger;
\r
40 import org.slf4j.LoggerFactory;
\r
41 import org.springframework.beans.factory.annotation.Autowired;
\r
42 import org.springframework.stereotype.Component;
\r
45 public class PnfRegMappingHandler {
\r
46 private static final Logger logger = LoggerFactory.getLogger(PnfRegMappingHandler.class);
\r
47 public static final String SSH_USERNAME = "netconf";
\r
48 public static final String SSH_PSSWORD = "netconf";
\r
51 VesConfiguration config;
\r
54 HttpRequestSender sender;
\r
56 public VESNotificationResponse handlePnfRegNotification(VESNotification vesNoti)
\r
57 throws JsonProcessingException {
\r
58 Event event = convertNotificationToVESEvent(vesNoti.getDevnotification(),
\r
59 vesNoti.getNetconfDetails(), vesNoti.geteNodeBName());
\r
60 if (null != event) {
\r
61 EventMessage evMsg = new EventMessage();
\r
62 evMsg.setEvent(event);
\r
64 ObjectMapper mapper = new ObjectMapper();
\r
66 String requestBody = mapper.writeValueAsString(evMsg);
\r
67 if (requestBody.isEmpty()) {
\r
68 logger.debug("VES Event body is empty");
\r
71 String url = config.getPnfRegVesUrl();
\r
72 return sender.postRequest(url, requestBody);
\r
74 return new VESNotificationResponse(-1,
\r
75 "unable to prepare ves event due to insufficient data");
\r
79 public VESNotificationResponse handlePnfRegNotificationOnRestart(VESNotification vesNoti)
\r
80 throws JsonProcessingException {
\r
81 Event event = convertNotificationToVESEventOnRestart(vesNoti.getNetconfDetails());
\r
83 EventMessage evMsg = new EventMessage();
\r
84 evMsg.setEvent(event);
\r
86 ObjectMapper mapper = new ObjectMapper();
\r
88 String requestBody = mapper.writeValueAsString(evMsg);
\r
89 if (requestBody.isEmpty()) {
\r
90 logger.debug("VES Event body is empty");
\r
93 String url = config.getPnfRegVesUrl();
\r
94 return sender.postRequest(url, requestBody);
\r
97 Event convertNotificationToVESEvent(DeviceInform notification,
\r
98 NetConfServerDetails netconfServerDetails, String eNodeBName) {
\r
99 logger.debug("Converting Notification to VES pnfevent started");
\r
100 Parser parser = new Parser();
\r
103 Event regEvent = new Event();
\r
104 CommonEventHeader eventHeader = new CommonEventHeader();
\r
106 eventHeader.setDomain("pnfRegistration");
\r
107 eventHeader.setEventId(
\r
108 "PnfReg" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis());
\r
109 eventHeader.setEventName("pnfReg_" + notification.getDeviceDetails().getProductClass() + "-"
\r
110 + config.getVendorName());
\r
111 eventHeader.setEventType(config.getPnfRegEventType());
\r
112 eventHeader.setLastEpochMicrosec(System.currentTimeMillis());
\r
114 eventHeader.setPriority("High");
\r
115 eventHeader.setSequence(0);
\r
117 if (eNodeBName == null) {
\r
118 eventHeader.setReportingEntityName(notification.getDeviceDetails().getDeviceId());
\r
119 eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());
\r
120 eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());
\r
121 eventHeader.setSourceName(notification.getDeviceDetails().getDeviceId());
\r
123 eventHeader.setReportingEntityName(eNodeBName);
\r
124 eventHeader.setSourceName(eNodeBName);
\r
126 eventHeader.setReportingEntityId(notification.getDeviceDetails().getDeviceId());
\r
127 eventHeader.setSourceId(notification.getDeviceDetails().getDeviceId());
\r
130 eventHeader.setStartEpochMicrosec(System.currentTimeMillis());
\r
131 eventHeader.setVersion(config.getEventVersion());
\r
132 eventHeader.setNfNamingCode("");
\r
133 eventHeader.setNfcNamingCode("");
\r
134 eventHeader.setNfVendorName(config.getVendorName());
\r
135 eventHeader.setVesEventListenerVersion(config.getVesVersion());
\r
136 regEvent.setCommonEventHeader(eventHeader);
\r
138 PnfRegEventFields pnfRegistrationFields =
\r
139 parser.parseNotificationParams(notification.getParameters());
\r
140 populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields);
\r
141 pnfRegistrationFields.setModelNumber(notification.getDeviceDetails().getProductClass());
\r
143 regEvent.setPnfRegistrationFields(pnfRegistrationFields);
\r
144 logger.debug("Converting Notification to VES pnfevent completed");
\r
148 Event convertNotificationToVESEventOnRestart(NetConfServerDetails netconfServerDetails) {
\r
149 logger.debug("Converting Notification to VES pnfevent started");
\r
151 Event regEvent = new Event();
\r
152 CommonEventHeader eventHeader = new CommonEventHeader();
\r
154 if (null == netconfServerDetails) {
\r
155 logger.error("netconf server details as received as null {}", netconfServerDetails);
\r
158 eventHeader.setDomain("pnfRegistration");
\r
160 .setEventId("PnfReg" + netconfServerDetails.getDeviceId() + System.currentTimeMillis());
\r
161 eventHeader.setEventName(
\r
162 "pnfReg_" + netconfServerDetails.getDeviceId() + "-" + config.getVendorName());
\r
163 eventHeader.setEventType(config.getPnfRegEventType());
\r
164 eventHeader.setLastEpochMicrosec(System.currentTimeMillis());
\r
166 eventHeader.setPriority("High");
\r
167 eventHeader.setSequence(0);
\r
169 if (netconfServerDetails.getEnodeBName() == null) {
\r
170 eventHeader.setReportingEntityName(netconfServerDetails.getDeviceId());
\r
171 eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());
\r
172 eventHeader.setSourceId(netconfServerDetails.getDeviceId());
\r
173 eventHeader.setSourceName(netconfServerDetails.getDeviceId());
\r
175 eventHeader.setReportingEntityName(netconfServerDetails.getEnodeBName());
\r
176 eventHeader.setSourceName(netconfServerDetails.getEnodeBName());
\r
178 eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());
\r
179 eventHeader.setSourceId(netconfServerDetails.getDeviceId());
\r
182 eventHeader.setStartEpochMicrosec(System.currentTimeMillis());
\r
183 eventHeader.setVersion(config.getEventVersion());
\r
184 eventHeader.setNfNamingCode("");
\r
185 eventHeader.setNfcNamingCode("");
\r
186 eventHeader.setNfVendorName(config.getVendorName());
\r
187 eventHeader.setVesEventListenerVersion(config.getVesVersion());
\r
188 regEvent.setCommonEventHeader(eventHeader);
\r
189 PnfRegEventFields pnfRegistrationFields = new PnfRegEventFields();
\r
190 regEvent.setPnfRegistrationFields(
\r
191 populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields));
\r
192 logger.debug("Converting Notification to VES pnfevent completed");
\r
196 private PnfRegEventFields populatePnfRegFeilds(NetConfServerDetails netconfServerDetails,
\r
197 PnfRegEventFields pnfRegistrationFields) {
\r
199 pnfRegistrationFields.setSerialNumber(netconfServerDetails.getDeviceId());
\r
200 pnfRegistrationFields.setPnfRegistrationFieldsVersion(config.getPnfFeildVersion());
\r
201 pnfRegistrationFields.setMacAddress(netconfServerDetails.getDeviceId());
\r
202 pnfRegistrationFields.setVendorName(config.getVendorName());
\r
203 PnfRegEventAdditionalFeilds additionalFields = new PnfRegEventAdditionalFeilds();
\r
205 pnfRegistrationFields.setOamV4IpAddress(netconfServerDetails.getListenAddress());
\r
206 // TODO: since not supporting 1pv6 we are configuring empty value
\r
207 pnfRegistrationFields.setOamV6IpAddress("");
\r
209 pnfRegistrationFields.setManufactureDate("");
\r
210 pnfRegistrationFields.setUnitType(config.getUnitType());
\r
211 pnfRegistrationFields.setUnitFamily(config.getUnitFamily());
\r
212 pnfRegistrationFields.setLastServiceDate(new SimpleDateFormat("ddMMyyyy").format(new Date()));
\r
213 additionalFields.setOamPort(netconfServerDetails.getListenPort());
\r
214 additionalFields.setProtocol("SSH");
\r
215 additionalFields.setUsername(SSH_USERNAME);
\r
216 additionalFields.setPassword(SSH_PSSWORD);
\r
217 additionalFields.setReconnectOnChangedSchema(Boolean.FALSE.toString());
\r
218 additionalFields.setSleepfactor("1.5");
\r
219 additionalFields.setTcpOnly(Boolean.FALSE.toString());
\r
220 additionalFields.setConnectionTimeout("20000");
\r
221 additionalFields.setMaxConnectionAttempts("100");
\r
222 additionalFields.setBetweenAttemptsTimeout("2000");
\r
223 additionalFields.setKeepaliveDelay("120");
\r
225 pnfRegistrationFields.setAdditionalFields(additionalFields);
\r
227 return pnfRegistrationFields;
\r