GUI -- Added port-statistics traffic visualization to the topo view.

Change-Id: I52b3c1739cc50a026c0796819d61ec1898937ced
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index 5e62e09..6277e79 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -15,14 +15,15 @@
  */
 package org.onosproject.provider.of.device.impl;
 
+import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onlab.packet.ChassisId;
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.Device;
@@ -50,7 +51,6 @@
 import org.onosproject.openflow.controller.OpenFlowSwitchListener;
 import org.onosproject.openflow.controller.PortDescPropertyType;
 import org.onosproject.openflow.controller.RoleState;
-import org.onlab.packet.ChassisId;
 import org.projectfloodlight.openflow.protocol.OFFactory;
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.protocol.OFPortConfig;
@@ -75,8 +75,6 @@
 import java.util.HashSet;
 import java.util.List;
 
-import com.google.common.base.Strings;
-
 import static org.onosproject.net.DeviceId.deviceId;
 import static org.onosproject.net.Port.Type.COPPER;
 import static org.onosproject.net.Port.Type.FIBER;
@@ -204,36 +202,37 @@
 
     private void pushPortMetrics(Dpid dpid, OFPortStatsReply msg) {
         DeviceId deviceId = DeviceId.deviceId(dpid.uri(dpid));
-
         Collection<PortStatistics> stats = buildPortStatistics(deviceId, msg);
-
         providerService.updatePortStatistics(deviceId, stats);
     }
 
     private Collection<PortStatistics> buildPortStatistics(DeviceId deviceId, OFPortStatsReply msg) {
-
         HashSet<PortStatistics> stats = Sets.newHashSet();
 
         for (OFPortStatsEntry entry: msg.getEntries()) {
-            if (entry.getPortNo().getPortNumber() < 0) {
-                continue;
-            }
-            DefaultPortStatistics.Builder builder = DefaultPortStatistics.builder();
-            DefaultPortStatistics stat = builder.setDeviceId(deviceId)
-                    .setPort(entry.getPortNo().getPortNumber())
-                    .setPacketsReceived(entry.getRxPackets().getValue())
-                    .setPacketsSent(entry.getTxPackets().getValue())
-                    .setBytesReceived(entry.getRxBytes().getValue())
-                    .setBytesSent(entry.getTxBytes().getValue())
-                    .setPacketsRxDropped(entry.getRxDropped().getValue())
-                    .setPacketsTxDropped(entry.getTxDropped().getValue())
-                    .setPacketsRxErrors(entry.getRxErrors().getValue())
-                    .setPacketsTxErrors(entry.getTxErrors().getValue())
-                    .setDurationSec(entry.getDurationSec())
-                    .setDurationNano(entry.getDurationNsec())
-                    .build();
+            try {
+                if (entry.getPortNo().getPortNumber() < 0) {
+                    continue;
+                }
+                DefaultPortStatistics.Builder builder = DefaultPortStatistics.builder();
+                DefaultPortStatistics stat = builder.setDeviceId(deviceId)
+                        .setPort(entry.getPortNo().getPortNumber())
+                        .setPacketsReceived(entry.getRxPackets().getValue())
+                        .setPacketsSent(entry.getTxPackets().getValue())
+                        .setBytesReceived(entry.getRxBytes().getValue())
+                        .setBytesSent(entry.getTxBytes().getValue())
+                        .setPacketsRxDropped(entry.getRxDropped().getValue())
+                        .setPacketsTxDropped(entry.getTxDropped().getValue())
+                        .setPacketsRxErrors(entry.getRxErrors().getValue())
+                        .setPacketsTxErrors(entry.getTxErrors().getValue())
+                        .setDurationSec(entry.getVersion() == OFVersion.OF_10 ? 0 : entry.getDurationSec())
+                        .setDurationNano(entry.getVersion() == OFVersion.OF_10 ? 0 : entry.getDurationNsec())
+                        .build();
 
-            stats.add(stat);
+                stats.add(stat);
+            } catch (Exception e) {
+                LOG.warn("Unable to process port stats", e);
+            }
         }
 
         return Collections.unmodifiableSet(stats);