/** * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.md.statistics.manager; import java.util.List; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** * statistics-manager * org.opendaylight.controller.md.statistics.manager * * StatPermCollector * Class implement {@link Runnable} and inside is running statistic collecting * process DataObject statistics by DataObject statistics for every {@link org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode}. * Every statistics wait to finish previous statistics. Only if all statistics finish, * next {@link org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode} * Statistics should be collecting. We are able to set minimal time for start next round cross all Network, * but all depends on network possibility. * * @author Vaclav Demcak * * Created: Aug 28, 2014 */ public interface StatPermCollector extends Runnable, AutoCloseable { /** * StatCapType * Enum class refers ofp_statistics capabilities fields from OF Switch * capabilities specification which have to come as a post HandShake * information from OF Switch and Inventory Manager adds all to the * Operational/DS. * If the capabilities are not add (for any reason) NodeRegistrator * adds all StatCapTypes for the {@link Node}. */ public enum StatCapabTypes { /** * OFPC_FLOW_STATS */ FLOW_STATS, /** * OFPC_TABLE_STATS */ TABLE_STATS, /** * OFPC_PORT_STATS */ PORT_STATS, /** * OFPC_GROUP_STATS */ GROUP_STATS, /** * OFPC_QUEUE_STATS */ QUEUE_STATS, /** * Meter statistics has no support from OF Switch capabilities * so we have to try get statistics for it and wait for response * Error or response package with results. */ METER_STATS } /** * Add new connected node for permanent statistics collecting process * * @param flowNode * @param statTypes * @param nrOfSwitchTables * @return true/false if the {@link Node} added successful */ boolean connectedNodeRegistration(InstanceIdentifier nodeIdent, List statTypes, Short nrOfSwitchTables); /** * All disconnected Nodes need be removed from stat list Nodes * * @param flowNode * @return true/false if the {@link Node} removed successful */ boolean disconnectedNodeUnregistration(InstanceIdentifier nodeIdent); /** * Method add new feature {@link StatCapabTypes} to Node identified by * nodeIdent -> InstanceIdentifier * * @param flowNode * @return true/false if the {@link StatCapabTypes} add successful */ boolean registerAdditionalNodeFeature(InstanceIdentifier nodeIdent, StatCapabTypes statCapab); /** * Method return true only and only if {@link StatPermCollector} contain * valid node registration in its internal {@link Node} map. * Otherwise return false. * * @param flowNode * @return */ boolean isProvidedFlowNodeActive(InstanceIdentifier nodeIdent); /** * Object notification for continue statistics collecting process. * It is call from collecting allStatistics methods as a future result for * Operational/DS statistic store call (does not matter in the outcome). */ void collectNextStatistics(TransactionId xid); /** * Method returns true if collector has registered some active nodes * otherwise return false. * * @return */ boolean hasActiveNodes(); }