2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.sal.dom.broker.impl;
10 import java.util.concurrent.atomic.AtomicLong;
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.InstanceIdentifier;
18 public class DataStoreStatsWrapper implements Delegator<DataStore>, DataStore {
20 private final DataStore delegate;
22 private AtomicLong cfgReadCount = new AtomicLong();
23 private AtomicLong cfgReadTimeTotal = new AtomicLong();
25 private AtomicLong operReadCount = new AtomicLong();
26 private AtomicLong operReadTimeTotal = new AtomicLong();
28 private AtomicLong requestCommitCount = new AtomicLong();
29 private AtomicLong requestCommitTimeTotal = new AtomicLong();
31 public DataStoreStatsWrapper(DataStore store) {
36 public DataStore getDelegate() {
41 public CompositeNode readConfigurationData(InstanceIdentifier path) {
42 cfgReadCount.incrementAndGet();
43 final long startTime = System.nanoTime();
45 return delegate.readConfigurationData(path);
47 final long endTime = System.nanoTime();
48 final long runTime = endTime - startTime;
49 cfgReadTimeTotal.addAndGet(runTime);
54 public CompositeNode readOperationalData(InstanceIdentifier path) {
55 operReadCount.incrementAndGet();
56 final long startTime = System.nanoTime();
58 return delegate.readOperationalData(path);
60 final long endTime = System.nanoTime();
61 final long runTime = endTime - startTime;
62 operReadTimeTotal.addAndGet(runTime);
66 public DataCommitTransaction<InstanceIdentifier, CompositeNode> requestCommit(
67 DataModification<InstanceIdentifier, CompositeNode> modification) {
68 requestCommitCount.incrementAndGet();
69 final long startTime = System.nanoTime();
71 return delegate.requestCommit(modification);
73 final long endTime = System.nanoTime();
74 final long runTime = endTime - startTime;
75 requestCommitTimeTotal.addAndGet(runTime);
80 public boolean containsConfigurationPath(InstanceIdentifier path) {
81 return delegate.containsConfigurationPath(path);
84 public Iterable<InstanceIdentifier> getStoredConfigurationPaths() {
85 return delegate.getStoredConfigurationPaths();
88 public Iterable<InstanceIdentifier> getStoredOperationalPaths() {
89 return delegate.getStoredOperationalPaths();
92 public boolean containsOperationalPath(InstanceIdentifier path) {
93 return delegate.containsOperationalPath(path);
96 public final long getConfigurationReadCount() {
97 return cfgReadCount.get();
100 public final long getOperationalReadCount() {
101 return operReadCount.get();
104 public final long getRequestCommitCount() {
105 return requestCommitCount.get();
108 public final double getConfigurationReadTotalTime() {
109 return cfgReadTimeTotal.get() / 1000.0d;
112 public final double getOperationalReadTotalTime() {
113 return operReadTimeTotal.get() / 1000.0d;
116 public final double getRequestCommitTotalTime() {
117 return requestCommitTimeTotal.get() / 1000.0d;
120 public final double getConfigurationReadAverageTime() {
121 long readCount = cfgReadCount.get();
125 return getConfigurationReadTotalTime() / readCount;
128 public final double getOperationalReadAverageTime() {
129 long readCount = operReadCount.get();
133 return getOperationalReadTotalTime() / readCount;
136 public final double getRequestCommitAverageTime() {
137 long count = requestCommitCount.get();
141 return getRequestCommitTotalTime() / count;