2  * ============LICENSE_START=======================================================
 
   3  * ONAP : ccsdk features
 
   4  * ================================================================================
 
   5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
 
   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
 
  14  *     http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.entity;
 
  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.ConnectionLogStatus;
 
  44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
 
  45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
 
  46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
 
  47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
 
  48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
 
  49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GranularityPeriodType;
 
  50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
 
  51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
 
  52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
 
  53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
 
  54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInputBuilder;
 
  55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Filter;
 
  56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder;
 
  57 import org.slf4j.Logger;
 
  58 import org.slf4j.LoggerFactory;
 
  61  * Event service, writing all events into the database into the appropriate index.
 
  65 public class HtDatabaseEventsService implements DataProvider {
 
  66     private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseEventsService.class);
 
  68     private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();;
 
  70     protected final SqlDBClient dbClient;
 
  71     protected final String controllerId;
 
  72     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data> connectionlogRW;
 
  73     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data> eventlogRW;
 
  74     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data> eventRWFaultLog;
 
  75     protected final SqlDBReaderWriterFault<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.Data> eventRWFaultCurrent;
 
  76     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data> equipmentRW;
 
  77     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;
 
  78     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;
 
  79     protected final SqlDBReaderWriterPm<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data> pm15mRW;
 
  80     protected final SqlDBReaderWriterPm<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data> pm24hRW;
 
  81     protected final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.cmlog.list.output.Data> eventRWCMLog;
 
  82     protected final String controllerTableName;
 
  84     public HtDatabaseEventsService(SqlDBConfig config) {
 
  85         LOG.debug("Creating dummy instance of org.mariadb.jdbc.Driver");
 
  86         @SuppressWarnings("unused")
 
  87         Driver dvr = new org.mariadb.jdbc.Driver();
 
  89         this.controllerId = config.getControllerId();
 
  90         this.controllerTableName = SqlDBMapper.TABLENAME_CONTROLLER + config.getDbSuffix();
 
  91         this.dbClient = new SqlDBClient(config.getUrl(), config.getUsername(), config.getPassword());
 
  92         this.connectionlogRW = new SqlDBReaderWriter<>(dbClient, Entity.Connectionlog, config.getDbSuffix(),
 
  93                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data.class,
 
  95         this.eventlogRW = new SqlDBReaderWriter<>(dbClient, Entity.Eventlog, config.getDbSuffix(),
 
  96                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data.class,
 
  98         this.eventRWFaultLog = new SqlDBReaderWriter<>(dbClient, Entity.Faultlog, config.getDbSuffix(),
 
  99                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data.class,
 
 101         this.eventRWFaultCurrent = new SqlDBReaderWriterFault<>(dbClient, Entity.Faultcurrent, config.getDbSuffix(),
 
 102                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.Data.class,
 
 104         this.equipmentRW = new SqlDBReaderWriter<>(dbClient, Entity.Inventoryequipment, config.getDbSuffix(),
 
 105                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data.class,
 
 107         this.guicutthroughRW = new SqlDBReaderWriter<>(dbClient,
 
 108                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity.Guicutthrough,
 
 109                 config.getDbSuffix(),
 
 110                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data.class,
 
 111                 this.controllerId).setWriteInterface(Guicutthrough.class);
 
 112         this.networkelementConnectionRW = new SqlDBReaderWriter<>(dbClient, Entity.NetworkelementConnection,
 
 113                 config.getDbSuffix(),
 
 114                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data.class,
 
 116         this.networkelementConnectionRW.setWriteInterface(NetworkElementConnectionEntity.class);
 
 118         this.pm15mRW = new SqlDBReaderWriterPm<>(dbClient, Entity.Historicalperformance15min, config.getDbSuffix(),
 
 119                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data.class,
 
 122         this.pm24hRW = new SqlDBReaderWriterPm<>(dbClient, Entity.Historicalperformance24h, config.getDbSuffix(),
 
 123                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data.class,
 
 126         this.eventRWCMLog = new SqlDBReaderWriter<>(dbClient, Entity.Cmlog, config.getDbSuffix(),
 
 127                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.cmlog.list.output.Data.class,
 
 133     public void writeConnectionLog(ConnectionlogEntity event) {
 
 134         this.connectionlogRW.write(event, null);
 
 138     public void writeEventLog(EventlogEntity event) {
 
 139         this.eventlogRW.write(event, null);
 
 144     public void writeFaultLog(FaultlogEntity fault) {
 
 145         this.eventRWFaultLog.write(fault, null);
 
 149     public void writeCMLog(CmlogEntity cm) {
 
 150         this.eventRWCMLog.write(cm, null);
 
 154     public void updateFaultCurrent(FaultcurrentEntity fault) {
 
 155         final String id = DatabaseIdGenerator.getFaultcurrentId(fault);
 
 156         if (FaultEntityManager.isManagedAsCurrentProblem(fault)) {
 
 157             if (FaultEntityManager.isNoAlarmIndication(fault)) {
 
 158                 LOG.debug("Remove from currentFaults: {}", fault.toString());
 
 159                 this.eventRWFaultCurrent.remove(id);
 
 161                 LOG.debug("Write to currentFaults: {}", fault.toString());
 
 162                 this.eventRWFaultCurrent.updateOrInsert(fault, id);
 
 165             LOG.debug("Ingnore for currentFaults: {}", fault.toString());
 
 170     public int clearFaultsCurrentOfNode(String nodeName) {
 
 171         return this.eventRWFaultCurrent
 
 172                 .remove(Arrays.asList(new FilterBuilder().setProperty("node-id").setFiltervalue(nodeName).build()));
 
 176     public int clearFaultsCurrentOfNodeWithObjectId(String nodeName, String objectId) {
 
 177         return this.eventRWFaultCurrent
 
 178                 .remove(Arrays.asList(new FilterBuilder().setProperty("node-id").setFiltervalue(nodeName).build(),
 
 179                         new FilterBuilder().setProperty("object-id").setFiltervalue(objectId).build()));
 
 183     public List<String> getAllNodesWithCurrentAlarms() {
 
 184         return this.eventRWFaultCurrent.getAllNodes();
 
 188     public void writeInventory(String nodeId, List<Inventory> list) {
 
 189         for (Inventory internalEquipment : list) {
 
 190             this.equipmentRW.updateOrInsert(internalEquipment,
 
 191                     internalEquipment.getId() != null ? internalEquipment.getId()
 
 192                             : DatabaseIdGenerator.getInventoryId(internalEquipment));
 
 197     public void writeGuiCutThroughData(Guicutthrough gcData, String nodeId) {
 
 198         this.guicutthroughRW.write(gcData, nodeId);
 
 202     public int clearGuiCutThroughEntriesOfNode(String nodeName) {
 
 203         return this.guicutthroughRW.remove(nodeName);
 
 207     public boolean updateNetworkConnectionDeviceType(NetworkElementConnectionEntity networkElementConnectionEntitiy,
 
 209         return this.networkelementConnectionRW.updateOrInsert(networkElementConnectionEntitiy, nodeId) != null;
 
 213     public boolean updateNetworkConnection22(NetworkElementConnectionEntity ne, String nodeId) {
 
 214         return this.networkelementConnectionRW.updateOrInsert(ne, nodeId) != null;
 
 218      * Remove network element connection if not required
 
 219      * This function is called onDisconnect event for netconf node
 
 222     public void removeNetworkConnection(String nodeId) {
 
 223         NetworkElementConnectionEntity e = this.networkelementConnectionRW.read(nodeId);
 
 224         Boolean isRequired = e!=null? e.getIsRequired():null;
 
 225         if (e != null && isRequired  != null) {
 
 227                 LOG.debug("updating connection status for {} of required ne to disconnected", nodeId);
 
 228                 this.networkelementConnectionRW.update(new UpdateNetworkElementConnectionInputBuilder()
 
 229                         .setStatus(ConnectionLogStatus.Disconnected).build(), nodeId);
 
 231                 LOG.debug("remove networkelement-connection for {} entry because of non-required", nodeId);
 
 232                 this.networkelementConnectionRW.remove(nodeId);
 
 235             LOG.warn("Unable to update connection-status. dbentry for {} not found in networkelement-connection",
 
 243     public int doIndexClean(Date olderAreOutdated) {
 
 244         String netconfTimeStamp = NETCONFTIME_CONVERTER.getTimeStampAsNetconfString(olderAreOutdated);
 
 245         List<Filter> filter = new ArrayList<>();
 
 246         filter.add(new FilterBuilder().setProperty("timestamp").setFiltervalue(String.format("<%s", netconfTimeStamp))
 
 248         if (this.controllerId != null) {
 
 250                     new FilterBuilder().setProperty(SqlDBMapper.ODLID_DBCOL).setFiltervalue(this.controllerId).build());
 
 254         removed += this.eventlogRW.remove(filter);
 
 255         removed += this.eventRWFaultLog.remove(filter);
 
 256         removed += this.eventRWCMLog.remove(filter);
 
 261     public long getNumberOfOldObjects(Date olderAreOutdated) {
 
 262         List<Filter> filter = Arrays.asList(FaultEntityManager.getOlderOrEqualFilter(olderAreOutdated));
 
 264             return this.eventRWFaultLog.count(filter, this.controllerId);
 
 265         } catch (SQLException e) {
 
 266             LOG.warn("problem counting faults older than {}: ", olderAreOutdated, e);
 
 272     public List<NetworkElementConnectionEntity> getNetworkElementConnections() {
 
 273         return this.networkelementConnectionRW.readAll(NetworkElementConnectionEntity.class);
 
 277     public void doWritePerformanceData(List<PmdataEntity> list) {
 
 278         list.stream().forEach((pmData) -> {
 
 279             GranularityPeriodType granularityPeriod =
 
 280                     pmData.getGranularityPeriod() != null ? pmData.getGranularityPeriod()
 
 281                             : GranularityPeriodType.Unknown;
 
 282             switch (granularityPeriod) {
 
 284                     this.pm15mRW.write(pmData);
 
 287                     this.pm24hRW.write(pmData);
 
 291                     LOG.debug("Unknown granularity {}", granularityPeriod);
 
 299     public HtDatabaseClient getRawClient() {