ONOS-5409: Added details panel to Meters view
Change-Id: Id0614572f7b9e4233dacbfa908d03973fba42a17
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java
index 8371353..734551a 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java
@@ -24,6 +24,7 @@
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.meter.Band;
import org.onosproject.net.meter.Meter;
+import org.onosproject.net.meter.MeterId;
import org.onosproject.net.meter.MeterService;
import org.onosproject.ui.RequestHandler;
import org.onosproject.ui.UiMessageHandler;
@@ -52,12 +53,20 @@
private static final Set<String> UNSUPPORTED_PROTOCOLS =
ImmutableSet.of(OF_10, OF_11, OF_12);
+ private static final String METER_DETAILS_REQ = "meterDetailsRequest";
+ private static final String METER_DETAILS_RESP = "meterDetailsResponse";
+ private static final String DETAILS = "details";
+
+ private static final String DEV_ID = "devId";
private static final String ID = "id";
private static final String APP_ID = "app_id";
private static final String STATE = "state";
private static final String PACKETS = "packets";
private static final String BYTES = "bytes";
private static final String BANDS = "bands";
+ private static final String BURST = "isBurst";
+ private static final String LIFE = "life";
+ private static final String TYPE_IID = "_iconid_type";
private static final String[] COL_IDS = {
ID, APP_ID, STATE, PACKETS, BYTES, BANDS
@@ -65,7 +74,10 @@
@Override
protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new MeterDataRequest());
+ return ImmutableSet.of(
+ new MeterDataRequest(),
+ new DetailRequestHandler()
+ );
}
// handler for meter table requests
@@ -160,4 +172,43 @@
}
}
}
+
+
+ private final class DetailRequestHandler extends RequestHandler {
+ private DetailRequestHandler() {
+ super(METER_DETAILS_REQ);
+ }
+
+ @Override
+ public void process(ObjectNode payload) {
+ Long id = Long.decode(string(payload, ID));
+ String devId = string(payload, DEV_ID);
+
+ DeviceId deviceId = DeviceId.deviceId(devId);
+ MeterService ms = get(MeterService.class);
+ MeterId meterId = MeterId.meterId(id);
+ Meter meter = ms.getMeter(deviceId, meterId);
+
+ ObjectNode data = objectNode();
+
+ data.put(ID, id);
+ data.put(DEV_ID, devId);
+ data.put(APP_ID, meter.appId().name());
+ data.put(BYTES, meter.bytesSeen());
+ data.put(BURST, meter.isBurst());
+ data.put(LIFE, meter.life());
+ data.put(PACKETS, meter.packetsSeen());
+ data.put(STATE, meter.state().toString());
+
+ data.put(TYPE_IID, "meter");
+
+ ObjectNode rootNode = objectNode();
+ rootNode.set(DETAILS, data);
+
+ // NOTE: ... an alternate way of getting all the details of an item:
+ // Use the codec context to get a JSON of the meter. See ONOS-5976.
+ // TODO: rootNode.set(METER, getJsonCodecContext().encode(meter, Meter.class));
+ sendMessage(METER_DETAILS_RESP, rootNode);
+ }
+ }
}