group stats improvement
diff --git a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
new file mode 100644
index 0000000..ead1aff
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
@@ -0,0 +1,22 @@
+package net.floodlightcontroller.core.web;
+
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+//@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
+public class OFFlowStatsEntryMod {
+ private OFFlowStatsEntry FlowStatsEntry = null;
+
+ public OFFlowStatsEntryMod() {
+ }
+
+ public OFFlowStatsEntryMod(OFFlowStatsEntry FlowStatsEntry) {
+ this.FlowStatsEntry = FlowStatsEntry;
+ }
+
+ public OFFlowStatsEntry getFlowStatsEntr() {
+ return this.FlowStatsEntry;
+ }
+
+}
diff --git a/src/main/java/net/floodlightcontroller/core/web/OFGroupStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFGroupStatsEntryMod.java
new file mode 100644
index 0000000..6ddb430
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/OFGroupStatsEntryMod.java
@@ -0,0 +1,21 @@
+package net.floodlightcontroller.core.web;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
+import net.floodlightcontroller.core.web.serializers.OFGroupStatsEntryModSerializer;
+
+@JsonSerialize(using = OFGroupStatsEntryModSerializer.class)
+public class OFGroupStatsEntryMod {
+ private OFGroupStatsEntry GroupStatsEntry = null;
+
+ public OFGroupStatsEntryMod() {
+ }
+
+ public OFGroupStatsEntryMod(OFGroupStatsEntry GroupStatsEntry) {
+ this.GroupStatsEntry = GroupStatsEntry;
+ }
+
+ public OFGroupStatsEntry getGroupStatsEntry() {
+ return this.GroupStatsEntry;
+ }
+}
diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
index c7dd69a..def6a7d 100644
--- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
+++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
@@ -29,6 +29,8 @@
import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
+import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFGroupStatsReply;
import org.projectfloodlight.openflow.protocol.OFMatchV3;
import org.projectfloodlight.openflow.protocol.OFOxmList;
import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;
@@ -123,6 +125,20 @@
+ "ports in switch {}", sw.getStringId());
req = sw.getFactory().buildGroupStatsRequest().setXid
(sw.getNextTransactionId()).build();
+ List<OFGroupStatsEntryMod> groupStats = new ArrayList<OFGroupStatsEntryMod>();
+ try {
+ future = sw.getStatistics(req);
+ values = future.get(10, TimeUnit.SECONDS);
+ for (OFGroupStatsEntry entry : ((OFGroupStatsReply)values.get(0)).getEntries()) {
+ OFGroupStatsEntryMod entryMod = new OFGroupStatsEntryMod(entry);
+ groupStats.add(entryMod);
+ }
+ log.debug("Switch Group Stats Entries from switch {} are {}",
+ sw.getStringId(), groupStats);
+ } catch (Exception e) {
+ log.error("Failure retrieving statistics from switch " + sw, e);
+ }
+ return groupStats;
}
else if (statType == OFStatsType.GROUP_DESC){
log.debug("Switch Group Desc Stats: req sent for all "
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
new file mode 100644
index 0000000..2cce2d8
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -0,0 +1,25 @@
+package net.floodlightcontroller.core.web.serializers;
+
+import java.io.IOException;
+
+import net.floodlightcontroller.core.web.OFFlowStatsEntryMod;
+
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+
+public class OFFlowStatsEntryModSerializer extends SerializerBase<OFFlowStatsEntryMod> {
+
+ protected OFFlowStatsEntryModSerializer(){
+ super(OFFlowStatsEntryMod.class);
+ }
+
+ @Override
+ public void serialize(OFFlowStatsEntryMod FlowStatsEntryMod, JsonGenerator jGen,
+ SerializerProvider sp) throws IOException,
+ JsonGenerationException {
+
+ }
+
+}
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
index 097290b..b4bddc7 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
@@ -22,15 +22,17 @@
}
@Override
- public void serialize(OFGroupDescStatsEntryMod GroupDescStatsModEntry, JsonGenerator jGen,
+ public void serialize(OFGroupDescStatsEntryMod groupDescStatsModEntry, JsonGenerator jGen,
SerializerProvider sp) throws IOException,
JsonGenerationException {
- OFGroupDescStatsEntry GroupStatsEntryMod = GroupDescStatsModEntry.getGroupDescStatsEntry();
- List<OFBucket> Buckets = GroupStatsEntryMod.getBuckets();
+ OFGroupDescStatsEntry groupDescStatsEntryMod = groupDescStatsModEntry.getGroupDescStatsEntry();
+ List<OFBucket> Buckets = groupDescStatsEntryMod.getBuckets();
jGen.writeStartObject();
- jGen.writeNumberField("groupId", GroupStatsEntryMod.getGroup().getGroupNumber());
- jGen.writeStringField("groupType", GroupStatsEntryMod.getGroupType().name());
+ jGen.writeNumberField("groupId", groupDescStatsEntryMod.getGroup().getGroupNumber());
+ jGen.writeStringField("groupType", groupDescStatsEntryMod.getGroupType().name());
+ jGen.writeArrayFieldStart("bucketsActions");
for (OFBucket bucket : Buckets){
+ jGen.writeStartObject();
List<OFAction> actions = bucket.getActions();
for (OFAction action : actions ){
if(action.getType().compareTo(OFActionType.SET_FIELD) == 0){
@@ -46,7 +48,9 @@
jGen.writeNumberField("OUTPPUT", ((OFActionOutput)action).getPort().getPortNumber());
}
}
+ jGen.writeEndObject();
}
+ jGen.writeEndArray();
jGen.writeEndObject();
}
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupStatsEntryModSerializer.java
new file mode 100644
index 0000000..8b2bb72
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupStatsEntryModSerializer.java
@@ -0,0 +1,43 @@
+package net.floodlightcontroller.core.web.serializers;
+import java.io.IOException;
+import java.util.List;
+
+import net.floodlightcontroller.core.web.OFGroupStatsEntryMod;
+
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.SerializerProvider;
+import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.projectfloodlight.openflow.protocol.OFBucketCounter;
+import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
+
+public class OFGroupStatsEntryModSerializer extends SerializerBase<OFGroupStatsEntryMod>{
+
+ protected OFGroupStatsEntryModSerializer(){
+ super(OFGroupStatsEntryMod.class);
+ }
+
+ @Override
+ public void serialize(OFGroupStatsEntryMod groupStatsEntryMod, JsonGenerator jGen,
+ SerializerProvider sp) throws IOException,
+ JsonGenerationException {
+ OFGroupStatsEntry groupStatsModEntry = groupStatsEntryMod.getGroupStatsEntry();
+ List<OFBucketCounter> bucketCounters = groupStatsModEntry.getBucketStats();
+ jGen.writeStartObject();
+ jGen.writeNumberField("groupId", groupStatsModEntry.getGroup().getGroupNumber());
+ jGen.writeNumberField("packetCount", groupStatsModEntry.getPacketCount().getValue());
+ jGen.writeNumberField("byteCount", groupStatsModEntry.getByteCount().getValue());
+ jGen.writeNumberField("durationNsec", groupStatsModEntry.getDurationNsec());
+ jGen.writeNumberField("durationSec", groupStatsModEntry.getDurationSec());
+ jGen.writeArrayFieldStart("bucketStats");
+ for (OFBucketCounter bucketCouter : bucketCounters){
+ jGen.writeStartObject();
+ jGen.writeNumberField("pktCount", bucketCouter.getPacketCount().getValue());
+ jGen.writeNumberField("byteCount", bucketCouter.getByteCount().getValue());
+ jGen.writeEndObject();
+ }
+ jGen.writeEndArray();
+ jGen.writeEndObject();
+ }
+
+}