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%2FGroupStatsTracker.java;h=f3ba45643c3fd4338b4f8f6bd8951de0d5184757;hb=67d58d1ab50f3c3bbe19a96fb6f0d9d94211829f;hp=40f526e13ce9d132dbf2555cd8ae4b987194461d;hpb=fd3193d2efe85828156e6a670b5c06a0ea485a98;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupStatsTracker.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupStatsTracker.java index 40f526e13c..f3ba45643c 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupStatsTracker.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupStatsTracker.java @@ -7,28 +7,33 @@ */ 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.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupStatistics; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupStatisticsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.group.statistics.GroupStatisticsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey; +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 GroupStatsTracker extends AbstractStatsTracker { +final class GroupStatsTracker extends AbstractListeningStatsTracker { + private static final Logger logger = LoggerFactory.getLogger(GroupStatsTracker.class); private final OpendaylightGroupStatisticsService groupStatsService; - GroupStatsTracker(OpendaylightGroupStatisticsService groupStatsService, FlowCapableContext context, long lifetimeNanos) { - super(context, lifetimeNanos); + GroupStatsTracker(OpendaylightGroupStatisticsService groupStatsService, FlowCapableContext context) { + super(context); this.groupStatsService = Preconditions.checkNotNull(groupStatsService); } @@ -58,10 +63,55 @@ final class GroupStatsTracker extends AbstractStatsTracker request() { + @Override + protected InstanceIdentifier listenPath() { + return getNodeIdentifierBuilder().augmentation(FlowCapableNode.class).child(Group.class).build(); + } + + @Override + protected String statName() { + return "Group"; + } + + @Override + public void request() { final GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder(); input.setNode(getNodeRef()); - return requestHelper(groupStatsService.getAllGroupStatistics(input.build())); + requestHelper(groupStatsService.getAllGroupStatistics(input.build())); + } + + @Override + public void onDataChanged(DataChangeEvent, DataObject> change) { + final DataModificationTransaction trans = startTransaction(); + for (InstanceIdentifier key : change.getRemovedConfigurationData()) { + if (Group.class.equals(key.getTargetType())) { + @SuppressWarnings("unchecked") + InstanceIdentifier group = (InstanceIdentifier)key; + InstanceIdentifier del = group.augmentation(NodeGroupStatistics.class); + logger.debug("Key {} triggered remove of augmentation {}", key, del); + + trans.removeOperationalData(del); + } + } + trans.commit(); + } + + @Override + public void start(final DataBrokerService dbs) { + if (groupStatsService == null) { + logger.debug("No Group Statistics service, not subscribing to groups on node {}", getNodeIdentifier()); + return; + } + + super.start(dbs); + } + + @Override + protected GroupStats createInvariantKey(GroupStats item) { + GroupStatsBuilder groupStatsBuilder = new GroupStatsBuilder(); + groupStatsBuilder.setKey(item.getKey()); + groupStatsBuilder.setGroupId(item.getGroupId()); + return groupStatsBuilder.build(); } }