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