90b07999c6b2fe130d621633757918fc20591f53
[ccsdk/features.git] /
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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
15  * the License.
16  * ============LICENSE_END==========================================================================
17  ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service;
19
20 import java.util.ArrayList;
21 import java.util.List;
22 import javax.annotation.Nonnull;
23 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDataBaseReaderAndWriter;
24 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
25 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
26 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.IndexClientBuilder;
27 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12Equipment;
28 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsEventBase;
29 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsFaultCurrent;
30 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.EsFaultLog;
31 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.EsEquipment;
32 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.EsToplevelEquipment;
33 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.ExtendedEquipment;
34 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
35 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.MwtNotificationBase;
36 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
37 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
38 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42 /**
43  * Event service, writing all events into the database into the appropriate index.
44  *
45  * @author herbert
46  */
47 public class HtDatabaseEventsService {
48     private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseEventsService.class);
49
50     ///** Filename in the resources with maven initialized version information  */
51     //private static final String RESOURCENAME = "version.properties"; // could also be a constant
52     ///** Index name to be used */
53     private static final String INDEX = "sdnevents";
54     private static final String MAPPING = "/elasticsearch/index/sdnevents/sdneventsMapping.json";
55
56     private HtDatabaseClientAbstract client;
57     private HtDataBaseReaderAndWriter<EsEventBase> eventRWEventLog;
58     private HtDataBaseReaderAndWriter<EsFaultCurrent> eventRWFaultCurrent;
59     private HtDataBaseReaderAndWriter<EsFaultLog> eventRWFaultLog;
60     private HtDataBaseReaderAndWriter<EsEquipment> eventRWEquipment;
61     private HtDataBaseReaderAndWriter<EsToplevelEquipment> eventRWToplevelEquipment;
62
63
64     // --- Construct and initialize
65
66     public HtDatabaseEventsService(HtDatabaseNode database) {
67
68         LOG.info("Create {} start", HtDatabaseEventsService.class);
69
70         try {
71             // Create control structure
72             IndexClientBuilder clientBuilder = IndexClientBuilder.getBuilder(INDEX).setMappingSettingJsonFileName(MAPPING);
73             client = clientBuilder.create(database);
74             clientBuilder.close();
75
76             eventRWEventLog = new HtDataBaseReaderAndWriter<>(client, EsEventBase.ESDATATYPENAME, EsEventBase.class);
77             eventRWFaultLog = new HtDataBaseReaderAndWriter<>(client, EsFaultLog.ESDATATYPENAME, EsFaultLog.class);
78             eventRWFaultCurrent = new HtDataBaseReaderAndWriter<>(client, EsFaultCurrent.ESDATATYPENAME, EsFaultCurrent.class);
79             eventRWToplevelEquipment = new HtDataBaseReaderAndWriter<>(client, EsToplevelEquipment.ESDATATYPENAME, EsToplevelEquipment.class);
80             eventRWEquipment = new HtDataBaseReaderAndWriter<>(client, EsEquipment.ESDATATYPENAME, EsEquipment.class);
81
82
83         } catch (Exception e) {
84             LOG.error("Can not start database client. Exception: {}", e.getMessage());
85         }
86         LOG.info("Create {} finished. DB Service {} started.", HtDatabaseEventsService.class,  client != null ? "sucessfully" : "not" );
87     }
88
89     // --- Function
90
91     public void writeEventLog(ObjectCreationNotificationXml event) {
92         writeEventGeneric(event);
93     }
94
95     public void writeEventLog(ObjectDeletionNotificationXml event) {
96         writeEventGeneric(event);
97     }
98
99     public void writeEventLog(AttributeValueChangedNotificationXml event) {
100         writeEventGeneric(event);
101     }
102
103     private void writeEventGeneric(MwtNotificationBase event) {
104         if (client == null) {
105             LOG.debug("No DB, can not write: {}",event.toString());
106             return;
107         }
108
109         LOG.debug("Write event: {}",event.toString());
110         EsEventBase eventBase = new EsEventBase();
111         eventBase.setProblem(event);
112         eventRWEventLog.doWrite(eventBase);
113     }
114
115     public void writeFaultLog(ProblemNotificationXml fault) {
116         if (client == null) {
117             LOG.debug("No DB, can not write: {}",fault.toString());
118             return;
119         }
120
121         LOG.debug("Write fault to faultlog: {}",fault.toString());
122         EsFaultLog eventProblem = new EsFaultLog();
123         eventProblem.setProblem(fault);
124         eventRWFaultLog.doWrite(eventProblem);
125     }
126
127     public void updateFaultCurrent(ProblemNotificationXml fault) {
128         if (client == null) {
129             LOG.debug("No DB, can not write: {}",fault.toString());
130             return;
131         }
132
133         if (!fault.isNotManagedAsCurrentProblem()) {
134             EsFaultCurrent eventProblem = new EsFaultCurrent();
135             eventProblem.setProblem(fault);
136
137             if (eventProblem.isNoAlarmIndication()) {
138                 LOG.debug("Remove from currentFaults: {}",fault.toString());
139                 eventRWFaultCurrent.doRemove(eventProblem);
140             } else {
141                 LOG.debug("Write to currentFaults: {}",fault.toString());
142                 eventRWFaultCurrent.doWrite(eventProblem);
143             }
144         } else {
145             LOG.debug("Ingnore for currentFaults: {}",fault.toString());
146         }
147     }
148
149     /**
150      * Remove all entries for one node
151      * @param nodeName contains the mountpointname
152      * @return number of deleted entries
153      */
154     public int clearFaultsCurrentOfNode(String nodeName) {
155         if (client == null) {
156             LOG.debug("No DB, can not delete for node: {}", nodeName);
157             return -1;
158         }
159         LOG.debug("Remove from currentFaults all faults for node: {}", nodeName);
160         return eventRWFaultCurrent.doRemoveByQuery(EsFaultCurrent.getQueryForOneNode(nodeName));
161     }
162
163     /**
164      * Remove all entries for one node
165      * @param nodeName contains the mountpointname
166      * @param objectId of element to be deleted
167      * @return number of deleted entries
168      */
169     public int clearFaultsCurrentOfNodeWithObjectId(String nodeName, String objectId) {
170         if (client == null) {
171             LOG.debug("No DB, can not delete for node: {}", nodeName);
172             return -1;
173         }
174         LOG.debug("Remove from currentFaults all faults for node/objectId: {}/{}", nodeName, objectId);
175         return eventRWFaultCurrent.doRemoveByQuery(EsFaultCurrent.getQueryForOneNodeAndObjectId(nodeName, objectId));
176
177     }
178
179     /**
180      * Deliver list with all mountpoint/node-names in the database.
181      * @return List of all mountpoint/node-names the had active alarms.
182      */
183     public @Nonnull List<String> getAllNodesWithCurrentAlarms() {
184         if (client == null) {
185             LOG.debug("No DB, can not delete for all nodes");
186             return new ArrayList<>();
187         }
188         LOG.debug("Remove from currentFaults faults for all node");
189         List<String> nodeNames = new ArrayList<>();
190
191         for (EsFaultCurrent fault : eventRWFaultCurrent.doReadAll()) {
192             String nodeName = fault.getProblem().getNodeName();
193             if (!nodeNames.contains(nodeName)) {
194                 //this.clearFaultsCurrentOfNode(nodeName); -> Function shifted
195                 nodeNames.add(nodeName);
196             }
197         }
198         return nodeNames;
199     }
200
201
202     /**
203      * Write inventory to DB
204      * @param equipment all equipment of network element
205      */
206     public void writeInventory(ONFCoreNetworkElement12Equipment equipment) {
207         if (client == null) {
208             LOG.debug("No DB, can not write for mountpoint: {}",equipment.getMountpoint());
209             return;
210         }
211
212         LOG.debug("Write inventory to database for mountpoint: {}",equipment.getMountpoint());
213
214         EsToplevelEquipment esToplevelEquipment = new EsToplevelEquipment();
215         esToplevelEquipment.set(equipment);
216         eventRWToplevelEquipment.doWrite(esToplevelEquipment);
217
218         List<ExtendedEquipment> equipmentList = equipment.getEquipmentList();
219         EsEquipment esEquipment;
220         for (ExtendedEquipment equipment1 : equipmentList) {
221             esEquipment = new EsEquipment();
222             esEquipment.set(equipment.getMountpoint(), equipment1);
223             eventRWEquipment.doWrite(esEquipment);
224         }
225     }
226
227
228 }