Added detection of traffic flowing using StatisticService.

Change-Id: I2044ec16fd722d953d0e2b2c955e4da2b1dab663
diff --git a/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java b/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java
index aa00a863..37120d9 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/GuiWebSocketServlet.java
@@ -37,7 +37,7 @@
 
     private ServiceDirectory directory = new DefaultServiceDirectory();
 
-    private final Set<TopologyWebSocket> sockets = new HashSet<>();
+    private final Set<TopologyViewWebSocket> sockets = new HashSet<>();
     private final Timer timer = new Timer();
     private final TimerTask pruner = new Pruner();
 
@@ -49,7 +49,7 @@
 
     @Override
     public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
-        TopologyWebSocket socket = new TopologyWebSocket(directory);
+        TopologyViewWebSocket socket = new TopologyViewWebSocket(directory);
         synchronized (sockets) {
             sockets.add(socket);
         }
@@ -61,9 +61,9 @@
         @Override
         public void run() {
             synchronized (sockets) {
-                Iterator<TopologyWebSocket> it = sockets.iterator();
+                Iterator<TopologyViewWebSocket> it = sockets.iterator();
                 while (it.hasNext()) {
-                    TopologyWebSocket socket = it.next();
+                    TopologyViewWebSocket socket = it.next();
                     if (socket.isIdle()) {
                         it.remove();
                         socket.close();
diff --git a/web/gui/src/main/java/org/onlab/onos/gui/TopologyMessages.java b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
similarity index 96%
rename from web/gui/src/main/java/org/onlab/onos/gui/TopologyMessages.java
rename to web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
index cad7228..dcc2355 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/TopologyMessages.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewMessages.java
@@ -49,6 +49,8 @@
 import org.onlab.onos.net.link.LinkEvent;
 import org.onlab.onos.net.link.LinkService;
 import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.onos.net.statistic.Load;
+import org.onlab.onos.net.statistic.StatisticService;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.packet.IpAddress;
 import org.slf4j.Logger;
@@ -75,9 +77,9 @@
 /**
  * Facility for creating messages bound for the topology viewer.
  */
-public abstract class TopologyMessages {
+public abstract class TopologyViewMessages {
 
-    protected static final Logger log = LoggerFactory.getLogger(TopologyMessages.class);
+    protected static final Logger log = LoggerFactory.getLogger(TopologyViewMessages.class);
 
     private static final ProviderId PID = new ProviderId("core", "org.onlab.onos.core", true);
     private static final String COMPACT = "%s/%s-%s/%s";
@@ -89,7 +91,7 @@
     protected final HostService hostService;
     protected final MastershipService mastershipService;
     protected final IntentService intentService;
-//    protected final StatisticService statService;
+    protected final StatisticService statService;
 
     protected final ObjectMapper mapper = new ObjectMapper();
 
@@ -101,7 +103,7 @@
      *
      * @param directory service directory
      */
-    protected TopologyMessages(ServiceDirectory directory) {
+    protected TopologyViewMessages(ServiceDirectory directory) {
         this.directory = checkNotNull(directory, "Directory cannot be null");
         clusterService = directory.get(ClusterService.class);
         deviceService = directory.get(DeviceService.class);
@@ -109,7 +111,7 @@
         hostService = directory.get(HostService.class);
         mastershipService = directory.get(MastershipService.class);
         intentService = directory.get(IntentService.class);
-//        statService = directory.get(StatisticService.class);
+        statService = directory.get(StatisticService.class);
     }
 
     // Retrieves the payload from the specified event.
@@ -408,14 +410,15 @@
 
         if (links != null) {
             ArrayNode labels = mapper.createArrayNode();
-            boolean hasTraffic = true; // FIXME
+            boolean hasTraffic = false;
             for (Link link : links) {
                 linksNode.add(compactLinkString(link));
-//                Load load = statService.load(link);
+                Load load = statService.load(link);
                 String label = "";
-//                if (load.rate() > 0) {
-//                    label = load.toString();
-//                }
+                if (load.rate() > 0) {
+                    hasTraffic = true;
+                    label = load.toString();
+                }
                 labels.add(label);
             }
             pathNode.put("class", hasTraffic ? type + " animated" : type);
diff --git a/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewWebSocket.java
similarity index 98%
rename from web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java
rename to web/gui/src/main/java/org/onlab/onos/gui/TopologyViewWebSocket.java
index af28086..cc5756c 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/TopologyViewWebSocket.java
@@ -66,8 +66,8 @@
 /**
  * Web socket capable of interacting with the GUI topology view.
  */
-public class TopologyWebSocket
-        extends TopologyMessages
+public class TopologyViewWebSocket
+        extends TopologyViewMessages
         implements WebSocket.OnTextMessage, WebSocket.OnControl {
 
     private static final long MAX_AGE_MS = 15000;
@@ -78,7 +78,7 @@
 
     private static final String APP_ID = "org.onlab.onos.gui";
 
-    private static final long TRAFFIC_FREQUENCY_SEC = 5000;
+    private static final long TRAFFIC_FREQUENCY_SEC = 1000;
 
     private final ApplicationId appId;
 
@@ -104,7 +104,7 @@
      *
      * @param directory service directory
      */
-    public TopologyWebSocket(ServiceDirectory directory) {
+    public TopologyViewWebSocket(ServiceDirectory directory) {
         super(directory);
         appId = directory.get(CoreService.class).registerApplication(APP_ID);
     }