de687057160a643349f6d66a971f8609f5d3f5f4
[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.data.entity;
23
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.Date;
27 import java.util.List;
28 import javax.annotation.Nonnull;
29 import org.eclipse.jdt.annotation.NonNull;
30 import org.eclipse.jdt.annotation.Nullable;
31 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
32 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.BoolQueryBuilder;
33 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder;
34 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
35 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.RangeQueryBuilder;
36 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.ElasticSearchDataProvider;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.EsDataObjectReaderWriter2;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.ArchiveCleanProvider;
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.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Entity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentEntity;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.InventoryBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.InventoryEntity;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.UpdateNetworkElementConnectionInputBuilder;
62 import org.slf4j.Logger;
63 import org.slf4j.LoggerFactory;
64
65 /**
66  * Event service, writing all events into the database into the appropriate index.
67  *
68  * @author herbert
69  */
70 public class HtDatabaseEventsService implements ArchiveCleanProvider, DataProvider {
71     private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseEventsService.class);
72
73     private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();
74
75     private HtDatabaseClient client;
76     private EsDataObjectReaderWriter2<EventlogEntity> eventRWEventLogDevicemanager;
77     private EsDataObjectReaderWriter2<InventoryEntity> eventRWEquipment;
78     private EsDataObjectReaderWriter2<FaultcurrentEntity> eventRWFaultCurrentDB;
79     private EsDataObjectReaderWriter2<FaultlogEntity> eventRWFaultLogDB;
80     private EsDataObjectReaderWriter2<ConnectionlogEntity> eventRWConnectionLogDB;
81     private final EsDataObjectReaderWriter2<NetworkElementConnectionEntity> networkelementConnectionDB;
82     private final EsDataObjectReaderWriter2<PmdataEntity> pmData15mDB;
83     private final EsDataObjectReaderWriter2<PmdataEntity> pmData24hDB;
84     private final EsDataObjectReaderWriter2<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.PmdataEntity> pmData15mDBv2;
85     private final EsDataObjectReaderWriter2<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.PmdataEntity> pmData24hDBv2;
86
87     @SuppressWarnings("unused")
88     private final ElasticSearchDataProvider dataProvider;
89     // --- Construct and initialize
90
91
92     public HtDatabaseEventsService(HtDatabaseClient client, ElasticSearchDataProvider elasticSearchDataProvider)
93             throws Exception {
94
95         LOG.info("Create {} start", HtDatabaseEventsService.class);
96         this.dataProvider = elasticSearchDataProvider;
97
98         try {
99             // Create control structure
100             this.client = client;
101
102             eventRWEventLogDevicemanager = new EsDataObjectReaderWriter2<>(client, Entity.Eventlog,
103                     EventlogEntity.class, EventlogBuilder.class);
104
105             eventRWEquipment = new EsDataObjectReaderWriter2<>(client, Entity.Inventoryequipment, InventoryEntity.class,
106                     InventoryBuilder.class);
107
108             eventRWFaultCurrentDB = new EsDataObjectReaderWriter2<>(client, Entity.Faultcurrent,
109                     FaultcurrentEntity.class, FaultcurrentBuilder.class);
110
111             eventRWFaultLogDB = new EsDataObjectReaderWriter2<>(client, Entity.Faultlog, FaultlogEntity.class,
112                     FaultlogBuilder.class);
113
114             eventRWConnectionLogDB = new EsDataObjectReaderWriter2<>(client, Entity.Connectionlog,
115                     ConnectionlogEntity.class, ConnectionlogBuilder.class);
116
117             networkelementConnectionDB = new EsDataObjectReaderWriter2<>(client, Entity.NetworkelementConnection,
118                     NetworkElementConnectionEntity.class, NetworkElementConnectionBuilder.class, true)
119                             .setEsIdAttributeName("_id");
120
121             pmData15mDB = new EsDataObjectReaderWriter2<>(client, Entity.Historicalperformance15min, PmdataEntity.class,
122                     PmdataEntityBuilder.class);
123
124             pmData24hDB = new EsDataObjectReaderWriter2<>(client, Entity.Historicalperformance24h, PmdataEntity.class,
125                     PmdataEntityBuilder.class);
126
127             pmData15mDBv2 = new EsDataObjectReaderWriter2<>(client, Entity.Historicalperformance15min,
128                     org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.PmdataEntity.class,
129                     org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.PmdataEntityBuilder.class);
130
131             pmData24hDBv2 = new EsDataObjectReaderWriter2<>(client, Entity.Historicalperformance24h,
132                     org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.PmdataEntity.class,
133                     org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.PmdataEntityBuilder.class);
134
135
136         } catch (Exception e) {
137             LOG.error("Can not start database client. Exception: {}", e);
138             throw new Exception("Can not start database client. Exception: {}", e);
139         }
140         LOG.info("Create {} finished. DB Service {} started.", HtDatabaseEventsService.class,
141                 client != null ? "sucessfully" : "not");
142     }
143
144     // --- Function
145
146     // -- Connection log
147     @Override
148     public void writeConnectionLog(ConnectionlogEntity event) {
149         if (assertIfClientNull(event)) {
150             return;
151         }
152         LOG.debug("Write event: {}", event);
153         eventRWConnectionLogDB.write(event, null);
154
155     }
156
157     // -- Event log
158     @Override
159     public void writeEventLog(EventlogEntity event) {
160         if (assertIfClientNull("No client to write {}", event)) {
161             return;
162         }
163
164         LOG.debug("Write event: {}", event.toString());
165         eventRWEventLogDevicemanager.write(event, null);
166     }
167
168
169     // -- Fault log
170
171     @Override
172     public void writeFaultLog(FaultlogEntity fault) {
173         if (assertIfClientNull(fault)) {
174             return;
175         }
176
177         LOG.debug("Write fault to faultlog: {}", fault.toString());
178         eventRWFaultLogDB.write(fault, null);
179     }
180
181     // -- Fault current
182
183     @Override
184     public void updateFaultCurrent(FaultcurrentEntity fault) {
185         if (assertIfClientNull(fault)) {
186             return;
187         }
188
189         if (FaultEntityManager.isManagedAsCurrentProblem(fault)) {
190             if (FaultEntityManager.isNoAlarmIndication(fault)) {
191                 LOG.debug("Remove from currentFaults: {}", fault.toString());
192                 eventRWFaultCurrentDB.remove(FaultEntityManager.genSpecificEsId(fault));
193             } else {
194                 LOG.debug("Write to currentFaults: {}", fault.toString());
195                 eventRWFaultCurrentDB.write(fault, FaultEntityManager.genSpecificEsId(fault));
196             }
197         } else {
198             LOG.debug("Ingnore for currentFaults: {}", fault.toString());
199         }
200     }
201
202     /**
203      * Remove all entries for one node
204      *
205      * @param nodeName contains the mountpointname
206      * @return number of deleted entries
207      */
208     @Override
209     public int clearFaultsCurrentOfNode(String nodeName) {
210         if (assertIfClientNullForNodeName(nodeName)) {
211             return -1;
212         }
213
214         LOG.debug("Remove from currentFaults all faults for node: {}", nodeName);
215         return eventRWFaultCurrentDB.remove(EsFaultCurrent.getQueryForOneNode(nodeName));
216     }
217
218     /**
219      * Remove all entries for one node
220      *
221      * @param nodeName contains the mountpointname
222      * @param objectId of element to be deleted
223      * @return number of deleted entries
224      */
225     @Override
226     public int clearFaultsCurrentOfNodeWithObjectId(String nodeName, String objectId) {
227         if (assertIfClientNullForNodeName(nodeName)) {
228             return -1;
229         }
230
231         LOG.debug("Remove from currentFaults all faults for node/objectId: {}/{}", nodeName, objectId);
232         return eventRWFaultCurrentDB.remove(EsFaultCurrent.getQueryForOneNodeAndObjectId(nodeName, objectId));
233     }
234
235     /**
236      * Deliver list with all mountpoint/node-names in the database.
237      *
238      * @return List of all mountpoint/node-names the had active alarms.
239      */
240     @Override
241     public @Nonnull List<String> getAllNodesWithCurrentAlarms() {
242         if (assertIfClientNull("No DB, can not delete for all nodes", null)) {
243             return new ArrayList<>();
244         }
245
246         LOG.debug("Remove from currentFaults faults for all node");
247         List<String> nodeNames = new ArrayList<>();
248
249         for (FaultcurrentEntity fault : eventRWFaultCurrentDB.doReadAll().getHits()) {
250             String nodeName = fault.getNodeId();
251             if (!nodeNames.contains(nodeName)) {
252                 // this.clearFaultsCurrentOfNode(nodeName); -> Function shifted
253                 nodeNames.add(nodeName);
254             }
255         }
256         return nodeNames;
257     }
258
259     // -- Inventory and equipment current
260
261     /**
262      * write internal equipment to database
263      *
264      * @param internalEquipment with mandatory fields.
265      */
266     @Override
267     public void writeInventory(Inventory internalEquipment) {
268
269         if (assertIfClientNullForNodeName(internalEquipment.getNodeId())) {
270             return;
271         }
272         if (internalEquipment.getManufacturerIdentifier() == null) {
273             internalEquipment = new InventoryBuilder(internalEquipment).setManufacturerIdentifier("").build();
274         }
275         if (internalEquipment.getDate() == null) {
276             internalEquipment = new InventoryBuilder(internalEquipment).setDate("").build();
277         }
278
279         eventRWEquipment.write(internalEquipment, internalEquipment.getNodeId() + "/" + internalEquipment.getUuid());
280     }
281
282
283     // -- Networkelement
284
285
286     /**
287      * join base with parameters of toJoin (only non null values)
288      *
289      * @param base base object
290      * @param toJoin object with new property values
291      * @return new joined object
292      */
293     @SuppressWarnings("unused")
294     private NetworkElementConnectionEntity joinNe(NetworkElementConnectionEntity base,
295             NetworkElementConnectionEntity toJoin) {
296         if (base == null) {
297             return toJoin;
298         }
299         NetworkElementConnectionBuilder builder = new NetworkElementConnectionBuilder(base);
300         if (toJoin != null) {
301             if (toJoin.isIsRequired() != null) {
302                 builder.setIsRequired(toJoin.isIsRequired());
303             }
304             if (toJoin.getCoreModelCapability() != null) {
305                 builder.setCoreModelCapability(toJoin.getCoreModelCapability());
306             }
307             if (toJoin.getDeviceType() != null) {
308                 builder.setDeviceType(toJoin.getDeviceType());
309             }
310             if (toJoin.getHost() != null) {
311                 builder.setHost(toJoin.getHost());
312             }
313             if (toJoin.getNodeDetails() != null) {
314                 builder.setNodeDetails(toJoin.getNodeDetails());
315             }
316             if (toJoin.getPassword() != null) {
317                 builder.setPassword(toJoin.getPassword());
318             }
319             if (toJoin.getPort() != null) {
320                 builder.setPort(toJoin.getPort());
321             }
322             if (toJoin.getStatus() != null) {
323                 builder.setStatus(toJoin.getStatus());
324             }
325             if (toJoin.getUsername() != null) {
326                 builder.setUsername(toJoin.getUsername());
327             }
328         }
329         return builder.build();
330     }
331
332     /**
333      *
334      * @param networkElementConnectionEntitiy to wirte to DB
335      * @param nodeId Id for this DB element
336      */
337     @Override
338     public boolean updateNetworkConnectionDeviceType(NetworkElementConnectionEntity networkElementConnectionEntitiy,
339             String nodeId) {
340         return this.networkelementConnectionDB.update(networkElementConnectionEntitiy, nodeId) != null;
341         //              NetworkElementConnectionEntity e = this.networkelementConnectionDB.read(nodeId);
342         //              this.networkelementConnectionDB.write(this.joinNe(e, networkElementConnectionEntitiy), nodeId);
343     }
344
345     /**
346      * Update after new mountpoint registration
347      *
348      * @param networkElementConnectionEntitiy data
349      * @param nodeId of device (mountpoint name)
350      */
351     @Override
352     public boolean updateNetworkConnection22(NetworkElementConnectionEntity networkElementConnectionEntitiy,
353             String nodeId) {
354         LOG.info("update networkelement-connection for {} with data {}", nodeId, networkElementConnectionEntitiy);
355         return this.networkelementConnectionDB.updateOrCreate(networkElementConnectionEntitiy, nodeId,
356                 Arrays.asList("is-required", "username", "password")) != null;
357         //              NetworkElementConnectionEntity e = this.networkelementConnectionDB.read(nodeId);
358         //              this.networkelementConnectionDB.write(this.joinNe(e, networkElementConnectionEntitiy), nodeId);
359
360     }
361
362     /* please do not remove */
363     //    public void cleanNetworkElementConnections() {
364     //        this.networkelementConnectionDB.remove(QueryBuilders.matchQuery("is-required", false));
365     //        CreateNetworkElementConnectionInput x = new CreateNetworkElementConnectionInputBuilder().setStatus(ConnectionLogStatus.Disconnected).build();
366     //        this.networkelementConnectionDB.update(x,QueryBuilders.matchAllQuery());
367     //    }
368
369     @Override
370     public void removeNetworkConnection(String nodeId) {
371         Boolean isRequired;
372         NetworkElementConnectionEntity e = this.networkelementConnectionDB.read(nodeId);
373         if (e != null && (isRequired = e.isIsRequired()) != null) {
374             if (isRequired) {
375                 LOG.debug("updating connection status for {} of required ne to disconnected", nodeId);
376                 this.networkelementConnectionDB.update(new UpdateNetworkElementConnectionInputBuilder()
377                         .setStatus(ConnectionLogStatus.Disconnected).build(), nodeId);
378             } else {
379                 LOG.debug("remove networkelement-connection for {} entry because of non-required", nodeId);
380                 this.networkelementConnectionDB.remove(nodeId);
381             }
382         } else {
383             LOG.warn("Unable to update connection-status. dbentry for {} not found in networkelement-connection",
384                     nodeId);
385         }
386     }
387
388     // -- Multiple areas
389
390     @Override
391     public int doIndexClean(Date olderAreOutdated) {
392
393         String netconfTimeStamp = NETCONFTIME_CONVERTER.getTimeStampAsNetconfString(olderAreOutdated);
394         int removed = 0;
395
396         QueryBuilder queryEventBase = EsEventBase.getQueryForTimeStamp(netconfTimeStamp);
397         removed += eventRWEventLogDevicemanager.remove(queryEventBase);
398
399         QueryBuilder queryFaultLog = EsFaultLogDevicemanager.getQueryForTimeStamp(netconfTimeStamp);
400         removed += eventRWFaultLogDB.remove(queryFaultLog);
401         return removed;
402     }
403
404     @Override
405     public int getNumberOfOldObjects(Date olderAreOutdated) {
406
407         String netconfTimeStamp = NETCONFTIME_CONVERTER.getTimeStampAsNetconfString(olderAreOutdated);
408         int numberOfElements = 0;
409
410         QueryBuilder queryEventBase = EsEventBase.getQueryForTimeStamp(netconfTimeStamp);
411         numberOfElements += eventRWEventLogDevicemanager.doReadAll(queryEventBase).getTotal();
412
413         QueryBuilder queryFaultLog = EsFaultLogDevicemanager.getQueryForTimeStamp(netconfTimeStamp);
414         numberOfElements += eventRWFaultLogDB.doReadAll(queryFaultLog).getTotal();
415
416         return numberOfElements;
417     }
418
419     // -- Helper
420
421     /**
422      * Verify status of client
423      *
424      * @param event that is printed with message
425      * @return true if client is null
426      */
427     private boolean assertIfClientNull(Object event) {
428         return assertIfClientNull("No DB, can not write: {}", event);
429     }
430
431     private boolean assertIfClientNullForNodeName(Object object) {
432         return assertIfClientNull("No DB, can not handle node: {}", object);
433     }
434
435     /**
436      * Verify status of client
437      *
438      * @param message to print including {} for object printout.
439      * @return true if client is null
440      */
441     private boolean assertIfClientNull(String message, Object object) {
442         if (client == null) {
443             LOG.debug(message, object);
444             return true;
445         }
446         return false;
447     }
448
449     // ### sub classes
450
451
452     private static class EsEventBase {
453         /**
454          * Query to get older Elements
455          *
456          * @param netconfTimeStamp to identify older Elements
457          * @return QueryBuilder for older elements related to timestamp
458          */
459         private static QueryBuilder getQueryForTimeStamp(String netconfTimeStamp) {
460             return new RangeQueryBuilder("timestamp").lte(netconfTimeStamp);
461         }
462     }
463     private static class EsFaultLogDevicemanager {
464         /**
465          * Get older Elements
466          *
467          * @param netconfTimeStamp to identify query elements older than this timestamp.
468          * @return QueryBuilder for related elements
469          */
470         public static QueryBuilder getQueryForTimeStamp(String netconfTimeStamp) {
471             return new RangeQueryBuilder("timestamp").lte(netconfTimeStamp);
472         }
473     }
474     public static class EsFaultCurrent {
475         /**
476          * @param nodeName name of the node
477          * @return query builder
478          */
479         public static QueryBuilder getQueryForOneNode(String nodeName) {
480             return QueryBuilders.matchQuery("node-id", nodeName);
481         }
482
483         public static QueryBuilder getQueryForOneNodeAndObjectId(String nodeName, String objectId) {
484             BoolQueryBuilder bq = QueryBuilders.boolQuery();
485             bq.must(QueryBuilders.matchQuery("node-id", nodeName));
486             bq.must(QueryBuilders.matchQuery("object-id", objectId));
487             return bq;
488         }
489     }
490
491     @Override
492     public List<NetworkElementConnectionEntity> getNetworkElementConnections() {
493         return this.networkelementConnectionDB.doReadAll().getHits();
494     }
495
496     @Override
497     public void doWritePerformanceData(List<PmdataEntity> list) {
498
499         list.forEach(elem -> {
500             GranularityPeriodType granularityPeriod = nnGetGranularityPeriodType(elem.getGranularityPeriod());
501             //_id": "Sim12600/LP-MWPS-TTP-01/2017-07-04T15:15:00.0+00:00"
502             StringBuffer id = new StringBuffer();
503             DateAndTime date = elem.getTimeStamp();
504             id.append(elem.getNodeName());
505             id.append("/");
506             id.append(elem.getUuidInterface());
507             id.append("/");
508             id.append(date != null ? date.getValue() : "null");
509
510             switch (granularityPeriod) {
511                 case Period15Min:
512                     pmData15mDB.write(elem, id.toString());
513                     break;
514                 case Period24Hours:
515                     pmData24hDB.write(elem, id.toString());
516                     break;
517                 case Unknown:
518                 default:
519                     LOG.debug("Unknown granularity {} id {}", granularityPeriod, id);
520                     break;
521             }
522         });
523
524     }
525     @Override
526     public void doWritePerformanceData2(
527             List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.PmdataEntity> list) {
528
529         list.forEach(elem -> {
530             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.GranularityPeriodType
531             granularityPeriod = nnGetGranularityPeriodType2(elem.getGranularityPeriod());
532             //_id": "Sim12600/LP-MWPS-TTP-01/2017-07-04T15:15:00.0+00:00"
533             StringBuffer id = new StringBuffer();
534             DateAndTime date = elem.getTimeStamp();
535             id.append(elem.getNodeName());
536             id.append("/");
537             id.append(elem.getUuidInterface());
538             id.append("/");
539             id.append(date != null ? date.getValue() : "null");
540
541             switch (granularityPeriod) {
542                 case Period15Min:
543                     pmData15mDB.write(elem, id.toString());
544                     break;
545                 case Period24Hours:
546                     pmData24hDB.write(elem, id.toString());
547                     break;
548                 case Unknown:
549                 default:
550                     LOG.debug("Unknown granularity {} id {}", granularityPeriod, id);
551                     break;
552             }
553         });
554     }
555     @NonNull
556     GranularityPeriodType nnGetGranularityPeriodType(@Nullable GranularityPeriodType granularityPeriod) {
557         return granularityPeriod != null ? granularityPeriod : GranularityPeriodType.Unknown;
558     }
559     org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.GranularityPeriodType nnGetGranularityPeriodType2(
560             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.@Nullable GranularityPeriodType granularityPeriod) {
561         return granularityPeriod != null ? granularityPeriod :
562             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.v2.rev200702.GranularityPeriodType.Unknown;
563     }
564
565     @Override
566     public HtDatabaseClient getRawClient() {
567         return this.client;
568     }
569
570
571
572 }