1 /*******************************************************************************
2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt
4 * =================================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6 * =================================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
16 * ============LICENSE_END==========================================================================
17 ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service;
20 import java.util.ArrayList;
21 import java.util.Date;
22 import java.util.List;
23 import javax.annotation.Nonnull;
24 import org.elasticsearch.index.query.QueryBuilder;
25 import org.onap.ccsdk.features.sdnr.wt.devicemanager.archiveservice.ArchiveCleanProvider;
26 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDataBaseReaderAndWriter;
27 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
28 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
29 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.IndexClientBuilder;
30 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12Equipment;
31 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
32 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsEventBase;
33 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsFaultCurrent;
34 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsFaultLog;
35 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.EsEquipment;
36 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.EsToplevelEquipment;
37 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.ExtendedEquipment;
38 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.MwtNotificationBase;
39 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
44 * Event service, writing all events into the database into the appropriate index.
48 public class HtDatabaseEventsService implements ArchiveCleanProvider {
49 private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseEventsService.class);
51 private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
53 ///** Filename in the resources with maven initialized version information */
54 //private static final String RESOURCENAME = "version.properties"; // could also be a constant
55 ///** Index name to be used */
56 private static final String INDEX = "sdnevents";
57 private static final String MAPPING = "/elasticsearch/index/sdnevents/sdneventsMapping.json";
59 private HtDatabaseClientAbstract client;
60 private HtDataBaseReaderAndWriter<EsEventBase> eventRWEventLog;
61 private HtDataBaseReaderAndWriter<EsFaultCurrent> eventRWFaultCurrent;
62 private HtDataBaseReaderAndWriter<EsFaultLog> eventRWFaultLog;
63 private HtDataBaseReaderAndWriter<EsEquipment> eventRWEquipment;
64 private HtDataBaseReaderAndWriter<EsToplevelEquipment> eventRWToplevelEquipment;
67 // --- Construct and initialize
69 public HtDatabaseEventsService(HtDatabaseNode database) {
71 LOG.info("Create {} start", HtDatabaseEventsService.class);
74 // Create control structure
75 IndexClientBuilder clientBuilder = IndexClientBuilder.getBuilder(INDEX).setMappingSettingJsonFileName(MAPPING);
76 client = clientBuilder.create(database);
77 clientBuilder.close();
79 eventRWEventLog = new HtDataBaseReaderAndWriter<>(client, EsEventBase.ESDATATYPENAME, EsEventBase.class);
80 eventRWFaultLog = new HtDataBaseReaderAndWriter<>(client, EsFaultLog.ESDATATYPENAME, EsFaultLog.class);
81 eventRWFaultCurrent = new HtDataBaseReaderAndWriter<>(client, EsFaultCurrent.ESDATATYPENAME, EsFaultCurrent.class);
82 eventRWToplevelEquipment = new HtDataBaseReaderAndWriter<>(client, EsToplevelEquipment.ESDATATYPENAME, EsToplevelEquipment.class);
83 eventRWEquipment = new HtDataBaseReaderAndWriter<>(client, EsEquipment.ESDATATYPENAME, EsEquipment.class);
86 } catch (Exception e) {
87 LOG.error("Can not start database client. Exception: {}", e.getMessage());
89 LOG.info("Create {} finished. DB Service {} started.", HtDatabaseEventsService.class, client != null ? "sucessfully" : "not" );
94 public void writeEventLog(MwtNotificationBase event) {
96 LOG.debug("No DB, can not write: {}",event.toString());
100 LOG.debug("Write event: {}",event.toString());
101 EsEventBase eventBase = new EsEventBase();
102 eventBase.setProblem(event);
103 eventRWEventLog.doWrite(eventBase);
106 public void writeFaultLog(ProblemNotificationXml fault) {
107 if (client == null) {
108 LOG.debug("No DB, can not write: {}",fault.toString());
112 LOG.debug("Write fault to faultlog: {}",fault.toString());
113 EsFaultLog eventProblem = new EsFaultLog();
114 eventProblem.setProblem(fault);
115 eventRWFaultLog.doWrite(eventProblem);
118 public void updateFaultCurrent(ProblemNotificationXml fault) {
119 if (client == null) {
120 LOG.debug("No DB, can not write: {}",fault.toString());
124 if (!fault.isNotManagedAsCurrentProblem()) {
125 EsFaultCurrent eventProblem = new EsFaultCurrent();
126 eventProblem.setProblem(fault);
128 if (eventProblem.isNoAlarmIndication()) {
129 LOG.debug("Remove from currentFaults: {}",fault.toString());
130 eventRWFaultCurrent.doRemove(eventProblem);
132 LOG.debug("Write to currentFaults: {}",fault.toString());
133 eventRWFaultCurrent.doWrite(eventProblem);
136 LOG.debug("Ingnore for currentFaults: {}",fault.toString());
141 * Remove all entries for one node
142 * @param nodeName contains the mountpointname
143 * @return number of deleted entries
145 public int clearFaultsCurrentOfNode(String nodeName) {
146 if (client == null) {
147 LOG.debug("No DB, can not delete for node: {}", nodeName);
150 LOG.debug("Remove from currentFaults all faults for node: {}", nodeName);
151 return eventRWFaultCurrent.doRemoveByQuery(EsFaultCurrent.getQueryForOneNode(nodeName));
155 * Remove all entries for one node
156 * @param nodeName contains the mountpointname
157 * @param objectId of element to be deleted
158 * @return number of deleted entries
160 public int clearFaultsCurrentOfNodeWithObjectId(String nodeName, String objectId) {
161 if (client == null) {
162 LOG.debug("No DB, can not delete for node: {}", nodeName);
165 LOG.debug("Remove from currentFaults all faults for node/objectId: {}/{}", nodeName, objectId);
166 return eventRWFaultCurrent.doRemoveByQuery(EsFaultCurrent.getQueryForOneNodeAndObjectId(nodeName, objectId));
171 * Deliver list with all mountpoint/node-names in the database.
172 * @return List of all mountpoint/node-names the had active alarms.
174 public @Nonnull List<String> getAllNodesWithCurrentAlarms() {
175 if (client == null) {
176 LOG.debug("No DB, can not delete for all nodes");
177 return new ArrayList<>();
179 LOG.debug("Remove from currentFaults faults for all node");
180 List<String> nodeNames = new ArrayList<>();
182 for (EsFaultCurrent fault : eventRWFaultCurrent.doReadAll()) {
183 String nodeName = fault.getProblem().getNodeName();
184 if (!nodeNames.contains(nodeName)) {
185 //this.clearFaultsCurrentOfNode(nodeName); -> Function shifted
186 nodeNames.add(nodeName);
194 * Write inventory to DB
195 * @param equipment all equipment of network element
197 public void writeInventory(ONFCoreNetworkElement12Equipment equipment) {
198 if (client == null) {
199 LOG.debug("No DB, can not write for mountpoint: {}",equipment.getMountpoint());
203 LOG.debug("Write inventory to database for mountpoint: {}",equipment.getMountpoint());
205 EsToplevelEquipment esToplevelEquipment = new EsToplevelEquipment();
206 esToplevelEquipment.set(equipment);
207 eventRWToplevelEquipment.doWrite(esToplevelEquipment);
209 List<ExtendedEquipment> equipmentList = equipment.getEquipmentList();
210 EsEquipment esEquipment;
211 for (ExtendedEquipment equipment1 : equipmentList) {
212 esEquipment = new EsEquipment();
213 esEquipment.set(equipment.getMountpoint(), equipment1);
214 eventRWEquipment.doWrite(esEquipment);
219 public int doIndexClean(Date olderAreOutdated) {
221 String netconfTimeStamp = NETCONFTIME_CONVERTER.getTimeStampAsNetconfString(olderAreOutdated);
224 QueryBuilder queryEventBase = EsEventBase.getQueryForTimeStamp(netconfTimeStamp);
225 removed += eventRWEventLog.doRemoveByQuery(queryEventBase);
227 QueryBuilder queryFaultLog = EsFaultLog.getQueryForTimeStamp(netconfTimeStamp);
228 removed += eventRWFaultLog.doRemoveByQuery(queryFaultLog);
233 public int getNumberOfOldObjects(Date olderAreOutdated) {
235 String netconfTimeStamp = NETCONFTIME_CONVERTER.getTimeStampAsNetconfString(olderAreOutdated);
236 int numberOfElements = 0;
238 QueryBuilder queryEventBase = EsEventBase.getQueryForTimeStamp(netconfTimeStamp);
239 numberOfElements += eventRWEventLog.doReadAll(queryEventBase).size();
241 QueryBuilder queryFaultLog = EsFaultLog.getQueryForTimeStamp(netconfTimeStamp);
242 numberOfElements += eventRWFaultLog.doReadAll(queryFaultLog).size();
244 return numberOfElements;