X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fstatistics-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fstatistics%2Fmanager%2FNodeStatisticsHandler.java;h=5ace260251673bb9fa42b9da14a95a5ece724b4c;hb=f3714846c0eedf09fe83844c0dc30889f790fbc2;hp=ecf2cf366591bc1f7383981c52957741d42cc669;hpb=86fbf772e22bd386e790682594b8188fb450ad8c;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/NodeStatisticsHandler.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/NodeStatisticsHandler.java index ecf2cf3665..5ace260251 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/NodeStatisticsHandler.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/NodeStatisticsHandler.java @@ -9,6 +9,8 @@ package org.opendaylight.controller.md.statistics.manager; import java.util.Collection; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.TimeUnit; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; @@ -65,9 +67,12 @@ import com.google.common.base.Preconditions; */ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableContext { private static final Logger logger = LoggerFactory.getLogger(NodeStatisticsHandler.class); + + private static final long STATS_COLLECTION_MILLIS = TimeUnit.SECONDS.toMillis(15); + private static final long FIRST_COLLECTION_MILLIS = TimeUnit.SECONDS.toMillis(5); private static final int NUMBER_OF_WAIT_CYCLES = 2; - private final MultipartMessageManager msgManager = new MultipartMessageManager(); + private final MultipartMessageManager msgManager; private final InstanceIdentifier targetNodeIdentifier; private final FlowStatsTracker flowStats; private final FlowTableStatsTracker flowTableStats; @@ -80,6 +85,17 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo private final DataProviderService dps; private final NodeRef targetNodeRef; private final NodeKey targetNodeKey; + private final TimerTask task = new TimerTask() { + @Override + public void run() { + try{ + requestPeriodicStatistics(); + cleanStaleStatistics(); + }catch(Exception e){ + logger.warn("Exception occured while sending statistics request : {}",e); + } + } + }; public NodeStatisticsHandler(final DataProviderService dps, final NodeKey nodeKey, final OpendaylightFlowStatisticsService flowStatsService, @@ -93,8 +109,9 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo this.targetNodeIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class, targetNodeKey).build(); this.targetNodeRef = new NodeRef(targetNodeIdentifier); - final long lifetimeNanos = TimeUnit.MILLISECONDS.toNanos(StatisticsProvider.STATS_COLLECTION_MILLIS * NUMBER_OF_WAIT_CYCLES); + final long lifetimeNanos = TimeUnit.MILLISECONDS.toNanos(STATS_COLLECTION_MILLIS * NUMBER_OF_WAIT_CYCLES); + msgManager = new MultipartMessageManager(lifetimeNanos); flowStats = new FlowStatsTracker(flowStatsService, this, lifetimeNanos); flowTableStats = new FlowTableStatsTracker(flowTableStatsService, this, lifetimeNanos); groupDescStats = new GroupDescStatsTracker(groupStatsService, this, lifetimeNanos); @@ -124,50 +141,50 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo return dps.beginTransaction(); } - public synchronized void updateGroupDescStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateGroupDescStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { groupDescStats.updateStats(list); } } - public synchronized void updateGroupStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateGroupStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { groupStats.updateStats(list); } } - public synchronized void updateMeterConfigStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateMeterConfigStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { meterConfigStats.updateStats(list); } } - public synchronized void updateMeterStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateMeterStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { meterStats.updateStats(list); } } - public synchronized void updateQueueStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateQueueStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { queueStats.updateStats(list); } } - public synchronized void updateFlowTableStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateFlowTableStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { flowTableStats.updateStats(list); } } - public synchronized void updateNodeConnectorStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateNodeConnectorStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { nodeConnectorStats.updateStats(list); } } - public synchronized void updateAggregateFlowStats(TransactionAware transaction, Boolean more, AggregateFlowStatistics flowStats) { - final Short tableId = msgManager.isExpectedTableTransaction(transaction, more); + public synchronized void updateAggregateFlowStats(TransactionAware transaction, AggregateFlowStatistics flowStats) { + final Short tableId = msgManager.isExpectedTableTransaction(transaction); if (tableId != null) { final DataModificationTransaction trans = dps.beginTransaction(); InstanceIdentifier tableRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, targetNodeKey) @@ -190,8 +207,8 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo } } - public synchronized void updateFlowStats(TransactionAware transaction, Boolean more, List list) { - if (msgManager.isExpectedTransaction(transaction, more)) { + public synchronized void updateFlowStats(TransactionAware transaction, List list) { + if (msgManager.isExpectedTransaction(transaction)) { flowStats.updateStats(list); } } @@ -271,7 +288,7 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo queueStats.request(); } - public synchronized void start() { + public synchronized void start(final Timer timer) { flowStats.start(dps); groupDescStats.start(dps); groupStats.start(dps); @@ -279,11 +296,16 @@ public final class NodeStatisticsHandler implements AutoCloseable, FlowCapableCo meterStats.start(dps); queueStats.start(dps); + timer.schedule(task, (long) (Math.random() * FIRST_COLLECTION_MILLIS), STATS_COLLECTION_MILLIS); + + logger.debug("Statistics handler for node started with base interval {}ms", STATS_COLLECTION_MILLIS); + requestPeriodicStatistics(); } @Override public synchronized void close() { + task.cancel(); flowStats.close(); groupDescStats.close(); groupStats.close();