X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fstatistics-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fstatistics%2Fmanager%2FMeterStatsTracker.java;h=f43ec693cd1d7a283a037f770361f1024ab4ed01;hp=807e82c9efd24772a19b1727c832c2c3a2755cf9;hb=b3e553ce5b3d3e972cbe19465ab7af2fcb39934c;hpb=fd3193d2efe85828156e6a670b5c06a0ea485a98 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 807e82c9ef..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,29 +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.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.flow.transaction.rev131103.TransactionId; 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; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.ListenableFuture; - -final class MeterStatsTracker extends AbstractStatsTracker { +final class MeterStatsTracker extends AbstractListeningStatsTracker { + private static final Logger logger = LoggerFactory.getLogger(MeterStatsTracker.class); private final OpendaylightMeterStatisticsService meterStatsService; - MeterStatsTracker(OpendaylightMeterStatisticsService meterStatsService, final FlowCapableContext context, long lifetimeNanos) { - super(context, lifetimeNanos); - this.meterStatsService = Preconditions.checkNotNull(meterStatsService); + MeterStatsTracker(OpendaylightMeterStatisticsService meterStatsService, final FlowCapableContext context) { + super(context); + this.meterStatsService = meterStatsService; } @Override @@ -59,10 +62,63 @@ final class MeterStatsTracker extends AbstractStatsTracker request() { - GetAllMeterStatisticsInputBuilder input = new GetAllMeterStatisticsInputBuilder(); - input.setNode(getNodeRef()); + @Override + public void request() { + if (meterStatsService != null) { + GetAllMeterStatisticsInputBuilder input = new GetAllMeterStatisticsInputBuilder(); + input.setNode(getNodeRef()); + + requestHelper(meterStatsService.getAllMeterStatistics(input.build())); + } + } + + @Override + public void onDataChanged(DataChangeEvent, 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"; + } - return requestHelper(meterStatsService.getAllMeterStatistics(input.build())); + @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(); } }