Merge "fixed restconf notification subscription parsing."
[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 long committedTransactionsCount;
32
33     private long readOnlyTransactionCount;
34
35     private long writeOnlyTransactionCount;
36
37     private long readWriteTransactionCount;
38
39     private String leader;
40
41     private String raftState;
42
43     private long lastLogTerm = -1L;
44
45     private long lastLogIndex = -1L;
46
47     private long currentTerm = -1L;
48
49     private long commitIndex = -1L;
50
51     private long lastApplied = -1L;
52
53     private long lastCommittedTransactionTime;
54
55     private long failedTransactionsCount;
56
57     private final AtomicLong failedReadTransactionsCount = new AtomicLong();
58
59     private long abortTransactionsCount;
60
61     private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean;
62
63     private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean;
64
65     private long dataSize = 0;
66
67     private final SimpleDateFormat sdf =
68         new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
69
70     private boolean followerInitialSyncStatus = false;
71
72     public ShardStats(final String shardName, final String mxBeanType) {
73         super(shardName, mxBeanType, JMX_CATEGORY_SHARD);
74     }
75
76     public void setNotificationManager(final QueuedNotificationManager<?, ?> manager) {
77         this.notificationManagerStatsBean = new QueuedNotificationManagerMXBeanImpl(manager,
78                 "notification-manager", getMBeanType(), getMBeanCategory());
79
80         this.notificationExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(manager.getExecutor());
81     }
82
83     @Override
84     public String getShardName() {
85         return getMBeanName();
86     }
87
88     @Override
89     public long getCommittedTransactionsCount() {
90         return committedTransactionsCount;
91     }
92
93     @Override
94     public String getLeader() {
95         return leader;
96     }
97
98     @Override
99     public String getRaftState() {
100         return raftState;
101     }
102
103     @Override
104     public long getReadOnlyTransactionCount() {
105         return readOnlyTransactionCount;
106     }
107
108     @Override
109     public long getWriteOnlyTransactionCount() {
110         return writeOnlyTransactionCount;
111     }
112
113     @Override
114     public long getReadWriteTransactionCount() {
115         return readWriteTransactionCount;
116     }
117
118     @Override
119     public long getLastLogIndex() {
120         return lastLogIndex;
121     }
122
123     @Override
124     public long getLastLogTerm() {
125         return lastLogTerm;
126     }
127
128     @Override
129     public long getCurrentTerm() {
130         return currentTerm;
131     }
132
133     @Override
134     public long getCommitIndex() {
135         return commitIndex;
136     }
137
138     @Override
139     public long getLastApplied() {
140         return lastApplied;
141     }
142
143     @Override
144     public String getLastCommittedTransactionTime() {
145
146         return sdf.format(new Date(lastCommittedTransactionTime));
147     }
148
149     @Override
150     public long getFailedTransactionsCount() {
151         return failedTransactionsCount;
152     }
153
154     @Override
155     public long getFailedReadTransactionsCount() {
156         return failedReadTransactionsCount.get();
157     }
158
159     @Override
160     public long getAbortTransactionsCount() {
161         return abortTransactionsCount;
162     }
163
164     public long incrementCommittedTransactionCount() {
165         return ++committedTransactionsCount;
166     }
167
168     public long incrementReadOnlyTransactionCount() {
169         return ++readOnlyTransactionCount;
170     }
171
172     public long incrementWriteOnlyTransactionCount() {
173         return ++writeOnlyTransactionCount;
174     }
175
176     public long incrementReadWriteTransactionCount() {
177         return ++readWriteTransactionCount;
178     }
179
180     public long incrementFailedTransactionsCount() {
181         return ++failedTransactionsCount;
182     }
183
184     public long incrementFailedReadTransactionsCount() {
185         return failedReadTransactionsCount.incrementAndGet();
186     }
187
188     public long incrementAbortTransactionsCount ()
189     {
190         return ++abortTransactionsCount;
191     }
192
193     public void setLeader(final String leader) {
194         this.leader = leader;
195     }
196
197     public void setRaftState(final String raftState) {
198         this.raftState = raftState;
199     }
200
201     public void setLastLogTerm(final long lastLogTerm) {
202         this.lastLogTerm = lastLogTerm;
203     }
204
205     public void setLastLogIndex(final long lastLogIndex) {
206         this.lastLogIndex = lastLogIndex;
207     }
208
209     public void setCurrentTerm(final long currentTerm) {
210         this.currentTerm = currentTerm;
211     }
212
213     public void setCommitIndex(final long commitIndex) {
214         this.commitIndex = commitIndex;
215     }
216
217     public void setLastApplied(final long lastApplied) {
218         this.lastApplied = lastApplied;
219     }
220
221     public void setLastCommittedTransactionTime(final long lastCommittedTransactionTime) {
222         this.lastCommittedTransactionTime = lastCommittedTransactionTime;
223     }
224
225     public void setInMemoryJournalDataSize(long dataSize){
226         this.dataSize = dataSize;
227     }
228
229     @Override
230     public long getInMemoryJournalDataSize(){
231         return dataSize;
232     }
233
234     @Override
235     public ThreadExecutorStats getDataStoreExecutorStats() {
236         // FIXME: this particular thing does not work, as it really is DS-specific
237         return null;
238     }
239
240     @Override
241     public ThreadExecutorStats getNotificationMgrExecutorStats() {
242         return notificationExecutorStatsBean.toThreadExecutorStats();
243     }
244
245     @Override
246     public List<ListenerNotificationQueueStats> getCurrentNotificationMgrListenerQueueStats() {
247         return notificationManagerStatsBean.getCurrentListenerQueueStats();
248     }
249
250     @Override
251     public int getMaxNotificationMgrListenerQueueSize() {
252         return notificationManagerStatsBean.getMaxListenerQueueSize();
253     }
254
255     /**
256      * resets the counters related to transactions
257      */
258     @Override
259     public void resetTransactionCounters(){
260         committedTransactionsCount = 0;
261
262         readOnlyTransactionCount = 0;
263
264         writeOnlyTransactionCount = 0;
265
266         readWriteTransactionCount = 0;
267
268         lastCommittedTransactionTime = 0;
269
270         failedTransactionsCount = 0;
271
272         failedReadTransactionsCount.set(0);
273
274         abortTransactionsCount = 0;
275
276     }
277
278     public void setDataStore(final InMemoryDOMDataStore store) {
279         setNotificationManager(store.getDataChangeListenerNotificationManager());
280     }
281
282     public void setFollowerInitialSyncStatus(boolean followerInitialSyncStatus) {
283         this.followerInitialSyncStatus = followerInitialSyncStatus;
284     }
285
286     @Override
287     public boolean getFollowerInitialSyncStatus() {
288         return followerInitialSyncStatus;
289     }
290 }