From f60ae53acb25a5e7fb6fea547fe66ab7865b84b1 Mon Sep 17 00:00:00 2001
From: Ryan Izard <rizard@g.clemson.edu>
Date: Fri, 21 Aug 2015 16:29:11 -0400
Subject: [PATCH] Fixed port stats reply serialization where not all ports
 would be shown if sent in different messages.

---
 .../web/serializers/StatsReplySerializer.java | 49 ++++++++++---------
 1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java
index 67474cbab..3481e9745 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java
@@ -689,31 +689,36 @@ public class StatsReplySerializer extends JsonSerializer<StatsReply> {
 		jGen.writeEndArray();
 	} 
 
-
-	public static void serializePortReply(List<OFPortStatsReply> portReplies, JsonGenerator jGen) throws IOException, JsonProcessingException{
-		OFPortStatsReply portReply = portReplies.get(0); // we will get only one PortReply and it will contains many OFPortStatsEntry ?
-		jGen.writeStringField("version", portReply.getVersion().toString()); //return the enum name
-		jGen.writeFieldName("port");
+	public static void serializePortReply(List<OFPortStatsReply> portReplies, JsonGenerator jGen) throws IOException, JsonProcessingException{		
+		jGen.writeFieldName("port_reply");
 		jGen.writeStartArray();
-		for(OFPortStatsEntry entry : portReply.getEntries()) {
+		for (OFPortStatsReply portReply : portReplies) {
 			jGen.writeStartObject();
-			jGen.writeStringField("portNumber",entry.getPortNo().toString());
-			jGen.writeNumberField("receivePackets", entry.getRxPackets().getValue());
-			jGen.writeNumberField("transmitPackets", entry.getTxPackets().getValue());
-			jGen.writeNumberField("receiveBytes", entry.getRxBytes().getValue());
-			jGen.writeNumberField("transmitBytes", entry.getTxBytes().getValue());
-			jGen.writeNumberField("receiveDropped", entry.getRxDropped().getValue());
-			jGen.writeNumberField("transmitDropped", entry.getTxDropped().getValue());
-			jGen.writeNumberField("receiveErrors", entry.getRxErrors().getValue());
-			jGen.writeNumberField("transmitErrors", entry.getTxErrors().getValue());
-			jGen.writeNumberField("receiveFrameErrors", entry.getRxFrameErr().getValue());
-			jGen.writeNumberField("receiveOverrunErrors", entry.getRxOverErr().getValue());
-			jGen.writeNumberField("receiveCRCErrors", entry.getRxCrcErr().getValue());
-			jGen.writeNumberField("collisions", entry.getCollisions().getValue());
-			if (OFVersion.OF_13 == entry.getVersion()) {
-				jGen.writeNumberField("durationSec", entry.getDurationSec());
-				jGen.writeNumberField("durationNsec", entry.getDurationNsec());
+			jGen.writeStringField("version", portReply.getVersion().toString()); //return the enum name
+			jGen.writeFieldName("port");
+			jGen.writeStartArray();
+			for(OFPortStatsEntry entry : portReply.getEntries()) {
+				jGen.writeStartObject();
+				jGen.writeStringField("portNumber",entry.getPortNo().toString());
+				jGen.writeNumberField("receivePackets", entry.getRxPackets().getValue());
+				jGen.writeNumberField("transmitPackets", entry.getTxPackets().getValue());
+				jGen.writeNumberField("receiveBytes", entry.getRxBytes().getValue());
+				jGen.writeNumberField("transmitBytes", entry.getTxBytes().getValue());
+				jGen.writeNumberField("receiveDropped", entry.getRxDropped().getValue());
+				jGen.writeNumberField("transmitDropped", entry.getTxDropped().getValue());
+				jGen.writeNumberField("receiveErrors", entry.getRxErrors().getValue());
+				jGen.writeNumberField("transmitErrors", entry.getTxErrors().getValue());
+				jGen.writeNumberField("receiveFrameErrors", entry.getRxFrameErr().getValue());
+				jGen.writeNumberField("receiveOverrunErrors", entry.getRxOverErr().getValue());
+				jGen.writeNumberField("receiveCRCErrors", entry.getRxCrcErr().getValue());
+				jGen.writeNumberField("collisions", entry.getCollisions().getValue());
+				if (OFVersion.OF_13 == entry.getVersion()) {
+					jGen.writeNumberField("durationSec", entry.getDurationSec());
+					jGen.writeNumberField("durationNsec", entry.getDurationNsec());
+				}
+				jGen.writeEndObject();
 			}
+			jGen.writeEndArray();
 			jGen.writeEndObject();
 		}
 		jGen.writeEndArray();
-- 
GitLab