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%2FGroupDescStatsTracker.java;h=e180aaf5fc94de8b609bcab6803843c36da2fac5;hb=refs%2Fchanges%2F85%2F5785%2F5;hp=928bf4ea55741df9b46d418670c807fdcca98dc9;hpb=7c1ced6aeaeca12da6786950c20a2133d9eb72e1;p=controller.git diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupDescStatsTracker.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupDescStatsTracker.java index 928bf4ea55..e180aaf5fc 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupDescStatsTracker.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/GroupDescStatsTracker.java @@ -7,22 +7,31 @@ */ 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.group.statistics.rev131111.GetGroupDescriptionInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupDescStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupDescStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.group.desc.GroupDescBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats; 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.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; +import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -final class GroupDescStatsTracker extends AbstractStatsTracker { - public GroupDescStatsTracker(final InstanceIdentifier targetNodeIdentifier, final DataProviderService dps, final long lifetimeNanos) { - super(targetNodeIdentifier, dps, lifetimeNanos); +final class GroupDescStatsTracker extends AbstractListeningStatsTracker { + private static final Logger logger = LoggerFactory.getLogger(GroupDescStatsTracker.class); + private final OpendaylightGroupStatisticsService groupStatsService; + + public GroupDescStatsTracker(OpendaylightGroupStatisticsService groupStatsService, final FlowCapableContext context) { + super(context); + this.groupStatsService = groupStatsService; } @Override @@ -50,4 +59,59 @@ final class GroupDescStatsTracker extends AbstractStatsTracker listenPath() { + return getNodeIdentifierBuilder().augmentation(FlowCapableNode.class).child(Group.class).build(); + } + + @Override + protected String statName() { + return "Group Descriptor"; + } + + @Override + public void request() { + if (groupStatsService != null) { + final GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder(); + input.setNode(getNodeRef()); + + requestHelper(groupStatsService.getGroupDescription(input.build())); + } + } + + @Override + public void onDataChanged(DataChangeEvent, DataObject> change) { + for (InstanceIdentifier key : change.getCreatedConfigurationData().keySet()) { + if (Group.class.equals(key.getTargetType())) { + logger.debug("Key {} triggered request", key); + request(); + } else { + logger.debug("Ignoring key {}", key); + } + } + + final DataModificationTransaction trans = startTransaction(); + for (InstanceIdentifier key : change.getRemovedConfigurationData()) { + if (Group.class.equals(key.getTargetType())) { + @SuppressWarnings("unchecked") + InstanceIdentifier group = (InstanceIdentifier)key; + InstanceIdentifier del = InstanceIdentifier.builder(group).augmentation(NodeGroupDescStats.class).toInstance(); + 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); + } }