pingallm.py
diff --git a/web/pingallm.py b/web/pingallm.py
index e377a55..43f10ad 100755
--- a/web/pingallm.py
+++ b/web/pingallm.py
@@ -2,60 +2,76 @@
 import sys
 import time
 import os
+import re
 
 hosts=['onosdevz1', 'onosdevz2', 'onosdevz3', 'onosdevz4', 'onosdevz5', 'onosdevz6', 'onosdevz7', 'onosdevz8']
-filename = sys.argv[1]
-
 ping_cnt=3
-wait=ping_cnt
+wait1=ping_cnt
+wait2=10
 
-os.popen("rm -f /tmp/ping*")
 
-f = open(filename, 'r')
-nr_ping = 0
-for line in f:
-  if line[0] != "#":
-    fid=int(line.strip().split()[0])
-    src_dpid=line.strip().split()[2]
-    dst_dpid=line.strip().split()[4]
-    src_nwid=int(src_dpid.split(':')[-2], 16)
-    dst_nwid=int(dst_dpid.split(':')[-2], 16)
-    src_hostid=int(src_dpid.split(':')[-1], 16)
-    dst_hostid=int(dst_dpid.split(':')[-1], 16)
-    cmd="echo \"192.168.%d.%d -> 192.168.%d.%d\" > /tmp/ping.%d" % (src_nwid, src_hostid, dst_nwid, dst_hostid,fid)
-    os.popen(cmd)
-    cmd="ssh %s \'${HOME}/ONOS/test-network/mininet/mrun host%d \'ping -c %d -W 1 192.168.%d.%d\'\' >> /tmp/ping.%d 2>&1 &" % (hosts[src_nwid-1], src_hostid, ping_cnt, dst_nwid, dst_hostid,fid)
-#    print cmd
-    result = os.popen(cmd).read()
-    time.sleep(0.2)
-    nr_ping = nr_ping + 1
+def do_pingall():
 
-print "waiting for ping(s) to finish (%d sec)" % (wait)
-time.sleep(wait)
-cmd="cat /tmp/ping.* | grep loss |wc -l"
-wait_cnt=0
-while 1:
-  nr_done = int(os.popen(cmd).read())
-  if nr_done == nr_ping or wait_cnt > 10:
-    break
-  print "%d ping finished" % nr_done
-  time.sleep(1)
-  wait_cnt += 1
+  pid=os.getpid()
+  os.popen("rm -f /tmp/ping.*")
 
-cmd='cat /tmp/ping.* | grep " 0% packet loss" |wc -l'
-nr_success = int(os.popen(cmd).read())
+  filename = sys.argv[1]
+  f = open(filename, 'r')
+  nr_ping = 0
+  for line in f:
+    if line[0] != "#":
+#      logfile="/tmp/ping.pid%d.%d" % (pid, fid)
+      fid=int(line.strip().split()[0])
+      logfile="/tmp/ping.%d" % (fid)
+      src_dpid=line.strip().split()[2]
+      dst_dpid=line.strip().split()[4]
+      src_nwid=int(src_dpid.split(':')[-2], 16)
+      dst_nwid=int(dst_dpid.split(':')[-2], 16)
+      src_hostid=int(src_dpid.split(':')[-1], 16)
+      dst_hostid=int(dst_dpid.split(':')[-1], 16)
+      cmd="echo \"Pingall flow %d : 192.168.%d.%d -> 192.168.%d.%d\" > %s" % (fid, src_nwid, src_hostid, dst_nwid, dst_hostid,logfile)
+      os.popen(cmd)
+      cmd="ssh %s \'${HOME}/ONOS/test-network/mininet/mrun host%d \'ping -c %d -W 1 192.168.%d.%d\'\' >> %s 2>&1 &" % (hosts[src_nwid-1], src_hostid, ping_cnt, dst_nwid, dst_hostid,logfile)
+    #    print cmd
+      result = os.popen(cmd).read()
+      time.sleep(0.2)
+      nr_ping = nr_ping + 1
 
-if nr_success != nr_ping:
-  print "fail: %d ping(s) failed (finished %d total %d)" % (nr_done - nr_success, nr_done, nr_ping)
-else:
-  print "success: all %d ping(s) got through" % (nr_success)
+  f.close()
+  return nr_ping
 
-for i in range(nr_ping):
-  cmd="cat /tmp/ping.%d | grep loss | awk '{print $6}'" % (i+1)
-  cmd2="cat /tmp/ping.%d | head -n 1" % (i+1)
-  result = os.popen(cmd).read().strip()
-  result2 = os.popen(cmd2).read().strip()
-  if result != "0%":
-    print "flow # %d fail (%s)" % (i+1, result2)
+def wait_ping_finish(nr_ping):
+  print "all pings started.. waiting for completion (%d sec)" % (wait1)
+  time.sleep(wait1)
+  cmd="cat /tmp/ping.* | grep \"packet loss\" |wc -l"
+  for i in range(wait2):
+    nr_done = int(os.popen(cmd).read())
+    if nr_done == nr_ping:
+      break
+    print "%d ping finished" % nr_done
+    time.sleep(1)
+  
+  return nr_done
 
-f.close()
+def report(nr_ping, nr_done):
+  cmd='cat /tmp/ping.* | grep " 0% packet loss" |wc -l'
+  nr_success = int(os.popen('cat /tmp/ping.* | grep " 0% packet loss" |wc -l').read())
+  nr_incomplete = nr_ping - nr_done
+  nr_fail = nr_done - nr_success
+
+  print "Pingall Result: success %d fail %d incomplete %d" % (nr_success, nr_fail, nr_incomplete)
+  if nr_fail > 0 or nr_incomplete > 0:
+    for i in range(nr_ping):
+      cmd="cat /tmp/ping.%d | head -n 1" % (i+1)
+      flow_desc = os.popen(cmd).read().strip()
+
+      cmd="cat /tmp/ping.%d | grep \"packet loss\"" % (i+1)
+      result = os.popen(cmd).read().strip()
+
+      if not re.search(" 0% packet loss", result):
+        print "flow # %d %s : %s" % (i+1, flow_desc, result)
+
+if __name__ == "__main__":
+  nr_ping=do_pingall()
+  nr_done=wait_ping_finish(nr_ping)
+  report(nr_ping, nr_done)