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%2FQueueStatsTracker.java;h=6f93eeb6172dcdaf24db8301214abe12d92857e0;hb=386d8f0ac5fa09ee5514d48284f1a4012f408b52;hp=c2bde6ae6034d98bb8f2c93a371c442b31dd5c4f;hpb=1862f90478212a06a9534ed0674f27212972177f;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java index c2bde6ae60..6f93eeb617 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/QueueStatsTracker.java @@ -7,29 +7,38 @@ */ package org.opendaylight.controller.md.statistics.manager; +import java.util.Map.Entry; + +import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; +import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; -import org.opendaylight.controller.sal.binding.api.data.DataProviderService; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.QueueBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.QueueKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.queue.rev130925.QueueId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsData; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsDataBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.OpendaylightQueueStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.flow.capable.node.connector.queue.statistics.FlowCapableNodeConnectorQueueStatisticsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap; +import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class QueueStatsTracker extends AbstractStatsTracker { +final class QueueStatsTracker extends AbstractListeningStatsTracker { private static final Logger logger = LoggerFactory.getLogger(QueueStatsTracker.class); + private final OpendaylightQueueStatisticsService queueStatsService; - QueueStatsTracker(InstanceIdentifier nodeIdentifier, - DataProviderService dps, long lifetimeNanos) { - super(nodeIdentifier, dps, lifetimeNanos); + QueueStatsTracker(OpendaylightQueueStatisticsService queueStatsService, final FlowCapableContext context) { + super(context); + this.queueStatsService = queueStatsService; } @Override @@ -72,4 +81,75 @@ final class QueueStatsTracker extends AbstractStatsTracker, DataObject> change) { + for (Entry, DataObject> e : change.getCreatedConfigurationData().entrySet()) { + if (Queue.class.equals(e.getKey().getTargetType())) { + final Queue queue = (Queue) e.getValue(); + final NodeConnectorKey key = e.getKey().firstKeyOf(NodeConnector.class, NodeConnectorKey.class); + logger.debug("Key {} triggered request for connector {} queue {}", key.getId(), queue.getQueueId()); + request(key.getId(), queue.getQueueId()); + } else { + logger.debug("Ignoring key {}", e.getKey()); + } + } + + final DataModificationTransaction trans = startTransaction(); + for (InstanceIdentifier key : change.getRemovedConfigurationData()) { + if (Queue.class.equals(key.getTargetType())) { + @SuppressWarnings("unchecked") + final InstanceIdentifier queue = (InstanceIdentifier)key; + final InstanceIdentifier del = InstanceIdentifier.builder(queue) + .augmentation(FlowCapableNodeConnectorQueueStatisticsData.class).build(); + logger.debug("Key {} triggered remove of augmentation {}", key, del); + + trans.removeOperationalData(del); + } + } + trans.commit(); + } + + @Override + protected InstanceIdentifier listenPath() { + return getNodeIdentifierBuilder().child(NodeConnector.class) + .augmentation(FlowCapableNodeConnector.class).child(Queue.class).build(); + } + + @Override + protected String statName() { + return "Queue"; + } + + @Override + public void start(final DataBrokerService dbs) { + if (queueStatsService == null) { + logger.debug("No Queue Statistics service, not subscribing to queues on node {}", getNodeIdentifier()); + return; + } + + super.start(dbs); + } }