9116d50d9c4965fc81842a4a6e1f558f457c2ad3
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / sal / dom / broker / impl / DataStoreStatsWrapper.java
1 package org.opendaylight.controller.sal.dom.broker.impl;
2
3 import java.util.concurrent.atomic.AtomicLong;
4
5 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
6 import org.opendaylight.controller.sal.core.api.data.DataStore;
7 import org.opendaylight.yangtools.concepts.Delegator;
8 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
9 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
10
11 public class DataStoreStatsWrapper implements Delegator<DataStore>, DataStore {
12
13     private final DataStore delegate;
14
15     private AtomicLong cfgReadCount = new AtomicLong();
16     private AtomicLong cfgReadTimeTotal = new AtomicLong();
17
18     private AtomicLong operReadCount = new AtomicLong();
19     private AtomicLong operReadTimeTotal = new AtomicLong();
20
21     private AtomicLong requestCommitCount = new AtomicLong();
22     private AtomicLong requestCommitTimeTotal = new AtomicLong();
23
24     public DataStoreStatsWrapper(DataStore store) {
25         delegate = store;
26     }
27
28     @Override
29     public DataStore getDelegate() {
30         return delegate;
31     }
32
33     @Override
34     public CompositeNode readConfigurationData(InstanceIdentifier path) {
35         cfgReadCount.incrementAndGet();
36         final long startTime = System.nanoTime();
37         try {
38             return delegate.readConfigurationData(path);
39         } finally {
40             final long endTime = System.nanoTime();
41             final long runTime = endTime - startTime;
42             cfgReadTimeTotal.addAndGet(runTime);
43         }
44     }
45
46     @Override
47     public CompositeNode readOperationalData(InstanceIdentifier path) {
48         operReadCount.incrementAndGet();
49         final long startTime = System.nanoTime();
50         try {
51             return delegate.readOperationalData(path);
52         } finally {
53             final long endTime = System.nanoTime();
54             final long runTime = endTime - startTime;
55             cfgReadTimeTotal.addAndGet(runTime);
56         }
57     }
58
59     public DataCommitTransaction<InstanceIdentifier, CompositeNode> requestCommit(
60             DataModification<InstanceIdentifier, CompositeNode> modification) {
61         requestCommitCount.incrementAndGet();
62         final long startTime = System.nanoTime();
63         try {
64             return delegate.requestCommit(modification);
65         } finally {
66             final long endTime = System.nanoTime();
67             final long runTime = endTime - startTime;
68             requestCommitTimeTotal.addAndGet(runTime);
69         }
70     };
71
72     @Override
73     public boolean containsConfigurationPath(InstanceIdentifier path) {
74         return delegate.containsConfigurationPath(path);
75     }
76
77     public Iterable<InstanceIdentifier> getStoredConfigurationPaths() {
78         return delegate.getStoredConfigurationPaths();
79     }
80
81     public Iterable<InstanceIdentifier> getStoredOperationalPaths() {
82         return delegate.getStoredOperationalPaths();
83     }
84
85     public boolean containsOperationalPath(InstanceIdentifier path) {
86         return delegate.containsOperationalPath(path);
87     }
88
89     public final long getConfigurationReadCount() {
90         return cfgReadCount.get();
91     }
92
93     public final long getOperationalReadCount() {
94         return operReadCount.get();
95     }
96
97     public final long getRequestCommitCount() {
98         return requestCommitCount.get();
99     }
100
101     public final long getConfigurationReadTotalTime() {
102         return cfgReadTimeTotal.get();
103     }
104
105     public final long getOperationalReadTotalTime() {
106         return operReadTimeTotal.get();
107     }
108
109     public final long getRequestCommitTotalTime() {
110         return requestCommitTimeTotal.get();
111     }
112
113     public final long getConfigurationReadAverageTime() {
114         long readCount = cfgReadCount.get();
115         if(readCount == 0) {
116             return 0;
117         }
118         return cfgReadTimeTotal.get() / readCount;
119     }
120
121     public final long getOperationalReadAverageTime() {
122         long readCount = operReadCount.get();
123         if(readCount == 0) {
124             return 0;
125         }
126         return operReadTimeTotal.get() / readCount;
127     }
128
129     public final long getRequestCommitAverageTime() {
130         long count = requestCommitCount.get();
131         if(count == 0) {
132             return 0;
133         }
134         return requestCommitTimeTotal.get() / count;
135     }
136
137 }