Fix checkstyle warnings in netty-threadgroup-config.
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / jmx / mbeans / shard / ShardStats.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
9 package org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard;
10
11 import java.text.SimpleDateFormat;
12 import java.util.Date;
13 import java.util.List;
14 import java.util.concurrent.atomic.AtomicLong;
15 import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean;
16 import org.opendaylight.controller.md.sal.common.util.jmx.QueuedNotificationManagerMXBeanImpl;
17 import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStats;
18 import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStatsMXBeanImpl;
19 import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore;
20 import org.opendaylight.yangtools.util.concurrent.ListenerNotificationQueueStats;
21 import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager;
22
23 /**
24  * Maintains statistics for a shard.
25  *
26  * @author  Basheeruddin syedbahm@cisco.com
27  */
28 public class ShardStats extends AbstractMXBean implements ShardStatsMXBean {
29     public static String JMX_CATEGORY_SHARD = "Shards";
30
31     private final AtomicLong committedTransactionsCount = new AtomicLong();
32
33     private final AtomicLong readOnlyTransactionCount = new AtomicLong();
34
35     private final AtomicLong writeOnlyTransactionCount = new AtomicLong();
36
37     private final AtomicLong readWriteTransactionCount = new AtomicLong();
38
39     private String leader;
40
41     private String raftState;
42
43     private volatile long lastLogTerm = -1L;
44
45     private volatile long lastLogIndex = -1L;
46
47     private volatile long currentTerm = -1L;
48
49     private volatile long commitIndex = -1L;
50
51     private volatile long lastApplied = -1L;
52
53     private volatile long lastCommittedTransactionTime;
54
55     private final AtomicLong failedTransactionsCount = new AtomicLong();
56
57     private final AtomicLong failedReadTransactionsCount = new AtomicLong();
58
59     private final AtomicLong abortTransactionsCount = new AtomicLong();
60
61     private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean;
62
63     private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean;
64
65     private final SimpleDateFormat sdf =
66         new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
67
68     public ShardStats(final String shardName, final String mxBeanType) {
69         super(shardName, mxBeanType, JMX_CATEGORY_SHARD);
70     }
71
72     public void setNotificationManager(final QueuedNotificationManager<?, ?> manager) {
73         this.notificationManagerStatsBean = new QueuedNotificationManagerMXBeanImpl(manager,
74                 "notification-manager", getMBeanType(), getMBeanCategory());
75
76         this.notificationExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(manager.getExecutor());
77     }
78
79     @Override
80     public String getShardName() {
81         return getMBeanName();
82     }
83
84     @Override
85     public long getCommittedTransactionsCount() {
86         return committedTransactionsCount.get();
87     }
88
89     @Override
90     public String getLeader() {
91         return leader;
92     }
93
94     @Override
95     public String getRaftState() {
96         return raftState;
97     }
98
99     @Override
100     public long getReadOnlyTransactionCount() {
101         return readOnlyTransactionCount.get();
102     }
103
104     @Override
105     public long getWriteOnlyTransactionCount() {
106         return writeOnlyTransactionCount.get();
107     }
108
109     @Override
110     public long getReadWriteTransactionCount() {
111         return readWriteTransactionCount.get();
112     }
113
114     @Override
115     public long getLastLogIndex() {
116         return lastLogIndex;
117     }
118
119     @Override
120     public long getLastLogTerm() {
121         return lastLogTerm;
122     }
123
124     @Override
125     public long getCurrentTerm() {
126         return currentTerm;
127     }
128
129     @Override
130     public long getCommitIndex() {
131         return commitIndex;
132     }
133
134     @Override
135     public long getLastApplied() {
136         return lastApplied;
137     }
138
139     @Override
140     public String getLastCommittedTransactionTime() {
141
142         return sdf.format(new Date(lastCommittedTransactionTime));
143     }
144
145     @Override
146     public long getFailedTransactionsCount() {
147         return failedTransactionsCount.get();
148     }
149
150     @Override
151     public long getFailedReadTransactionsCount() {
152         return failedReadTransactionsCount.get();
153     }
154
155     @Override
156     public long getAbortTransactionsCount() {
157         return abortTransactionsCount.get();
158     }
159
160     public long incrementCommittedTransactionCount() {
161         return committedTransactionsCount.incrementAndGet();
162     }
163
164     public long incrementReadOnlyTransactionCount() {
165         return readOnlyTransactionCount.incrementAndGet();
166     }
167
168     public long incrementWriteOnlyTransactionCount() {
169         return writeOnlyTransactionCount.incrementAndGet();
170     }
171
172     public long incrementReadWriteTransactionCount() {
173         return readWriteTransactionCount.incrementAndGet();
174     }
175
176     public long incrementFailedTransactionsCount() {
177         return failedTransactionsCount.incrementAndGet();
178     }
179
180     public long incrementFailedReadTransactionsCount() {
181         return failedReadTransactionsCount.incrementAndGet();
182     }
183
184     public long incrementAbortTransactionsCount ()
185     {
186         return abortTransactionsCount.incrementAndGet();
187     }
188
189     public void setLeader(final String leader) {
190         this.leader = leader;
191     }
192
193     public void setRaftState(final String raftState) {
194         this.raftState = raftState;
195     }
196
197     public void setLastLogTerm(final long lastLogTerm) {
198         this.lastLogTerm = lastLogTerm;
199     }
200
201     public void setLastLogIndex(final long lastLogIndex) {
202         this.lastLogIndex = lastLogIndex;
203     }
204
205     public void setCurrentTerm(final long currentTerm) {
206         this.currentTerm = currentTerm;
207     }
208
209     public void setCommitIndex(final long commitIndex) {
210         this.commitIndex = commitIndex;
211     }
212
213     public void setLastApplied(final long lastApplied) {
214         this.lastApplied = lastApplied;
215     }
216
217     public void setLastCommittedTransactionTime(final long lastCommittedTransactionTime) {
218         this.lastCommittedTransactionTime = lastCommittedTransactionTime;
219     }
220
221     @Override
222     public ThreadExecutorStats getDataStoreExecutorStats() {
223         // FIXME: this particular thing does not work, as it really is DS-specific
224         return null;
225     }
226
227     @Override
228     public ThreadExecutorStats getNotificationMgrExecutorStats() {
229         return notificationExecutorStatsBean.toThreadExecutorStats();
230     }
231
232     @Override
233     public List<ListenerNotificationQueueStats> getCurrentNotificationMgrListenerQueueStats() {
234         return notificationManagerStatsBean.getCurrentListenerQueueStats();
235     }
236
237     @Override
238     public int getMaxNotificationMgrListenerQueueSize() {
239         return notificationManagerStatsBean.getMaxListenerQueueSize();
240     }
241
242     /**
243      * resets the counters related to transactions
244      */
245     @Override
246     public void resetTransactionCounters(){
247         committedTransactionsCount.set(0);
248
249         readOnlyTransactionCount.set(0);
250
251         writeOnlyTransactionCount.set(0);
252
253         readWriteTransactionCount.set(0);
254
255         lastCommittedTransactionTime = 0;
256
257         failedTransactionsCount.set(0);
258
259         failedReadTransactionsCount.set(0);
260
261         abortTransactionsCount.set(0);
262
263     }
264
265     public void setDataStore(final InMemoryDOMDataStore store) {
266         setNotificationManager(store.getDataChangeListenerNotificationManager());
267     }
268 }