4 from pprint import pprint
13 from tsprint import print
17 # Service, check url, initial delay, timeout, dockername
18 services["analysis"] = ["http://analysis:8081/health", 30, 15, "analysis"]
19 services["camunda"] = ["http://camunda:8085/health", 300, 15, "camunda"]
20 services["reporting"] = ["http://reporting:8083/health", 30, 15, "reporting"]
21 services["twitter"] = ["http://twitter:8084/health", 30, 15, "twitter"]
22 services["website"] = ["http://website:8080/health", 30, 15, "website"]
28 def check_service(servicename):
30 # print(servicename+" -- checking service.")
32 r = requests.get(services[servicename][0], timeout=3)
33 if r.status_code != 200:
34 raise Exception("errorcode != 200: "+int(r.status_code))
35 print("+ "+servicename+" -- looks good :)")
37 # schedule next check.
38 th = threading.Timer(services[servicename][2], check_service, args=[servicename])
39 th.setName('failover_'+servicename)
42 print("- "+servicename+" -- looks bad :( "+str(sys.exc_info()[0]))
44 reset_service(servicename)
46 print("! Docker said NO/service restart failed."+str(sys.exc_info()[0]))
48 # schedule next check using startup delay.
49 th = threading.Timer(services[servicename][1], check_service, args=[servicename])
50 th.setName('failover_'+servicename)
55 def reset_service(servicename):
58 print(" "+servicename+" -- resetting service")
59 docker_ctl.containers.client.api.kill(services[servicename][3])
60 docker_ctl.containers.client.api.restart(services[servicename][3])
64 if __name__ == "__main__":
65 def signal_handler(signal, frame):
66 print('SIG received. exitting!')
68 signal.signal(signal.SIGINT, signal_handler)
70 docker_ctl = docker.from_env()
71 print(docker_ctl.info())
74 print("####################")
75 print("# Failover service #")
76 print("####################")
78 for servicename, service in services.items():
79 print(" "+servicename+" -- postponing initial check for "+str(service[1])+" sec")
80 th = threading.Timer(service[1], check_service, args=[servicename])
81 th.setName('failover_'+servicename)