-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathd-ealer.py
executable file
·68 lines (55 loc) · 1.79 KB
/
d-ealer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import docker
import logging
import traceback
import ConfigParser
import time
# start configuration parser
parser = ConfigParser.ConfigParser()
parser.read("d-ealer.conf")
# reading variables
logger_level = parser.get('logging', 'logger_level', raw = True)
handler_level = parser.get('logging', 'handler_level', raw = True)
log_format = parser.get('logging', 'log_format', raw = True)
log_file = parser.get('logging', 'log_file')
# set logger logging level
logger = logging.getLogger(__name__)
logger.setLevel(eval(logger_level))
# set handler logging level
handler = logging.FileHandler(log_file)
handler.setLevel(eval(handler_level))
# create a logging format
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(handler)
def dealer(containers, s):
label_check = 0
for container in containers:
try:
label_check = container.attrs['Config']['Labels']['com.dealer.activate']
except KeyError:
pass
if label_check == 1:
try:
healthcheck = container.attrs['State']['Health']['Status']
if healthcheck == "unhealthy":
container.restart()
else:
print healthcheck
pass
except KeyError:
logger.error('healthcheck disabled on container %s. Passing' % container.name)
pass
except:
logger.error('Unkown problem on container %s : %s. Please check Docker logs. Passing' % traceback.format_exc(),container.name)
pass
time.sleep(s)
return
if __name__ == "__main__":
# start docker cli
client = docker.from_env()
containers = client.containers.list()
s = 1
# check healthchecks and restart
while True:
dealer(containers, s)