2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.entity;
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;
56 * Event service, writing all events into the database into the appropriate index.
60 public class HtDatabaseEventsService implements DataProvider {
61 private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseEventsService.class);
63 private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();;
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;
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();
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);
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);
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);
123 public void writeConnectionLog(ConnectionlogEntity event) {
124 this.connectionlogRW.write(event, event.getId());
128 public void writeEventLog(EventlogEntity event) {
129 this.eventlogRW.write(event, event.getId());
134 public void writeFaultLog(FaultlogEntity fault) {
135 this.eventRWFaultLog.write(fault, fault.getId());
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);
146 LOG.debug("Write to currentFaults: {}", fault.toString());
147 this.eventRWFaultCurrent.updateOrInsert(fault, id);
150 LOG.debug("Ingnore for currentFaults: {}", fault.toString());
155 public int clearFaultsCurrentOfNode(String nodeName) {
156 return this.eventRWFaultCurrent
157 .remove(Arrays.asList(new FilterBuilder().setProperty("node-id").setFiltervalue(nodeName).build()));
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()));
168 public List<String> getAllNodesWithCurrentAlarms() {
169 return this.eventRWFaultCurrent.getAllNodes();
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));
182 public void writeGuiCutThroughData(Guicutthrough gcData, String nodeId) {
183 this.guicutthroughRW.write(gcData, nodeId);
187 public int clearGuiCutThroughEntriesOfNode(String nodeName) {
188 this.guicutthroughRW.remove(nodeName);
193 public boolean updateNetworkConnectionDeviceType(NetworkElementConnectionEntity networkElementConnectionEntitiy,
195 return this.networkelementConnectionRW.updateOrInsert(networkElementConnectionEntitiy, nodeId) != null;
199 public boolean updateNetworkConnection22(NetworkElementConnectionEntity ne, String nodeId) {
200 return this.networkelementConnectionRW.updateOrInsert(ne, nodeId) != null;
204 public void removeNetworkConnection(String nodeId) {
205 this.networkelementConnectionRW.remove(nodeId);
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))
215 if (this.controllerId != null) {
217 new FilterBuilder().setProperty(SqlDBMapper.ODLID_DBCOL).setFiltervalue(this.controllerId).build());
221 removed += this.eventlogRW.remove(filter);
222 removed += this.eventRWFaultLog.remove(filter);
227 public long getNumberOfOldObjects(Date olderAreOutdated) {
228 List<Filter> filter = Arrays.asList(FaultEntityManager.getOlderOrEqualFilter(olderAreOutdated));
230 return this.eventRWFaultLog.count(filter, this.controllerId);
231 } catch (SQLException e) {
232 LOG.warn("problem counting faults older than {}: ", olderAreOutdated, e);
238 public List<NetworkElementConnectionEntity> getNetworkElementConnections() {
239 return this.networkelementConnectionRW.readAll(NetworkElementConnectionEntity.class);
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) {
250 this.pm15mRW.write(pmData);
253 this.pm24hRW.write(pmData);
257 LOG.debug("Unknown granularity {}", granularityPeriod);
265 public HtDatabaseClient getRawClient() {