package org.opendaylight.openflowplugin.impl.statistics.ofpspecific;
+import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import javax.annotation.Nonnull;
import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
* Class counts message of {@link org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy.STATISTIC_GROUP} type
* and provides info as debug log.
*/
-public class MessageIntelligenceAgencyImpl implements MessageIntelligenceAgency<Class> {
+public class MessageIntelligenceAgencyImpl implements MessageIntelligenceAgency, MessageIntelligenceAgencyMXBean {
private static final Logger LOG = LoggerFactory.getLogger(MessageIntelligenceAgencyImpl.class);
private static final class MessageCounters {
private static final AtomicLongFieldUpdater<MessageCounters> UPDATER = AtomicLongFieldUpdater.newUpdater(MessageCounters.class, "current");
+ @SuppressWarnings("unused")
private volatile long current;
private long cumulative;
}
}
- private final ConcurrentMap<STATISTIC_GROUP, ConcurrentMap<Class, MessageCounters>> inputStats = new ConcurrentHashMap<>();
+ private final ConcurrentMap<STATISTIC_GROUP, ConcurrentMap<Class<?>, MessageCounters>> inputStats = new ConcurrentHashMap<>();
@Override
- public void spyMessage(final Class message, final STATISTIC_GROUP statGroup) {
+ public void spyMessage(@Nonnull final Class<?> message, final STATISTIC_GROUP statGroup) {
+ Preconditions.checkNotNull(message, "Message can't be null.");
getCounters(message, statGroup).increment();
}
* @param statGroup TODO
* @return
*/
- private MessageCounters getCounters(final Class message, final STATISTIC_GROUP statGroup) {
- ConcurrentMap<Class, MessageCounters> groupData = getOrCreateGroupData(statGroup);
+ private MessageCounters getCounters(final Class<?> message, final STATISTIC_GROUP statGroup) {
+ ConcurrentMap<Class<?>, MessageCounters> groupData = getOrCreateGroupData(statGroup);
MessageCounters counters = getOrCreateCountersPair(message, groupData);
return counters;
}
- private static MessageCounters getOrCreateCountersPair(final Class msgType, final ConcurrentMap<Class, MessageCounters> groupData) {
+ private static MessageCounters getOrCreateCountersPair(final Class<?> msgType, final ConcurrentMap<Class<?>, MessageCounters> groupData) {
final MessageCounters lookup = groupData.get(msgType);
if (lookup != null) {
return lookup;
}
- private ConcurrentMap<Class, MessageCounters> getOrCreateGroupData(final STATISTIC_GROUP statGroup) {
- final ConcurrentMap<Class, MessageCounters> lookup = inputStats.get(statGroup);
+ private ConcurrentMap<Class<?>, MessageCounters> getOrCreateGroupData(final STATISTIC_GROUP statGroup) {
+ final ConcurrentMap<Class<?>, MessageCounters> lookup = inputStats.get(statGroup);
if (lookup != null) {
return lookup;
}
- final ConcurrentMap<Class, MessageCounters> newmap = new ConcurrentHashMap<>();
- final ConcurrentMap<Class, MessageCounters> check = inputStats.putIfAbsent(statGroup, newmap);
+ final ConcurrentMap<Class<?>, MessageCounters> newmap = new ConcurrentHashMap<>();
+ final ConcurrentMap<Class<?>, MessageCounters> check = inputStats.putIfAbsent(statGroup, newmap);
return check == null ? newmap : check;
}
List<String> dump = new ArrayList<>();
for (STATISTIC_GROUP statGroup : STATISTIC_GROUP.values()) {
- Map<Class, MessageCounters> groupData = inputStats.get(statGroup);
+ Map<Class<?>, MessageCounters> groupData = inputStats.get(statGroup);
if (groupData != null) {
- for (Entry<Class, MessageCounters> statEntry : groupData.entrySet()) {
+ for (Entry<Class<?>, MessageCounters> statEntry : groupData.entrySet()) {
long amountPerInterval = statEntry.getValue().accumulate();
long cumulativeAmount = statEntry.getValue().getCumulative();
dump.add(String.format("%s: MSG[%s] -> +%d | %d",