[SDFAB-753] Improve ONOS cluster event

Main idea of this change is to add an additional parameter
in the event that carries information about the failed instance.

Additionally, prevents several NPE by using hostname as id
when controller hostname cannot be resolved into an ip.

Change-Id: Id9886afe3f1e5ecee0f1414b2722c340680a813e
(cherry picked from commit fa5dc3c137a4deaa020a669388470b511c2b6a8e)
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 2e7e643..0ed48ad 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
@@ -22,6 +22,7 @@
 import org.eclipse.jetty.websocket.api.WebSocketAdapter;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.osgi.ServiceNotFoundException;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.ui.GlyphConstants;
@@ -438,9 +439,10 @@
         ArrayNode instances = arrayNode();
 
         for (ControllerNode node : service.getNodes()) {
+            IpAddress nodeIp = node.ip();
             ObjectNode instance = objectNode()
                     .put(ID, node.id().toString())
-                    .put(IP, node.ip().toString())
+                    .put(IP, nodeIp != null ? nodeIp.toString() : node.host())
                     .put(GlyphConstants.UI_ATTACHED,
                          node.equals(service.getLocalNode()));
             instances.add(instance);