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]) 
+
+
+