Adding code to enable GUI failover.
Change-Id: I8423f17349411d24332db8670840438d0d8ec8ba
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
index 99ca2e9..dd00d49 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
@@ -16,9 +16,12 @@
package org.onosproject.ui.impl;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.eclipse.jetty.websocket.WebSocket;
import org.onlab.osgi.ServiceDirectory;
+import org.onosproject.cluster.ClusterService;
+import org.onosproject.cluster.ControllerNode;
import org.onosproject.ui.UiConnection;
import org.onosproject.ui.UiExtensionService;
import org.onosproject.ui.UiMessageHandler;
@@ -99,6 +102,7 @@
this.connection = connection;
this.control = (FrameConnection) connection;
createHandlers();
+ sendInstanceData();
}
@Override
@@ -143,6 +147,18 @@
}
}
+ @Override
+ public void sendMessage(String type, long sid, ObjectNode payload) {
+ ObjectNode message = mapper.createObjectNode();
+ message.put("event", type);
+ if (sid > 0) {
+ message.put("sid", sid);
+ }
+ message.set("payload", payload);
+ sendMessage(message);
+
+ }
+
// Creates new message handlers.
private void createHandlers() {
handlers = new HashMap<>();
@@ -163,5 +179,24 @@
handlers.forEach((type, handler) -> handler.destroy());
handlers.clear();
}
+
+ // Sends cluster node/instance information to allow GUI to fail-over.
+ private void sendInstanceData() {
+ ClusterService service = directory.get(ClusterService.class);
+ ArrayNode instances = mapper.createArrayNode();
+
+ for (ControllerNode node : service.getNodes()) {
+ ObjectNode instance = mapper.createObjectNode()
+ .put("id", node.id().toString())
+ .put("ip", node.ip().toString())
+ .put("uiAttached", node.equals(service.getLocalNode()));
+ instances.add(instance);
+ }
+
+ ObjectNode payload = mapper.createObjectNode();
+ payload.set("instances", instances);
+ sendMessage("onosInstances", 0, payload);
+ }
+
}