Thomas Vachuska

ONOS-249 Added summary of flow rules for the selected device.

Change-Id: Ie2903e87e1284bc6fae49b81d9629ce913a1af99
...@@ -37,6 +37,8 @@ import org.onlab.onos.net.HostLocation; ...@@ -37,6 +37,8 @@ import org.onlab.onos.net.HostLocation;
37 import org.onlab.onos.net.Link; 37 import org.onlab.onos.net.Link;
38 import org.onlab.onos.net.device.DeviceEvent; 38 import org.onlab.onos.net.device.DeviceEvent;
39 import org.onlab.onos.net.device.DeviceService; 39 import org.onlab.onos.net.device.DeviceService;
40 +import org.onlab.onos.net.flow.FlowEntry;
41 +import org.onlab.onos.net.flow.FlowRuleService;
40 import org.onlab.onos.net.host.HostEvent; 42 import org.onlab.onos.net.host.HostEvent;
41 import org.onlab.onos.net.host.HostService; 43 import org.onlab.onos.net.host.HostService;
42 import org.onlab.onos.net.intent.Intent; 44 import org.onlab.onos.net.intent.Intent;
...@@ -106,6 +108,7 @@ public abstract class TopologyViewMessages { ...@@ -106,6 +108,7 @@ public abstract class TopologyViewMessages {
106 protected final HostService hostService; 108 protected final HostService hostService;
107 protected final MastershipService mastershipService; 109 protected final MastershipService mastershipService;
108 protected final IntentService intentService; 110 protected final IntentService intentService;
111 + protected final FlowRuleService flowService;
109 protected final StatisticService statService; 112 protected final StatisticService statService;
110 113
111 protected final ObjectMapper mapper = new ObjectMapper(); 114 protected final ObjectMapper mapper = new ObjectMapper();
...@@ -126,6 +129,7 @@ public abstract class TopologyViewMessages { ...@@ -126,6 +129,7 @@ public abstract class TopologyViewMessages {
126 hostService = directory.get(HostService.class); 129 hostService = directory.get(HostService.class);
127 mastershipService = directory.get(MastershipService.class); 130 mastershipService = directory.get(MastershipService.class);
128 intentService = directory.get(IntentService.class); 131 intentService = directory.get(IntentService.class);
132 + flowService = directory.get(FlowRuleService.class);
129 statService = directory.get(StatisticService.class); 133 statService = directory.get(StatisticService.class);
130 } 134 }
131 135
...@@ -412,11 +416,13 @@ public abstract class TopologyViewMessages { ...@@ -412,11 +416,13 @@ public abstract class TopologyViewMessages {
412 protected ObjectNode deviceDetails(DeviceId deviceId, long sid) { 416 protected ObjectNode deviceDetails(DeviceId deviceId, long sid) {
413 Device device = deviceService.getDevice(deviceId); 417 Device device = deviceService.getDevice(deviceId);
414 Annotations annot = device.annotations(); 418 Annotations annot = device.annotations();
419 + String name = annot.value("name");
415 int portCount = deviceService.getPorts(deviceId).size(); 420 int portCount = deviceService.getPorts(deviceId).size();
421 + int flowCount = getFlowCount(deviceId);
416 return envelope("showDetails", sid, 422 return envelope("showDetails", sid,
417 - json(deviceId.toString(), 423 + json(isNullOrEmpty(name) ? deviceId.toString() : name,
418 device.type().toString().toLowerCase(), 424 device.type().toString().toLowerCase(),
419 - new Prop("Name", annot.value("name")), 425 + new Prop("URI", deviceId.toString()),
420 new Prop("Vendor", device.manufacturer()), 426 new Prop("Vendor", device.manufacturer()),
421 new Prop("H/W Version", device.hwVersion()), 427 new Prop("H/W Version", device.hwVersion()),
422 new Prop("S/W Version", device.swVersion()), 428 new Prop("S/W Version", device.swVersion()),
...@@ -425,20 +431,34 @@ public abstract class TopologyViewMessages { ...@@ -425,20 +431,34 @@ public abstract class TopologyViewMessages {
425 new Prop("Latitude", annot.value("latitude")), 431 new Prop("Latitude", annot.value("latitude")),
426 new Prop("Longitude", annot.value("longitude")), 432 new Prop("Longitude", annot.value("longitude")),
427 new Prop("Ports", Integer.toString(portCount)), 433 new Prop("Ports", Integer.toString(portCount)),
434 + new Prop("Flows", Integer.toString(flowCount)),
428 new Separator(), 435 new Separator(),
429 new Prop("Master", master(deviceId)))); 436 new Prop("Master", master(deviceId))));
430 } 437 }
431 438
439 + protected int getFlowCount(DeviceId deviceId) {
440 + int count = 0;
441 + Iterator<FlowEntry> it = flowService.getFlowEntries(deviceId).iterator();
442 + while (it.hasNext()) {
443 + count++;
444 + it.next();
445 + }
446 + return count;
447 + }
448 +
432 // Returns host details response. 449 // Returns host details response.
433 protected ObjectNode hostDetails(HostId hostId, long sid) { 450 protected ObjectNode hostDetails(HostId hostId, long sid) {
434 Host host = hostService.getHost(hostId); 451 Host host = hostService.getHost(hostId);
435 Annotations annot = host.annotations(); 452 Annotations annot = host.annotations();
436 String type = annot.value("type"); 453 String type = annot.value("type");
454 + String name = annot.value("name");
455 + String vlan = host.vlan().toString();
437 return envelope("showDetails", sid, 456 return envelope("showDetails", sid,
438 - json(hostId.toString(), isNullOrEmpty(type) ? "host" : type, 457 + json(isNullOrEmpty(name) ? hostId.toString() : name,
439 - new Prop("Name", annot.value("name")), 458 + isNullOrEmpty(type) ? "host" : type,
440 new Prop("MAC", host.mac().toString()), 459 new Prop("MAC", host.mac().toString()),
441 - new Prop("IP", host.ipAddresses().toString()), 460 + new Prop("IP", host.ipAddresses().toString().replaceAll("[\\[\\]]", "")),
461 + new Prop("VLAN", vlan.equals("-1") ? "none" : vlan),
442 new Separator(), 462 new Separator(),
443 new Prop("Latitude", annot.value("latitude")), 463 new Prop("Latitude", annot.value("latitude")),
444 new Prop("Longitude", annot.value("longitude")))); 464 new Prop("Longitude", annot.value("longitude"))));
......