for(String dpid : switchDpids)
futureStats.put(dpid, SwitchJSON.startSwitchRestCalls(dpid, false));
for(String dpid : futureStats.keySet()){
Switch sw = null;
boolean updateSwitch = false;
// Check to see if this switch already exists, if it does just update it
if(!oldSwitches.isEmpty()){
for(Switch oldSwitch : oldSwitches){
if (oldSwitch.getDpid().equals(dpid)){
sw = oldSwitch;
updateSwitch = true;
}
}
}
// If it doesn't exist we make a new Switch object
if(!updateSwitch)
sw = new Switch(dpid);
List<Port> ports = new ArrayList<Port>();
Map<String, Future<Object>> stats;
JSONObject descriptionObj = null, aggregateObj = null, portObj = null, featuresObj = null;
try {
stats = (Map<String, Future<Object>>) futureStats.get(dpid).get(5L, TimeUnit.SECONDS);
// Don't bother if we are updating this switch, since description is static
if(!updateSwitch)
descriptionObj = (JSONObject)stats.get("description").get(5L, TimeUnit.SECONDS);
aggregateObj = (JSONObject)stats.get("aggregate").get(5L, TimeUnit.SECONDS);
portObj = (JSONObject)stats.get("port").get(5L, TimeUnit.SECONDS);
featuresObj = (JSONObject)stats.get("features").get(5L, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Description stats
if(!updateSwitch && descriptionObj != null){
descriptionObj = descriptionObj.getJSONArray(dpid).getJSONObject(0);
sw.setManufacturerDescription(descriptionObj.getString("manufacturerDescription"));
sw.setHardwareDescription(descriptionObj.getString("hardwareDescription"));
sw.setSoftwareDescription(descriptionObj.getString("softwareDescription"));
sw.setSerialNumber(descriptionObj.getString("serialNumber"));
sw.setDatapathDescription(descriptionObj.getString("datapathDescription"));
}
// Aggregate stats, ignore
if(aggregateObj != null){
aggregateObj = aggregateObj.getJSONArray(dpid).getJSONObject(0);
sw.setPacketCount(String.valueOf(aggregateObj.getInt("packetCount")));
sw.setByteCount(String.valueOf(aggregateObj.getInt("byteCount")));
sw.setFlowCount(String.valueOf(aggregateObj.getInt("flowCount")));
}
// Flow Stats
sw.setFlows(FlowJSON.getFlows(dpid));
// Port and Features stats
JSONArray json = portObj.getJSONArray(sw.getDpid());
JSONObject objtwo = featuresObj.getJSONObject(sw.getDpid());
JSONArray jsontwo = objtwo.getJSONArray("ports");
for(int i = 0; i < json.length(); i++)
{
obj = (JSONObject)json.get(i);
Port port = new Port(String.valueOf(obj.getInt("portNumber")));
port.setReceivePackets(FormatLong.formatPackets(obj.getLong("receivePackets"), false, false));
port.setTransmitPackets(FormatLong.formatPackets(obj.getLong("transmitPackets"), false, false));
port.setReceiveBytes(FormatLong.formatBytes(obj.getLong("receiveBytes"), true, false));
port.setTransmitBytes(FormatLong.formatBytes(obj.getLong("transmitBytes"), true, false));
port.setReceiveDropped(String.valueOf(obj.getLong("receiveDropped")));
port.setTransmitDropped(String.valueOf(obj.getLong("transmitDropped")));
port.setReceiveErrors(String.valueOf(obj.getLong("receiveErrors")));
port.setTransmitErrors(String.valueOf(obj.getLong("transmitErrors")));
port.setReceieveFrameErrors(String.valueOf(obj.getInt("receiveFrameErrors")));
port.setReceieveOverrunErrors(String.valueOf(obj.getInt("receiveOverrunErrors")));
port.setReceiveCRCErrors(String.valueOf(obj.getInt("receiveCRCErrors")));
port.setCollisions(String.valueOf(obj.getInt("collisions")));
if(!jsontwo.isNull(i))
{
obj = (JSONObject)jsontwo.get(i);
port.setAdvertisedFeatures(String.valueOf(obj.getInt("advertisedFeatures")));
port.setConfig(String.valueOf(obj.getInt("config")));
port.setCurrentFeatures(String.valueOf(obj.getInt("currentFeatures")));
port.setHardwareAddress(obj.getString("hardwareAddress"));
port.setName(obj.getString("name"));
port.setPeerFeatures(String.valueOf(obj.getInt("peerFeatures")));
port.setState(String.valueOf(obj.getInt("state")));
port.setSupportedFeatures(String.valueOf(obj.getInt("supportedFeatures")));
}
ports.add(port);
}
sw.setPorts(ports);
switches.add(sw);
}
return switches;
}