[ONOS-5155] Exposed delta statistics via northbound REST
Change-Id: I04d9ec04c92bccd7bd5b5fd23d61be241a67d524
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/StatisticsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/StatisticsWebResource.java
index 08059a8..5dc2d5e 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/StatisticsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/StatisticsWebResource.java
@@ -245,4 +245,90 @@
return ok(root).build();
}
+ /**
+ * Gets port delta statistics of all devices.
+ * @onos.rsModel StatisticsPorts
+ * @return 200 OK with JSON encoded array of port delta statistics
+ */
+ @GET
+ @Path("delta/ports")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPortDeltaStatistics() {
+ final DeviceService service = get(DeviceService.class);
+ final Iterable<Device> devices = service.getDevices();
+ final ObjectNode root = mapper().createObjectNode();
+ final ArrayNode rootArrayNode = root.putArray("statistics");
+ for (final Device device : devices) {
+ final ObjectNode deviceStatsNode = mapper().createObjectNode();
+ deviceStatsNode.put("device", device.id().toString());
+ final ArrayNode statisticsNode = deviceStatsNode.putArray("ports");
+ final Iterable<PortStatistics> portStatsEntries = service.getPortDeltaStatistics(device.id());
+ if (portStatsEntries != null) {
+ for (final PortStatistics entry : portStatsEntries) {
+ statisticsNode.add(codec(PortStatistics.class).encode(entry, this));
+ }
+ }
+ rootArrayNode.add(deviceStatsNode);
+ }
+
+ return ok(root).build();
+ }
+
+ /**
+ * Gets port delta statistics of a specified devices.
+ * @onos.rsModel StatisticsPorts
+ * @param deviceId device ID
+ * @return 200 OK with JSON encoded array of port delta statistics
+ */
+ @GET
+ @Path("delta/ports/{deviceId}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPortDeltaStatisticsByDeviceId(@PathParam("deviceId") String deviceId) {
+ final DeviceService service = get(DeviceService.class);
+ final Iterable<PortStatistics> portStatsEntries =
+ service.getPortDeltaStatistics(DeviceId.deviceId(deviceId));
+ final ObjectNode root = mapper().createObjectNode();
+ final ArrayNode rootArrayNode = root.putArray("statistics");
+ final ObjectNode deviceStatsNode = mapper().createObjectNode();
+ deviceStatsNode.put("device", deviceId);
+ final ArrayNode statisticsNode = deviceStatsNode.putArray("ports");
+ if (portStatsEntries != null) {
+ for (final PortStatistics entry : portStatsEntries) {
+ statisticsNode.add(codec(PortStatistics.class).encode(entry, this));
+ }
+ }
+ rootArrayNode.add(deviceStatsNode);
+
+ return ok(root).build();
+ }
+
+ /**
+ * Gets port delta statistics of a specified device and port.
+ * @onos.rsModel StatisticsPorts
+ * @param deviceId device ID
+ * @param port port
+ * @return 200 OK with JSON encoded array of port delta statistics for the specified port
+ */
+ @GET
+ @Path("delta/ports/{deviceId}/{port}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPortDeltaStatisticsByDeviceIdAndPort(@PathParam("deviceId") String deviceId,
+ @PathParam("port") String port) {
+ final DeviceService service = get(DeviceService.class);
+ final PortNumber portNumber = portNumber(port);
+ final PortStatistics portStatsEntry =
+ service.getDeltaStatisticsForPort(DeviceId.deviceId(deviceId), portNumber);
+ final ObjectNode root = mapper().createObjectNode();
+ final ArrayNode rootArrayNode = root.putArray("statistics");
+ final ObjectNode deviceStatsNode = mapper().createObjectNode();
+ deviceStatsNode.put("device", deviceId);
+ final ArrayNode statisticsNode = deviceStatsNode.putArray("ports");
+ if (portStatsEntry != null) {
+ statisticsNode.add(codec(PortStatistics.class).encode(portStatsEntry, this));
+ }
+ rootArrayNode.add(deviceStatsNode);
+
+ return ok(root).build();
+ }
+
}