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%2FMeterStatsTracker.java;h=f43ec693cd1d7a283a037f770361f1024ab4ed01;hb=4c22825994c2519fb1c9d63f0050ebf35c4f8439;hp=381db8a39ffa3a464b32049a2a5aa67d20fabc39;hpb=1862f90478212a06a9534ed0674f27212972177f;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MeterStatsTracker.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MeterStatsTracker.java index 381db8a39f..f43ec693cd 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MeterStatsTracker.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/MeterStatsTracker.java @@ -7,23 +7,32 @@ */ package org.opendaylight.controller.md.statistics.manager; +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.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterStatisticsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterStatistics; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterStatisticsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.nodes.node.meter.MeterStatisticsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsBuilder; +import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -final class MeterStatsTracker extends AbstractStatsTracker { +final class MeterStatsTracker extends AbstractListeningStatsTracker { + private static final Logger logger = LoggerFactory.getLogger(MeterStatsTracker.class); + private final OpendaylightMeterStatisticsService meterStatsService; - MeterStatsTracker(InstanceIdentifier nodeIdentifier, DataProviderService dps, long lifetimeNanos) { - super(nodeIdentifier, dps, lifetimeNanos); + MeterStatsTracker(OpendaylightMeterStatisticsService meterStatsService, final FlowCapableContext context) { + super(context); + this.meterStatsService = meterStatsService; } @Override @@ -52,4 +61,64 @@ final class MeterStatsTracker extends AbstractStatsTracker, DataObject> change) { + for (InstanceIdentifier key : change.getCreatedConfigurationData().keySet()) { + if (Meter.class.equals(key.getTargetType())) { + request(); + } + } + + final DataModificationTransaction trans = startTransaction(); + for (InstanceIdentifier key : change.getRemovedConfigurationData()) { + if (Meter.class.equals(key.getTargetType())) { + @SuppressWarnings("unchecked") + InstanceIdentifier meter = (InstanceIdentifier)key; + + InstanceIdentifier nodeMeterStatisticsAugmentation = + meter.augmentation(NodeMeterStatistics.class); + trans.removeOperationalData(nodeMeterStatisticsAugmentation); + } + } + trans.commit(); + } + + @Override + protected InstanceIdentifier listenPath() { + return getNodeIdentifierBuilder().augmentation(FlowCapableNode.class).child(Meter.class).build(); + } + + @Override + protected String statName() { + return "Meter"; + } + + @Override + public void start(final DataBrokerService dbs) { + if (meterStatsService == null) { + logger.debug("No Meter Statistics service, not subscribing to meters on node {}", getNodeIdentifier()); + return; + } + + super.start(dbs); + } + + @Override + protected MeterStats createInvariantKey(MeterStats item) { + MeterStatsBuilder meterStatsBuilder = new MeterStatsBuilder(); + meterStatsBuilder.setKey(item.getKey()); + meterStatsBuilder.setMeterId(item.getMeterId()); + return meterStatsBuilder.build(); + } }