ONOS-1326: Added support for observing when node liveness status was last updated. Useful for detecting/debugging stability issues.

Change-Id: I8ffebcf3a09a51c6e3e7526986a0f05530ed757f
diff --git a/cli/src/main/java/org/onosproject/cli/NodesListCommand.java b/cli/src/main/java/org/onosproject/cli/NodesListCommand.java
index ec06b34..cbc238d 100644
--- a/cli/src/main/java/org/onosproject/cli/NodesListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/NodesListCommand.java
@@ -15,17 +15,19 @@
  */
 package org.onosproject.cli;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import org.apache.karaf.shell.commands.Command;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ControllerNode;
+import static com.google.common.collect.Lists.newArrayList;
 
 import java.util.Collections;
 import java.util.List;
 
-import static com.google.common.collect.Lists.newArrayList;
+import org.apache.karaf.shell.commands.Command;
+import org.onlab.util.Tools;
+import org.onosproject.cluster.ClusterService;
+import org.onosproject.cluster.ControllerNode;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 
 /**
  * Lists all controller cluster nodes.
@@ -35,7 +37,7 @@
 public class NodesListCommand extends AbstractShellCommand {
 
     private static final String FMT =
-            "id=%s, address=%s:%s, state=%s %s";
+            "id=%s, address=%s:%s, state=%s, updated=%s %s";
 
     @Override
     protected void execute() {
@@ -49,6 +51,7 @@
             for (ControllerNode node : nodes) {
                 print(FMT, node.id(), node.ip(), node.tcpPort(),
                       service.getState(node.id()),
+                      Tools.timeAgo(service.getLastUpdated(node.id()).getMillis()),
                       node.equals(self) ? "*" : "");
             }
         }