added cho scripts in master
diff --git a/cluster-mgmt/bin/cho-failover.py b/cluster-mgmt/bin/cho-failover.py
new file mode 100755
index 0000000..ad34389
--- /dev/null
+++ b/cluster-mgmt/bin/cho-failover.py
@@ -0,0 +1,127 @@
+#! /usr/bin/env python
+import json
+import sys
+import os
+import re
+from check_status import *
+import time
+
+flowdef="flowdef_8node_252.txt"
+basename="onosdevz"
+operation=["sw3-eth4 down","sw4-eth4 down","sw4-eth3 down","sw3-eth4 up","sw1-eth2 down","sw4-eth4 up","sw4-eth3 up","sw1-eth2 up"]
+
+def check_by_pingall():
+ buf = ""
+ cmd = "dsh -w %s1 \"cd ONOS/web; ./pingallm.py %s\"" % (basename, flowdef)
+ result = os.popen(cmd).read()
+ buf += result
+
+ if re.search("fail 0", result):
+ return (0, buf)
+ else:
+ return (1, buf)
+
+def link_change_core(op):
+ cmd = "dsh -w %s1 \"sudo ifconfig %s\"" % (basename, op)
+ os.popen(cmd)
+ print cmd
+
+
+def check_flow_nmap():
+ buf = ""
+ buf += os.popen("date").read()
+ print "dump all flows from network map"
+ cmd = "dsh -w %s1 \"cd ONOS/web; ./get_flow.py all\"" % cluster_basename
+ buf += os.popen(cmd).read()
+ return (0, buf)
+
+def check_flow_raw():
+ buf = ""
+ print "dump all flows from switches"
+ cmd = "dsh \"cd ONOS/scripts; ./showflow.sh\""
+ buf += os.popen(cmd).read()
+ return (0, buf)
+
+def dump_json(url, filename):
+ f = open(filename, 'w')
+ buf = ""
+ command = "curl -s %s" % (url)
+ result = os.popen(command).read()
+ buf += json.dumps(json.loads(result), sort_keys = True, indent = 2)
+ f.write(buf)
+ f.close()
+
+def check_rest(cycle, n):
+ url="http://%s:%s/wm/core/topology/switches/all/json" % (RestIP, RestPort)
+ filename = "rest-sw-log.%d.%d.log" % (cycle, n)
+ dump_json(url, filename)
+
+ filename = "rest-link-log.%d.%d.log" % (cycle, n)
+ url = "http://%s:%s/wm/core/topology/links/json" % (RestIP, RestPort)
+ dump_json(url, filename)
+
+ url = "http://%s:%s/wm/registry/switches/json" % (RestIP, RestPort)
+ filename = "rest-reg-sw-log.%d.%d.log" % (cycle, n)
+ dump_json(url, filename)
+
+ url = "http://%s:%s/wm/registry/controllers/json" % (RestIP, RestPort)
+ filename = "rest-reg-ctrl-log.%d.%d.log" % (cycle, n)
+ dump_json(url, filename)
+
+ url = "http://%s:%s/wm/flow/getsummary/0/0/json" % (RestIP, RestPort)
+ filename = "rest-flow-log.%d.%d.log" % (cycle, n)
+ dump_json(url, filename)
+
+
+def log(cycle, n, nr_ctrl):
+ error = "error-log.%d.%d.log" % (cycle, n)
+ nmapflow = "nmap-flow-log.%d.%d.log" % (cycle, n)
+ rawflow = "raw-flow-log.%d.%d.log" % (cycle, n)
+
+ f = open(error, 'w')
+ f.write(result)
+ f.write(check_switch()[1])
+ f.write(check_link()[1])
+ f.write(check_switch_all(nr_ctrl)[1])
+ f.write(check_controllers(nr_ctrl)[1])
+ f.close()
+
+ f = open(nmapflow,'w')
+ f.write(check_flow_nmap()[1])
+ f.close()
+
+ f = open(rawflow,'w')
+ f.write(check_flow_raw()[1])
+ f.close()
+ check_rest(cycle,n)
+
+
+opration=['switch all', 'onos stop 8', 'onos stop 7', 'onos stop 6', 'onos stop 5', 'onos start 5;onos start 6;onos start 7;onos start 8', 'switch local']
+nr_controllers=[8, 7, 6, 5, 4, 8, 8]
+
+if __name__ == "__main__":
+ print "%s" % check_switch()[1]
+ print "%s" % check_link()[1]
+ print "%s" % check_controllers(8)[1]
+ (code, result) = check_by_pingall()
+ print result
+ k = raw_input('hit any key>')
+
+ for cycle in range(1000):
+ for n, op in enumerate(operation):
+ print "==== Cycle %d operation %d ====" % (cycle, n)
+ print op
+ os.popen(op)
+ print "wait 30 sec"
+ time.sleep(30)
+
+ print "check by pingall"
+ (code, result) = check_by_pingall()
+ if code == 0:
+ print "ping success %s" % (result)
+ else:
+ print "pingall failed (%d, %d). Collecting logs" % (cycle, n)
+ log(cycle, n, nr_controllers[n])
+
+
+