Stats CLI support
diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
index 0c2188a..38b0d1e 100644
--- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
+++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
@@ -17,6 +17,7 @@
package net.floodlightcontroller.core.web;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@@ -28,6 +29,9 @@
import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
import org.projectfloodlight.openflow.protocol.OFMatchV3;
import org.projectfloodlight.openflow.protocol.OFOxmList;
+import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFPortStatsReply;
+import org.projectfloodlight.openflow.protocol.OFPortStatsRequest;
import org.projectfloodlight.openflow.protocol.OFStatsReply;
import org.projectfloodlight.openflow.protocol.OFStatsRequest;
import org.projectfloodlight.openflow.protocol.OFStatsType;
@@ -97,13 +101,6 @@
specificReq.setTableId((byte) 0xff);
req.setStatistics(Collections.singletonList((OFStatistics) specificReq));
requestLength += specificReq.getLength();
- } */else if (statType == OFStatsType.PORT) {
- log.debug("Switch Port Stats: req sent for all "
- + "ports in switch {}", sw.getStringId());
- req = sw.getFactory()
- .buildPortStatsRequest()
- .setPortNo(OFPort.ANY).setXid
- (sw.getNextTransactionId()).build();
} /*else if (statType == OFStatisticsType.QUEUE) {
OFQueueStatisticsRequest specificReq = new OFQueueStatisticsRequest();
specificReq.setPortNumber(OFPort.OFPP_ALL.getValue());
@@ -127,7 +124,43 @@
return values;
}
- protected List<OFStatsReply> getSwitchStatistics(String switchId, OFStatsType statType) {
+ protected List<OFPortStatsEntryMod> getSwitchPortStatistics(long switchId) {
+ IFloodlightProviderService floodlightProvider =
+ (IFloodlightProviderService) getContext().getAttributes().
+ get(IFloodlightProviderService.class.getCanonicalName());
+
+ IOFSwitch sw = floodlightProvider.getSwitches().get(switchId);
+ Future<List<OFStatsReply>> future;
+ List<OFStatsReply> values = null;
+ List<OFPortStatsEntryMod> portStats = null;
+
+ if (sw != null) {
+ log.debug("Switch Port Stats: req sent for all "
+ + "ports in switch {}", sw.getStringId());
+ OFPortStatsRequest req = sw.getFactory()
+ .buildPortStatsRequest()
+ .setPortNo(OFPort.ANY).setXid
+ (sw.getNextTransactionId()).build();
+
+ try {
+ future = sw.getStatistics(req);
+ values = future.get(10, TimeUnit.SECONDS);
+ portStats = new ArrayList<OFPortStatsEntryMod>();
+ for (OFPortStatsEntry entry : ((OFPortStatsReply)values.get(0)).getEntries()) {
+ OFPortStatsEntryMod entryMod = new OFPortStatsEntryMod(entry);
+ portStats.add(entryMod);
+ }
+ log.debug("Switch Port Stats Entries from switch {} are {}",
+ sw.getStringId(), portStats);
+ } catch (Exception e) {
+ log.error("Failure retrieving statistics from switch " + sw, e);
+ }
+ }
+
+ return portStats;
+ }
+
+ protected Object getSwitchStatistics(String switchId, OFStatsType statType) {
return getSwitchStatistics(HexString.toLong(switchId), statType);
}