88aaa583d6cc0bec18008f98ba09bfd60d9ee912
[ccsdk/features.git] / sdnr / wt / data-provider / dblib / src / main / java / org / onap / ccsdk / features / sdnr / wt / dataprovider / database / sqldb / data / entity / HtDatabaseEventsService.java
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
7  * ================================================================================
8  * Update Copyright (C) 2021 Samsung Electronics Intellectual Property. All rights reserved.
9  * ================================================================================
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  * ============LICENSE_END=========================================================
22  *
23  */
24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.entity;
25
26 import java.sql.SQLException;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.Date;
30 import java.util.List;
31 import org.mariadb.jdbc.Driver;
32 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
33 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
34 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBConfig;
35 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper;
36 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriter;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriterFault;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriterPm;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
40 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
41 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GranularityPeriodType;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Filter;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder;
55 import org.slf4j.Logger;
56 import org.slf4j.LoggerFactory;
57
58 /**
59  * Event service, writing all events into the database into the appropriate index.
60  *
61  * @author herbert
62  */
63 public class HtDatabaseEventsService implements DataProvider {
64     private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseEventsService.class);
65
66     private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();;
67
68     protected final SqlDBClient dbClient;
69     protected final String controllerId;
70     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data> connectionlogRW;
71     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data> eventlogRW;
72     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data> eventRWFaultLog;
73     protected final SqlDBReaderWriterFault<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.Data> eventRWFaultCurrent;
74     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data> equipmentRW;
75     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data> guicutthroughRW;
76     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data> networkelementConnectionRW;
77     protected final SqlDBReaderWriterPm<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data> pm15mRW;
78     protected final SqlDBReaderWriterPm<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data> pm24hRW;
79     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.cmlog.list.output.Data> eventRWCMLog;
80     protected final String controllerTableName;
81
82     public HtDatabaseEventsService(SqlDBConfig config) {
83         LOG.debug("Creating dummy instance of org.mariadb.jdbc.Driver");
84         @SuppressWarnings("unused")
85         Driver dvr = new org.mariadb.jdbc.Driver();
86         dvr = null;
87         this.controllerId = config.getControllerId();
88         this.controllerTableName = SqlDBMapper.TABLENAME_CONTROLLER + config.getDbSuffix();
89         this.dbClient = new SqlDBClient(config.getUrl(), config.getUsername(), config.getPassword());
90         this.connectionlogRW = new SqlDBReaderWriter<>(dbClient, Entity.Connectionlog, config.getDbSuffix(),
91                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data.class,
92                 this.dbClient.getDatabaseName(), this.controllerId);
93         this.eventlogRW = new SqlDBReaderWriter<>(dbClient, Entity.Eventlog, config.getDbSuffix(),
94                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data.class,
95                 this.dbClient.getDatabaseName(), this.controllerId);
96         this.eventRWFaultLog = new SqlDBReaderWriter<>(dbClient, Entity.Faultlog, config.getDbSuffix(),
97                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data.class,
98                 this.dbClient.getDatabaseName(), this.controllerId);
99         this.eventRWFaultCurrent = new SqlDBReaderWriterFault<>(dbClient, Entity.Faultcurrent, config.getDbSuffix(),
100                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.Data.class,
101                 this.dbClient.getDatabaseName(), this.controllerId);
102         this.equipmentRW = new SqlDBReaderWriter<>(dbClient, Entity.Inventoryequipment, config.getDbSuffix(),
103                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data.class,
104                 this.dbClient.getDatabaseName(), this.controllerId);
105         this.guicutthroughRW = new SqlDBReaderWriter<>(dbClient,
106                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity.Guicutthrough,
107                 config.getDbSuffix(),
108                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data.class,
109                 this.dbClient.getDatabaseName(), this.controllerId).setWriteInterface(Guicutthrough.class);
110         this.networkelementConnectionRW = new SqlDBReaderWriter<>(dbClient, Entity.NetworkelementConnection,
111                 config.getDbSuffix(),
112                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data.class,
113                 this.dbClient.getDatabaseName(), this.controllerId);
114         this.networkelementConnectionRW.setWriteInterface(NetworkElementConnectionEntity.class);
115
116         this.pm15mRW = new SqlDBReaderWriterPm<>(dbClient, Entity.Historicalperformance15min, config.getDbSuffix(),
117                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data.class,
118                 this.dbClient.getDatabaseName(), this.controllerId);
119
120         this.pm24hRW = new SqlDBReaderWriterPm<>(dbClient, Entity.Historicalperformance24h, config.getDbSuffix(),
121                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data.class,
122                 this.dbClient.getDatabaseName(), this.controllerId);
123
124         this.eventRWCMLog = new SqlDBReaderWriter<>(dbClient, Entity.Cmlog, config.getDbSuffix(),
125                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.cmlog.list.output.Data.class,
126                 this.dbClient.getDatabaseName(), this.controllerId);
127
128     }
129
130     @Override
131     public void writeConnectionLog(ConnectionlogEntity event) {
132         this.connectionlogRW.write(event, event.getId());
133     }
134
135     @Override
136     public void writeEventLog(EventlogEntity event) {
137         this.eventlogRW.write(event, event.getId());
138
139     }
140
141     @Override
142     public void writeFaultLog(FaultlogEntity fault) {
143         this.eventRWFaultLog.write(fault, fault.getId());
144     }
145
146     @Override
147     public void writeCMLog(CmlogEntity cm) {
148         this.eventRWCMLog.write(cm, cm.getId());
149     }
150
151     @Override
152     public void updateFaultCurrent(FaultcurrentEntity fault) {
153         final String id = fault.getId() != null ? fault.getId() : DatabaseIdGenerator.getFaultcurrentId(fault);
154         if (FaultEntityManager.isManagedAsCurrentProblem(fault)) {
155             if (FaultEntityManager.isNoAlarmIndication(fault)) {
156                 LOG.debug("Remove from currentFaults: {}", fault.toString());
157                 this.eventRWFaultCurrent.remove(id);
158             } else {
159                 LOG.debug("Write to currentFaults: {}", fault.toString());
160                 this.eventRWFaultCurrent.updateOrInsert(fault, id);
161             }
162         } else {
163             LOG.debug("Ingnore for currentFaults: {}", fault.toString());
164         }
165     }
166
167     @Override
168     public int clearFaultsCurrentOfNode(String nodeName) {
169         return this.eventRWFaultCurrent
170                 .remove(Arrays.asList(new FilterBuilder().setProperty("node-id").setFiltervalue(nodeName).build()));
171     }
172
173     @Override
174     public int clearFaultsCurrentOfNodeWithObjectId(String nodeName, String objectId) {
175         return this.eventRWFaultCurrent
176                 .remove(Arrays.asList(new FilterBuilder().setProperty("node-id").setFiltervalue(nodeName).build(),
177                         new FilterBuilder().setProperty("object-id").setFiltervalue(objectId).build()));
178     }
179
180     @Override
181     public List<String> getAllNodesWithCurrentAlarms() {
182         return this.eventRWFaultCurrent.getAllNodes();
183     }
184
185     @Override
186     public void writeInventory(String nodeId, List<Inventory> list) {
187         for (Inventory internalEquipment : list) {
188             this.equipmentRW.updateOrInsert(internalEquipment,
189                     internalEquipment.getId() != null ? internalEquipment.getId()
190                             : DatabaseIdGenerator.getInventoryId(internalEquipment));
191         }
192     }
193
194     @Override
195     public void writeGuiCutThroughData(Guicutthrough gcData, String nodeId) {
196         this.guicutthroughRW.write(gcData, nodeId);
197     }
198
199     @Override
200     public int clearGuiCutThroughEntriesOfNode(String nodeName) {
201         this.guicutthroughRW.remove(nodeName);
202         return 0;
203     }
204
205     @Override
206     public boolean updateNetworkConnectionDeviceType(NetworkElementConnectionEntity networkElementConnectionEntitiy,
207             String nodeId) {
208         return this.networkelementConnectionRW.updateOrInsert(networkElementConnectionEntitiy, nodeId) != null;
209     }
210
211     @Override
212     public boolean updateNetworkConnection22(NetworkElementConnectionEntity ne, String nodeId) {
213         return this.networkelementConnectionRW.updateOrInsert(ne, nodeId) != null;
214     }
215
216     @Override
217     public void removeNetworkConnection(String nodeId) {
218         this.networkelementConnectionRW.remove(nodeId);
219
220     }
221
222     @Override
223     public int doIndexClean(Date olderAreOutdated) {
224         String netconfTimeStamp = NETCONFTIME_CONVERTER.getTimeStampAsNetconfString(olderAreOutdated);
225         List<Filter> filter = new ArrayList<>();
226         filter.add(new FilterBuilder().setProperty("timestamp").setFiltervalue(String.format("<%s", netconfTimeStamp))
227                 .build());
228         if (this.controllerId != null) {
229             filter.add(
230                     new FilterBuilder().setProperty(SqlDBMapper.ODLID_DBCOL).setFiltervalue(this.controllerId).build());
231         }
232         int removed = 0;
233
234         removed += this.eventlogRW.remove(filter);
235         removed += this.eventRWFaultLog.remove(filter);
236         removed += this.eventRWCMLog.remove(filter);
237         return removed;
238     }
239
240     @Override
241     public long getNumberOfOldObjects(Date olderAreOutdated) {
242         List<Filter> filter = Arrays.asList(FaultEntityManager.getOlderOrEqualFilter(olderAreOutdated));
243         try {
244             return this.eventRWFaultLog.count(filter, this.controllerId);
245         } catch (SQLException e) {
246             LOG.warn("problem counting faults older than {}: ", olderAreOutdated, e);
247         }
248         return 0;
249     }
250
251     @Override
252     public List<NetworkElementConnectionEntity> getNetworkElementConnections() {
253         return this.networkelementConnectionRW.readAll(NetworkElementConnectionEntity.class);
254     }
255
256     @Override
257     public void doWritePerformanceData(List<PmdataEntity> list) {
258         list.stream().forEach((pmData) -> {
259             GranularityPeriodType granularityPeriod =
260                     pmData.getGranularityPeriod() != null ? pmData.getGranularityPeriod()
261                             : GranularityPeriodType.Unknown;
262             switch (granularityPeriod) {
263                 case Period15Min:
264                     this.pm15mRW.write(pmData);
265                     break;
266                 case Period24Hours:
267                     this.pm24hRW.write(pmData);
268                     break;
269                 case Unknown:
270                 default:
271                     LOG.debug("Unknown granularity {}", granularityPeriod);
272                     break;
273             }
274         });
275
276     }
277
278     @Override
279     public HtDatabaseClient getRawClient() {
280         return null;
281     }
282
283 }