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