Added GUI to intent perf app to monitor performance stats in real-time.
Fixed app ids for metrics app.
Change-Id: Icea99991ad71c80c53a832c236dcc05fefbb9b02
diff --git a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfCollector.java b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfCollector.java
index 90eb9d7..8683f3f 100644
--- a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfCollector.java
+++ b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfCollector.java
@@ -65,7 +65,7 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected ClusterService clusterService;
- @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected IntentPerfUi ui;
// Auxiliary structures used to accrue data for normalized time interval
@@ -99,6 +99,7 @@
nodeToIndex.put(nodes[i].id(), i);
}
+ ui.setHeaders(getSampleHeaders());
clearSamples();
log.info("Started");
}
diff --git a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java
index 02aa1b3..96f2b32 100644
--- a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java
+++ b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java
@@ -99,7 +99,7 @@
private static final int DEFAULT_NUM_NEIGHBORS = 0;
private static final int START_DELAY = 5_000; // ms
- private static final int REPORT_PERIOD = 5_000; //ms
+ private static final int REPORT_PERIOD = 1_000; //ms
private static final String START = "start";
private static final String STOP = "stop";
diff --git a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java
index d30fe4e..f50ed3b 100644
--- a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java
+++ b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfUi.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.intentperf;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -23,6 +24,7 @@
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
import org.onlab.osgi.ServiceDirectory;
import org.onosproject.intentperf.IntentPerfCollector.Sample;
import org.onosproject.ui.UiConnection;
@@ -34,14 +36,17 @@
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
+import java.util.Random;
import java.util.Set;
+import java.util.TimerTask;
import static java.util.Collections.synchronizedSet;
/**
* Mechanism to stream data to the GUI.
*/
-@Component(immediate = true, enabled = false)
+@Component(immediate = true, enabled = true)
+@Service(value = IntentPerfUi.class)
public class IntentPerfUi {
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -53,9 +58,25 @@
private UiExtension uiExtension = new UiExtension(views, this::newHandlers,
getClass().getClassLoader());
+ private List<String> headers = ImmutableList.of("One", "Two", "Three", "Four", "Five");
+
+ private Random random = new Random();
+ private TimerTask task;
+
@Activate
protected void activate() {
uiExtensionService.register(uiExtension);
+// task = new TimerTask() {
+// @Override
+// public void run() {
+// Sample sample = new Sample(System.currentTimeMillis(), headers.size());
+// for (int i = 0; i < headers.size(); i++) {
+// sample.data[i] = 25_000 + random.nextInt(20_000) - 5_000;
+// }
+// reportSample(sample);
+// }
+// };
+// SharedExecutors.getTimer().scheduleAtFixedRate(task, 1000, 1000);
}
@Deactivate
@@ -74,6 +95,15 @@
}
}
+ /**
+ * Sets the headers for the subsequently reported samples.
+ *
+ * @param headers list of headers for future samples
+ */
+ public void setHeaders(List<String> headers) {
+ this.headers = headers;
+ }
+
// Creates and returns session specific message handler.
private Collection<UiMessageHandler> newHandlers() {
return ImmutableList.of(new StreamingControl());
@@ -90,7 +120,22 @@
@Override
public void process(ObjectNode message) {
- streamingEnabled = message.path("event").asText("unknown").equals("initPerfStart");
+ streamingEnabled = message.path("event").asText("unknown").equals("intentPerfStart");
+ if (streamingEnabled) {
+ sendHeaders();
+ }
+ }
+
+ private void sendHeaders() {
+ ArrayNode an = mapper.createArrayNode();
+ for (String header : headers) {
+ an.add(header);
+ }
+
+ ObjectNode sn = mapper.createObjectNode();
+ sn.set("headers", an);
+
+ connection().sendMessage("intentPerfHeaders", 0, sn);
}
@Override
@@ -106,10 +151,18 @@
}
private void send(Sample sample) {
- // FIXME: finish this
- ObjectNode sn = mapper.createObjectNode()
- .put("time", sample.time);
- connection().sendMessage("intentPerf", 0, sn);
+ if (streamingEnabled) {
+ ArrayNode an = mapper.createArrayNode();
+ for (double d : sample.data) {
+ an.add(d);
+ }
+
+ ObjectNode sn = mapper.createObjectNode();
+ sn.put("time", sample.time);
+ sn.set("data", an);
+
+ connection().sendMessage("intentPerfSample", 0, sn);
+ }
}
}