2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.md.statistics.manager;
11 import java.util.List;
13 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
14 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
15 import org.opendaylight.controller.md.statistics.manager.StatPermCollector.StatCapabTypes;
16 import org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerConfig;
17 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
18 import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsListener;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.OpendaylightFlowTableStatisticsListener;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsListener;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsListener;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.OpendaylightPortStatisticsListener;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.OpendaylightQueueStatisticsListener;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
35 * org.opendaylight.controller.md.statistics.manager
38 * It represent a central point for whole module. Implementation
39 * StatisticsManager registers all Operation/DS {@link StatNotifyCommiter} and
40 * Config/DS {@StatListeningCommiter}, as well as {@link StatPermCollector}
41 * for statistic collecting and {@link StatRpcMsgManager} as Device RPCs provider.
42 * In next, StatisticsManager provides all DS contact Transaction services.
44 * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
46 * Created: Aug 27, 2014
48 public interface StatisticsManager extends AutoCloseable, TransactionChainListener {
51 * StatDataStoreOperation
52 * Interface represent functionality to submit changes to DataStore.
53 * Internal {@link TransactionChainListener} joining all DS commits
54 * to Set of chained changes for prevent often DataStore touches.
56 public interface StatDataStoreOperation {
59 * Apply all read / write (put|merge) operation
61 * @param {@link ReadWriteTransaction} tx
63 void applyOperation(ReadWriteTransaction tx);
68 * Method starts whole StatisticManager functionality
70 * @param {@link NotificationProviderService} notifService
71 * @param {@link RpcConsumerRegistry} rpcRegistry
72 * @param minReqNetMonitInt
74 void start(final NotificationProviderService notifService,
75 final RpcConsumerRegistry rpcRegistry);
78 * Method provides read/write DataStore functionality cross applyOperation
79 * defined in {@link StatDataStoreOperation}
81 * @param inventoryOper - operation for DataStore
83 void enqueue(final StatDataStoreOperation inventoryOper);
86 * Method wraps {@link StatisticCollector}.isProvidedFlowNodeActive method
87 * to provide parallel statCollection process for Set of Nodes. So it has to
88 * identify correct Node Set by NodeIdentifier
92 boolean isProvidedFlowNodeActive(InstanceIdentifier<Node> nodeIdent);
95 * Method wraps {@link StatPermCollector}.collectNextStatistics to provide
96 * parallel statCollection process for Set of Nodes. So it has to
97 * identify correct Node Set by NodeIdentifier.
101 void collectNextStatistics(InstanceIdentifier<Node> nodeIdent, TransactionId xid);
104 * Method wraps {@link StatPermCollector}.connectedNodeRegistration to provide
105 * parallel statCollection process for Set of Nodes. So it has to
106 * connect node to new or not full Node statCollector Set.
110 * @param nrOfSwitchTables
112 void connectedNodeRegistration(InstanceIdentifier<Node> nodeIdent,
113 List<StatCapabTypes> statTypes, Short nrOfSwitchTables);
116 * Method wraps {@link StatPermCollector}.disconnectedNodeUnregistration to provide
117 * parallel statCollection process for Set of Nodes. So it has to identify
118 * correct collector for disconnect node.
122 void disconnectedNodeUnregistration(InstanceIdentifier<Node> nodeIdent);
125 * Method wraps {@link StatPermCollector}.registerAdditionalNodeFeature to provide
126 * possibility to register additional Node Feature {@link StatCapabTypes} for
127 * statistics collecting.
132 void registerAdditionalNodeFeature(InstanceIdentifier<Node> nodeIdent, StatCapabTypes statCapab);
135 * Method provides access to Device RPC methods by wrapped
136 * internal method. In next {@link StatRpcMsgManager} is registered all
137 * Multipart device msg response and joining all to be able run all
138 * collected statistics in one time (easy identification Data for delete)
140 * @return {@link StatRpcMsgManager}
142 StatRpcMsgManager getRpcMsgManager();
145 * Define Method : {@link org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode}
146 * Operational/DS data change listener -> impl. target -> register FlowCapableNode to Statistic Collecting process
147 * @return {@link StatNodeRegistration}
149 StatNodeRegistration getNodeRegistrator();
152 * Define Method : Flow Config/DS data change listener -> impl. target ->
153 * -> make pair between Config/DS FlowId and Device Flow response Hash
156 StatListeningCommiter<Flow, OpendaylightFlowStatisticsListener> getFlowListenComit();
159 * Define Method : Meter Config/DS data change listener and Operation/DS notify commit
163 StatListeningCommiter<Meter, OpendaylightMeterStatisticsListener> getMeterListenCommit();
166 * Define Method : Group Config/DS data change listener and Operation/DS notify commit
170 StatListeningCommiter<Group, OpendaylightGroupStatisticsListener> getGroupListenCommit();
173 * Define Method : Queue Config/DS change listener and Operation/DS notify commit functionality
176 StatListeningCommiter<Queue, OpendaylightQueueStatisticsListener> getQueueNotifyCommit();
179 * Define Method : Table Operation/DS notify commit functionality
182 StatNotifyCommiter<OpendaylightFlowTableStatisticsListener> getTableNotifCommit();
185 * Define Method : Port Operation/DS notify commit functionality
188 StatNotifyCommiter<OpendaylightPortStatisticsListener> getPortNotifyCommit();
190 StatisticsManagerConfig getConfiguration();