1 package org.opendaylight.openflowplugin.test;
3 import java.util.Iterator;
6 import org.eclipse.osgi.framework.console.CommandInterpreter;
7 import org.eclipse.osgi.framework.console.CommandProvider;
8 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
9 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.AggregateFlowStatisticsData;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowStatisticsData;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsData;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.QueueKey;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.FlowCapableNodeConnectorStatisticsData;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsData;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.osgi.framework.BundleContext;
31 public class OpenflowpluginStatsTestCommandProvider implements CommandProvider {
33 private DataProviderService dataProviderService;
34 private final BundleContext ctx;
36 public OpenflowpluginStatsTestCommandProvider(BundleContext ctx) {
41 public void onSessionInitiated(ProviderContext session) {
42 dataProviderService = session.getSALService(DataProviderService.class);
43 ctx.registerService(CommandProvider.class.getName(), this, null);
47 public void _portStats(CommandInterpreter ci) {
48 int nodeConnectorCount = 0;
49 int nodeConnectorStatsCount = 0;
50 List<Node> nodes = getNodes();
51 for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
52 NodeKey nodeKey = iterator.next().getKey();
53 InstanceIdentifier<Node> nodeRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).toInstance();
54 Node node = (Node)dataProviderService.readOperationalData(nodeRef);
55 List<NodeConnector> ports = node.getNodeConnector();
56 for (Iterator<NodeConnector> iterator2 = ports.iterator(); iterator2.hasNext();) {
58 NodeConnectorKey nodeConnectorKey = iterator2.next().getKey();
59 InstanceIdentifier<NodeConnector> connectorRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).child(NodeConnector.class, nodeConnectorKey).toInstance();
60 NodeConnector nodeConnector = (NodeConnector)dataProviderService.readOperationalData(connectorRef);
61 FlowCapableNodeConnectorStatisticsData data = nodeConnector.getAugmentation(FlowCapableNodeConnectorStatisticsData.class);
64 nodeConnectorStatsCount++;
69 if(nodeConnectorCount == nodeConnectorStatsCount)
71 ci.println("portStats - Success");
75 ci.println("portStats - Failed");
76 ci.println("System fetchs stats data in 50 seconds interval, so pls wait and try again.");
82 public void _portDescStats(CommandInterpreter ci) {
83 int nodeConnectorCount = 0;
84 int nodeConnectorDescStatsCount = 0;
85 List<Node> nodes = getNodes();
86 for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
87 NodeKey nodeKey = iterator.next().getKey();
88 InstanceIdentifier<Node> nodeRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).toInstance();
89 Node node = (Node)dataProviderService.readOperationalData(nodeRef);
91 List<NodeConnector> ports = node.getNodeConnector();
92 for (Iterator<NodeConnector> iterator2 = ports.iterator(); iterator2.hasNext();) {
94 NodeConnectorKey nodeConnectorKey = iterator2.next().getKey();
95 InstanceIdentifier<FlowCapableNodeConnector> connectorRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).child(NodeConnector.class, nodeConnectorKey).augmentation(FlowCapableNodeConnector.class).toInstance();
96 FlowCapableNodeConnector nodeConnector = (FlowCapableNodeConnector)dataProviderService.readOperationalData(connectorRef);
97 if(null != nodeConnector.getName() &&
98 null != nodeConnector.getCurrentFeature() &&
99 null != nodeConnector.getState() &&
100 null != nodeConnector.getHardwareAddress() &&
101 null != nodeConnector.getPortNumber())
103 nodeConnectorDescStatsCount++;
108 if(nodeConnectorCount == nodeConnectorDescStatsCount)
110 ci.println("portDescStats - Success");
114 ci.println("portDescStats - Failed");
115 ci.println("System fetchs stats data in 50 seconds interval, so pls wait and try again.");
120 public void _flowStats(CommandInterpreter ci) {
122 int flowStatsCount = 0;
123 List<Node> nodes = getNodes();
124 for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
125 NodeKey nodeKey = iterator.next().getKey();
126 InstanceIdentifier<FlowCapableNode> nodeRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).toInstance();
127 FlowCapableNode node = (FlowCapableNode)dataProviderService.readOperationalData(nodeRef);
128 List<Table> tables = node.getTable();
129 for (Iterator<Table> iterator2 = tables.iterator(); iterator2.hasNext();) {
130 TableKey tableKey = iterator2.next().getKey();
131 InstanceIdentifier<Table> tableRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).child(Table.class, tableKey).toInstance();
132 Table table = (Table)dataProviderService.readOperationalData(tableRef);
133 List<Flow> flows = table.getFlow();
134 for (Iterator<Flow> iterator3 = flows.iterator(); iterator3.hasNext();) {
136 FlowKey flowKey = iterator3.next().getKey();
137 InstanceIdentifier<Flow> flowRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).child(Table.class, tableKey).child(Flow.class, flowKey).toInstance();
138 Flow flow = (Flow)dataProviderService.readOperationalData(flowRef);
139 FlowStatisticsData data = flow.getAugmentation(FlowStatisticsData.class);
148 if(flowCount == flowStatsCount)
150 ci.println("flowStats - Success");
154 ci.println("flowStats - Failed");
155 ci.println("System fetchs stats data in 50 seconds interval, so pls wait and try again.");
160 public void _queueStats(CommandInterpreter ci) {
161 boolean isFound = false;
162 List<Node> nodes = getNodes();
163 for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
164 NodeKey nodeKey = iterator.next().getKey();
165 InstanceIdentifier<Node> nodeRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey)
167 Node node = (Node) dataProviderService.readOperationalData(nodeRef);
168 List<NodeConnector> ports = node.getNodeConnector();
169 for (Iterator<NodeConnector> iterator2 = ports.iterator(); iterator2.hasNext();) {
170 NodeConnectorKey nodeConnectorKey = iterator2.next().getKey();
171 InstanceIdentifier<FlowCapableNodeConnector> connectorRef = InstanceIdentifier.builder(Nodes.class)
172 .child(Node.class, nodeKey).child(NodeConnector.class, nodeConnectorKey)
173 .augmentation(FlowCapableNodeConnector.class).toInstance();
174 FlowCapableNodeConnector nodeConnector = (FlowCapableNodeConnector) dataProviderService
175 .readOperationalData(connectorRef);
176 // queue list is always empty, bug 307 is raised.
177 List<Queue> queueList = nodeConnector.getQueue();
179 for (Iterator<Queue> iterator3 = queueList.iterator(); iterator3.hasNext();) {
180 QueueKey queueKey = iterator3.next().getKey();
181 InstanceIdentifier<Queue> queueRef = InstanceIdentifier.builder(Nodes.class)
182 .child(Node.class, nodeKey).child(NodeConnector.class, nodeConnectorKey)
183 .augmentation(FlowCapableNodeConnector.class).child(Queue.class, queueKey).toInstance();
184 Queue queue = (Queue) dataProviderService.readOperationalData(queueRef);
185 FlowCapableNodeConnectorQueueStatisticsData data = queue
186 .getAugmentation(FlowCapableNodeConnectorQueueStatisticsData.class);
195 ci.println("queueStats - Success");
197 ci.println("queueStats - Failed");
198 ci.println("System fetchs stats data in 50 seconds interval, so pls wait and try again.");
203 public void _tableStats(CommandInterpreter ci) {
205 int tableStatsCount = 0;
206 List<Node> nodes = getNodes();
207 for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
208 NodeKey nodeKey = iterator.next().getKey();
209 InstanceIdentifier<FlowCapableNode> nodeRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).toInstance();
210 FlowCapableNode node = (FlowCapableNode)dataProviderService.readOperationalData(nodeRef);
212 List<Table> tables = node.getTable();
213 for (Iterator<Table> iterator2 = tables.iterator(); iterator2.hasNext();) {
215 TableKey tableKey = iterator2.next().getKey();
216 InstanceIdentifier<Table> tableRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).child(Table.class, tableKey).toInstance();
217 Table table = (Table)dataProviderService.readOperationalData(tableRef);
218 FlowTableStatisticsData data = table.getAugmentation(FlowTableStatisticsData.class);
226 if(tableCount == tableStatsCount)
228 ci.println("tableStats - Success");
232 ci.println("tableStats - Failed");
233 ci.println("System fetchs stats data in 50 seconds interval, so pls wait and try again.");
238 public void _aggregateStats(CommandInterpreter ci) {
239 int aggregateFlowCount = 0;
240 int aggerateFlowStatsCount = 0;
241 List<Node> nodes = getNodes();
242 for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
243 NodeKey nodeKey = iterator.next().getKey();
244 InstanceIdentifier<FlowCapableNode> nodeRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).toInstance();
245 FlowCapableNode node = (FlowCapableNode)dataProviderService.readOperationalData(nodeRef);
247 List<Table> tables = node.getTable();
248 for (Iterator<Table> iterator2 = tables.iterator(); iterator2.hasNext();) {
249 aggregateFlowCount++;
250 TableKey tableKey = iterator2.next().getKey();
251 InstanceIdentifier<Table> tableRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).child(Table.class, tableKey).toInstance();
252 Table table = (Table)dataProviderService.readOperationalData(tableRef);
253 AggregateFlowStatisticsData data = table.getAugmentation(AggregateFlowStatisticsData.class);
256 aggerateFlowStatsCount++;
261 if(aggregateFlowCount == aggerateFlowStatsCount)
263 ci.println("aggregateStats - Success");
267 ci.println("aggregateStats - Failed");
268 ci.println("System fetchs stats data in 50 seconds interval, so pls wait and try again.");
273 public void _descStats(CommandInterpreter ci) {
275 int descStatsCount = 0;
276 List<Node> nodes = getNodes();
277 for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
279 NodeKey nodeKey = iterator.next().getKey();
280 InstanceIdentifier<FlowCapableNode> nodeRef = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).augmentation(FlowCapableNode.class).toInstance();
281 FlowCapableNode node = (FlowCapableNode)dataProviderService.readOperationalData(nodeRef);
282 if(null != node.getHardware() &&
283 null != node.getManufacturer() &&
284 null != node.getSoftware())
290 if(descCount == descStatsCount)
292 ci.println("descStats - Success");
296 ci.println("descStats - Failed");
297 ci.println("System fetchs stats data in 50 seconds interval, so pls wait and try again.");
302 private List<Node> getNodes()
304 Nodes nodes = (Nodes)dataProviderService.readOperationalData(InstanceIdentifier.builder(Nodes.class).toInstance());
307 throw new RuntimeException("nodes are not found, pls add the node.");
309 return nodes.getNode();
315 public String getHelp() {
316 StringBuffer help = new StringBuffer();
317 help.append("---MD-SAL Stats test module---\n");
318 return help.toString();