Parallelize probing the E-W and N-S VMs reachability

Change-Id: Ib52fc905a0af167dc08aac8672f9e2e527af3055
diff --git a/apps/openstacktroubleshoot/app/src/main/java/org/onosproject/openstacktroubleshoot/cli/OpenstackNorthSouthProbeCommand.java b/apps/openstacktroubleshoot/app/src/main/java/org/onosproject/openstacktroubleshoot/cli/OpenstackNorthSouthProbeCommand.java
index c409641..3088d82 100644
--- a/apps/openstacktroubleshoot/app/src/main/java/org/onosproject/openstacktroubleshoot/cli/OpenstackNorthSouthProbeCommand.java
+++ b/apps/openstacktroubleshoot/app/src/main/java/org/onosproject/openstacktroubleshoot/cli/OpenstackNorthSouthProbeCommand.java
@@ -31,7 +31,10 @@
 import org.onosproject.openstacktroubleshoot.api.Reachability;
 
 import java.util.Set;
+import java.util.concurrent.ExecutorService;
 
+import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
+import static org.onlab.util.Tools.groupedThreads;
 import static org.onosproject.openstacknetworking.api.InstancePort.State.ACTIVE;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
 
@@ -56,6 +59,9 @@
             required = false, multiValued = true)
     private String[] vmIps = null;
 
+    private final ExecutorService probeExecutor = newSingleThreadScheduledExecutor(
+            groupedThreads(this.getClass().getSimpleName(), "probe-handler", log));
+
     @Override
     protected void execute() {
         OpenstackTroubleshootService tsService = get(OpenstackTroubleshootService.class);
@@ -106,7 +112,8 @@
             }
 
             printHeader();
-            ports.forEach(port -> printReachability(tsService.probeNorthSouth(port)));
+            ports.forEach(port -> probeExecutor.execute(() ->
+                    printReachability(tsService.probeNorthSouth(port))));
         }
     }