Added creationTime to Versioned object. This enables supporting a electedTime in leadership, which in turn helps us track how stable leadership terms are.

Change-Id: Ib051027625324646152ed85535ba337e95f8a061
diff --git a/utils/misc/src/main/java/org/onlab/util/Tools.java b/utils/misc/src/main/java/org/onlab/util/Tools.java
index 8b045f1..533563b 100644
--- a/utils/misc/src/main/java/org/onlab/util/Tools.java
+++ b/utils/misc/src/main/java/org/onlab/util/Tools.java
@@ -18,6 +18,7 @@
 import com.google.common.base.Strings;
 import com.google.common.primitives.UnsignedLongs;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
 import org.slf4j.Logger;
 
 import java.io.BufferedReader;
@@ -239,6 +240,29 @@
         }
     }
 
+    /**
+     * Returns a human friendly time ago string for a specified system time.
+     * @param unixTime system time in millis
+     * @return human friendly time ago
+     */
+    public static String timeAgo(long unixTime) {
+        long deltaMillis = System.currentTimeMillis() - unixTime;
+        long secondsSince = (long) (deltaMillis / 1000.0);
+        long minsSince = (long) (deltaMillis / (1000.0 * 60));
+        long hoursSince = (long) (deltaMillis / (1000.0 * 60 * 60));
+        long daysSince = (long) (deltaMillis / (1000.0 * 60 * 60 * 24));
+        if (daysSince > 0) {
+            return String.format("%dd ago", daysSince);
+        } else if (hoursSince > 0) {
+            return String.format("%dh ago", hoursSince);
+        } else if (minsSince > 0) {
+            return String.format("%dm ago", minsSince);
+        } else if (secondsSince > 0) {
+            return String.format("%ds ago", secondsSince);
+        } else {
+            return "just now";
+        }
+    }
 
     /**
      * Copies the specified directory path. Use with great caution since