pingallm-local.py: run pingall locally for reducing ssh session and speedup
diff --git a/web/pingallm-local.py b/web/pingallm-local.py
new file mode 100755
index 0000000..c8609e7
--- /dev/null
+++ b/web/pingallm-local.py
@@ -0,0 +1,92 @@
+#! /usr/bin/env python
+import sys
+import time
+import os
+import re
+import json
+
+ping_cnt=3
+wait1=ping_cnt
+wait2=10
+
+CONFIG_FILE=os.getenv("HOME") + "/ONOS/web/config.json"
+
+def read_config():
+ global controllers, cluster_basename
+ f = open(CONFIG_FILE)
+ conf = json.load(f)
+ controllers = conf['controllers']
+ cluster_basename = conf['cluster_basename']
+ f.close()
+
+def do_pingall(nwid):
+ pid=os.getpid()
+ os.popen("rm -f /tmp/ping.*")
+
+ filename = sys.argv[1]
+ f = open(filename, 'r')
+ nr_ping = 0
+ fids=[]
+ for line in f:
+ if line[0] != "#":
+ 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)
+
+ if src_nwid == nwid:
+ 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 &" % (controllers[src_nwid-1], src_hostid, ping_cnt, dst_nwid, dst_hostid,logfile)
+ cmd="${HOME}/ONOS/test-network/mininet/mrun host%d \'ping -c %d -W 1 192.168.%d.%d\' >> %s 2>&1 &" % (src_hostid, ping_cnt, dst_nwid, dst_hostid,logfile)
+ print cmd
+ result = os.popen(cmd).read()
+# time.sleep(0.2)
+ fids.append(fid)
+ nr_ping = nr_ping + 1
+
+ f.close()
+ return fids
+
+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
+
+def report(fids, 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 = len(fids) - 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 fids:
+ cmd="cat /tmp/ping.%d | head -n 1" % (i)
+ flow_desc = os.popen(cmd).read().strip()
+
+ cmd="cat /tmp/ping.%d | grep \"packet loss\"" % (i)
+ result = os.popen(cmd).read().strip()
+
+ if not re.search(" 0% packet loss", result):
+ print "flow # %d %s : %s" % (i, flow_desc, result)
+
+if __name__ == "__main__":
+ read_config()
+ hostname=os.popen('hostname').read().strip()
+ nwid=int(hostname.replace("%s" % cluster_basename, ""))
+ fids=do_pingall(nwid)
+ nr_done=wait_ping_finish(len(fids))
+ report(fids, nr_done)