-/*\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.core.JsonProcessingException;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-\r
-import java.text.SimpleDateFormat;\r
-import java.util.ArrayList;\r
-import java.util.Date;\r
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.commscope.tr069adapter.acs.common.DeviceInform;\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.exception.InvalidFaultOperationException;\r
-import org.commscope.tr069adapter.vesagent.fault.AlarmFrameWorkSeverityEnum;\r
-import org.commscope.tr069adapter.vesagent.fault.ExpeditedEvent;\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.FaultFields;\r
-import org.commscope.tr069adapter.vesagent.util.EventUtil;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.http.HttpStatus;\r
-import org.springframework.stereotype.Component;\r
-\r
-@Component\r
-public class AlarmMappingHandler {\r
-\r
- private static final Logger logger = LoggerFactory.getLogger(AlarmMappingHandler.class);\r
-\r
- @Autowired\r
- VesConfiguration config;\r
-\r
- @Autowired\r
- HttpRequestSender sender;\r
-\r
- public VESNotificationResponse handleAlarmNotification(VESNotification notification)\r
- throws InvalidFaultOperationException, JsonProcessingException {\r
- List<Event> events = convertNotificationToVESEvent(notification.getDevnotification(),\r
- notification.geteNodeBName());\r
-\r
- for (Iterator<Event> iterator = events.iterator(); iterator.hasNext();) {\r
- Event event = iterator.next();\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("Alarm Event body is empty");\r
- }\r
-\r
- String url = config.getFaultVesUrl();\r
- VESNotificationResponse response = sender.postRequest(url, requestBody);\r
- if (response.getStatusCode() == HttpStatus.INTERNAL_SERVER_ERROR.value()) {\r
- logger.debug(\r
- "Error received while posting alarms; skiiping this alarm in the fault event and continue for remaining");\r
- }\r
- }\r
-\r
- return new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "No Alarms in the request");\r
- }\r
-\r
- List<Event> convertNotificationToVESEvent(DeviceInform notification, String eNodeBName)\r
- throws InvalidFaultOperationException {\r
- logger.debug("Converting Notification to VES fault event started");\r
- ArrayList<Event> mlist = new ArrayList<>();\r
-\r
- List<ParameterDTO> parameter = notification.getParameters();\r
- Map<String, ExpeditedEvent> hmAlarmParameters = null;\r
- Parser parser = new Parser();\r
- hmAlarmParameters = parser.parseFaultParams(parameter);\r
-\r
- for (Iterator<String> iterator = hmAlarmParameters.keySet().iterator(); iterator.hasNext();) {\r
- ExpeditedEvent event = hmAlarmParameters.get(iterator.next());\r
-\r
- if (event.getAdditionalInformation() != null\r
- && event.getAdditionalInformation().contains("-")) {\r
- String eNBName = event.getAdditionalInformation().split("-")[0].trim();\r
- eNodeBName = eNBName;\r
- }\r
-\r
- Event faultEvent = new Event();\r
- CommonEventHeader eventHeader = new CommonEventHeader();\r
- eventHeader.setDomain("fault");\r
- eventHeader.setEventId(event.getAlarmIdentifier());\r
- eventHeader.setEventName("Fault_" + notification.getDeviceDetails().getProductClass() + "-"\r
- + config.getVendorName() + "_" + event.getProbableCause().replace(" ", ""));\r
- eventHeader.setEventType(config.getFaultEventType());\r
- eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
- eventHeader.setTimeZoneOffset(extractTimeZoneOffSet(event.getAdditionalInformation()));\r
- eventHeader.setPriority(extractPriority(event.getPerceivedSeverity()));\r
-\r
- EventUtil.populateEnodeBName(eventHeader, notification, eNodeBName);\r
-\r
- eventHeader.setSequence(1);\r
- eventHeader.setStartEpochMicrosec(System.currentTimeMillis()*1000);\r
- eventHeader.setVersion(config.getEventVersion());\r
- if (eNodeBName != null && eNodeBName.length() > 3)\r
- eventHeader.setNfNamingCode(eNodeBName.substring(0, 3));\r
- else\r
- eventHeader.setNfNamingCode("");\r
- eventHeader.setNfcNamingCode("");\r
- eventHeader.setNfVendorName(config.getVendorName());\r
- eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
- faultEvent.setCommonEventHeader(eventHeader);\r
-\r
- FaultFields faultfields = new FaultFields();\r
- faultfields.setAlarmCondition(event.getProbableCause().replace(" ", ""));\r
-\r
- faultfields.setEventSeverity(event.getPerceivedSeverity().toString());\r
- if (event.getPerceivedSeverity() == AlarmFrameWorkSeverityEnum.CLEAR\r
- || event.getPerceivedSeverity() == AlarmFrameWorkSeverityEnum.CLEARED) {\r
- faultfields.setEventSeverity("NORMAL");\r
- }\r
-\r
- faultfields.setEventSourceType(config.getFaultEventSourcePrefix() + "_"\r
- + notification.getDeviceDetails().getProductClass());\r
- faultfields.setFaultFieldsVersion(config.getFaultFeildVersion());\r
- faultfields.setSpecificProblem(event.getSpecificProblem());\r
- faultfields.setVfStatus("Active");\r
- faultfields.setEventCategory(event.getEventType());\r
- faultfields.setAlarmInterfaceA(event.getManagedObjectInstance());\r
- Map<String, String> addition = new HashMap<>();\r
- addition.put("eventTime",\r
- new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.s'Z'").format(new Date()));\r
- addition.put("AdditionalText", event.getAdditionalText());\r
- addition.put("AdditionalInformation", event.getAdditionalInformation());\r
- faultfields.setAlarmAdditionalInformation(addition);\r
-\r
- faultEvent.setFaultFields(faultfields);\r
- mlist.add(faultEvent);\r
-\r
- }\r
- logger.debug("Converting Notification to VES fault event completed :{}", mlist);\r
- return mlist;\r
- }\r
-\r
- private String extractTimeZoneOffSet(String additionalInformation) {\r
- String[] additionalInfoArray = null;\r
- String[] timeZoneOffset = null;\r
- String timeOffset = "UTC+00.00";\r
-\r
- if (additionalInformation != null && additionalInformation.contains("|")) {\r
- additionalInfoArray = additionalInformation.split("\\|");\r
-\r
- int index = -1;\r
- for (int i = 0; i < additionalInfoArray.length; i++) {\r
- if (additionalInfoArray[i].contains("TZD=")) {\r
- index = i;\r
- }\r
- }\r
- if (index >= 0) {\r
- timeZoneOffset = additionalInfoArray[index].split("=");\r
- timeOffset = timeZoneOffset[timeZoneOffset.length - 1];\r
- }\r
- } else if (additionalInformation != null && additionalInformation.contains("TZD=")) {\r
- timeZoneOffset = additionalInformation.split("=");\r
- timeOffset = timeZoneOffset[timeZoneOffset.length - 1];\r
- }\r
-\r
- return timeOffset;\r
- }\r
-\r
- private String extractPriority(AlarmFrameWorkSeverityEnum severity) {\r
- String priority;\r
- if (severity == AlarmFrameWorkSeverityEnum.CRITICAL\r
- || severity == AlarmFrameWorkSeverityEnum.MAJOR) {\r
- priority = "High";\r
- } else if (severity == AlarmFrameWorkSeverityEnum.MINOR) {\r
- priority = "Medium";\r
- } else {\r
- priority = "Low";\r
- }\r
-\r
- return priority;\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.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.commscope.tr069adapter.acs.common.DeviceInform;
+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.exception.InvalidFaultOperationException;
+import org.commscope.tr069adapter.vesagent.fault.AlarmFrameWorkSeverityEnum;
+import org.commscope.tr069adapter.vesagent.fault.ExpeditedEvent;
+import org.commscope.tr069adapter.vesagent.fault.Parser;
+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.FaultFields;
+import org.commscope.tr069adapter.vesagent.util.EventUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AlarmMappingHandler {
+
+ private static final Logger logger = LoggerFactory.getLogger(AlarmMappingHandler.class);
+
+ @Autowired
+ VesConfiguration config;
+
+ @Autowired
+ HttpRequestSender sender;
+
+ public VESNotificationResponse handleAlarmNotification(VESNotification notification)
+ throws InvalidFaultOperationException, JsonProcessingException {
+ List<Event> events = convertNotificationToVESEvent(notification.getDevnotification(),
+ notification.geteNodeBName());
+
+ for (Iterator<Event> iterator = events.iterator(); iterator.hasNext();) {
+ Event event = iterator.next();
+ EventMessage evMsg = new EventMessage();
+ evMsg.setEvent(event);
+
+ ObjectMapper mapper = new ObjectMapper();
+
+ String requestBody = mapper.writeValueAsString(evMsg);
+ if (requestBody.isEmpty()) {
+ logger.debug("Alarm Event body is empty");
+ }
+
+ String url = config.getFaultVesUrl();
+ VESNotificationResponse response = sender.postRequest(url, requestBody);
+ if (response.getStatusCode() == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
+ logger.debug(
+ "Error received while posting alarms; skiiping this alarm in the fault event and continue for remaining");
+ }
+ }
+
+ return new VESNotificationResponse(HttpStatus.ACCEPTED.value(), "No Alarms in the request");
+ }
+
+ List<Event> convertNotificationToVESEvent(DeviceInform notification, String eNodeBName)
+ throws InvalidFaultOperationException {
+ logger.debug("Converting Notification to VES fault event started");
+ ArrayList<Event> mlist = new ArrayList<>();
+
+ List<ParameterDTO> parameter = notification.getParameters();
+ Map<String, ExpeditedEvent> hmAlarmParameters = null;
+ Parser parser = new Parser();
+ hmAlarmParameters = parser.parseFaultParams(parameter);
+
+ for (Iterator<String> iterator = hmAlarmParameters.keySet().iterator(); iterator.hasNext();) {
+ ExpeditedEvent event = hmAlarmParameters.get(iterator.next());
+
+ if (event.getAdditionalInformation() != null
+ && event.getAdditionalInformation().contains("-")) {
+ String eNBName = event.getAdditionalInformation().split("-")[0].trim();
+ eNodeBName = eNBName;
+ }
+
+ Event faultEvent = new Event();
+ CommonEventHeader eventHeader = new CommonEventHeader();
+ eventHeader.setDomain("fault");
+ eventHeader.setEventId(event.getAlarmIdentifier());
+ eventHeader.setEventName("Fault_" + notification.getDeviceDetails().getProductClass() + "-"
+ + config.getVendorName() + "_" + event.getProbableCause().replace(" ", ""));
+ eventHeader.setEventType(config.getFaultEventType());
+ eventHeader.setLastEpochMicrosec(System.currentTimeMillis());
+ eventHeader.setTimeZoneOffset(extractTimeZoneOffSet(event.getAdditionalInformation()));
+ eventHeader.setPriority(extractPriority(event.getPerceivedSeverity()));
+
+ EventUtil.populateEnodeBName(eventHeader, notification, eNodeBName);
+
+ eventHeader.setSequence(1);
+ eventHeader.setStartEpochMicrosec(System.currentTimeMillis() * 1000);
+ eventHeader.setVersion(config.getEventVersion());
+ if (eNodeBName != null && eNodeBName.length() > 3)
+ eventHeader.setNfNamingCode(eNodeBName.substring(0, 3));
+ else
+ eventHeader.setNfNamingCode("");
+ eventHeader.setNfcNamingCode("");
+ eventHeader.setNfVendorName(config.getVendorName());
+ eventHeader.setVesEventListenerVersion(config.getVesVersion());
+ faultEvent.setCommonEventHeader(eventHeader);
+
+ FaultFields faultfields = new FaultFields();
+ faultfields.setAlarmCondition(event.getProbableCause().replace(" ", ""));
+
+ faultfields.setEventSeverity(event.getPerceivedSeverity().toString());
+ if (event.getPerceivedSeverity() == AlarmFrameWorkSeverityEnum.CLEAR
+ || event.getPerceivedSeverity() == AlarmFrameWorkSeverityEnum.CLEARED) {
+ faultfields.setEventSeverity("NORMAL");
+ }
+
+ faultfields.setEventSourceType(config.getFaultEventSourcePrefix() + "_"
+ + notification.getDeviceDetails().getProductClass());
+ faultfields.setFaultFieldsVersion(config.getFaultFeildVersion());
+ faultfields.setSpecificProblem(event.getSpecificProblem());
+ faultfields.setVfStatus("Active");
+ faultfields.setEventCategory(event.getEventType());
+ faultfields.setAlarmInterfaceA(event.getManagedObjectInstance());
+ Map<String, String> addition = new HashMap<>();
+ addition.put("eventTime",
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.s'Z'").format(new Date()));
+ addition.put("AdditionalText", event.getAdditionalText());
+ addition.put("AdditionalInformation", event.getAdditionalInformation());
+ faultfields.setAlarmAdditionalInformation(addition);
+
+ faultEvent.setFaultFields(faultfields);
+ mlist.add(faultEvent);
+
+ }
+ logger.debug("Converting Notification to VES fault event completed :{}", mlist);
+ return mlist;
+ }
+
+ private String extractTimeZoneOffSet(String additionalInformation) {
+ String[] additionalInfoArray = null;
+ String[] timeZoneOffset = null;
+ String timeOffset = "UTC+00.00";
+
+ if (additionalInformation != null && additionalInformation.contains("|")) {
+ additionalInfoArray = additionalInformation.split("\\|");
+
+ int index = -1;
+ for (int i = 0; i < additionalInfoArray.length; i++) {
+ if (additionalInfoArray[i].contains("TZD=")) {
+ index = i;
+ }
+ }
+ if (index >= 0) {
+ timeZoneOffset = additionalInfoArray[index].split("=");
+ timeOffset = timeZoneOffset[timeZoneOffset.length - 1];
+ }
+ } else if (additionalInformation != null && additionalInformation.contains("TZD=")) {
+ timeZoneOffset = additionalInformation.split("=");
+ timeOffset = timeZoneOffset[timeZoneOffset.length - 1];
+ }
+
+ return timeOffset;
+ }
+
+ private String extractPriority(AlarmFrameWorkSeverityEnum severity) {
+ String priority;
+ if (severity == AlarmFrameWorkSeverityEnum.CRITICAL
+ || severity == AlarmFrameWorkSeverityEnum.MAJOR) {
+ priority = "High";
+ } else if (severity == AlarmFrameWorkSeverityEnum.MINOR) {
+ priority = "Medium";
+ } else {
+ priority = "Low";
+ }
+
+ return priority;
+ }
+}