forked from oltpbenchmark/website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fabfile.py
105 lines (88 loc) · 2.67 KB
/
fabfile.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
'''
Admin tasks
@author: dvanaken
'''
from collections import namedtuple
from fabric.api import env, local, quiet, settings, sudo, task
from fabric.state import output as fabric_output
# Fabric environment settings
env.hosts = ['localhost']
fabric_output.update({
'running' : False,
'stdout' : True,
})
# Supervisor setup and base commands
SUPERVISOR_CONFIG = '-c config/supervisord.conf'
SUPERVISOR_CMD = 'supervisorctl ' + SUPERVISOR_CONFIG
with settings(warn_only=True), quiet():
# Make sure supervisor is initialized
local('supervisord ' + SUPERVISOR_CONFIG)
Status = namedtuple('Status', ['RUNNING', 'STOPPED'])
STATUS = Status(0, 1)
@task
def start_rabbitmq(detached=True):
detached = parse_bool(detached)
cmd = 'sudo rabbitmq-server' + (' -detached' if detached else '')
local(cmd)
@task
def stop_rabbitmq():
#sudo('rabbitmqctl stop', pty=False)
local('sudo rabbitmqctl stop')
@task
def status_rabbitmq():
with settings(warn_only=True), quiet():
#res = sudo('rabbitmqctl status', pty=False)
res = local('sudo rabbitmqctl status')
if res.return_code == 2 or res.return_code == 69:
status = STATUS.STOPPED
elif res.return_code == 0:
status = STATUS.RUNNING
else:
raise Exception("Rabbitmq: unknown status " + str(res.return_code))
print status
print_status(status, 'rabbitmq')
return status
@task
def start_celery(detached=True):
if status_rabbitmq() == STATUS.STOPPED:
start_rabbitmq()
detached = parse_bool(detached)
if detached:
local(SUPERVISOR_CMD + ' start celeryd')
else:
local('python manage.py celery worker -l info')
@task
def stop_celery():
local(SUPERVISOR_CMD + ' stop celeryd')
@task
def status_celery():
res = local(SUPERVISOR_CMD + ' status celeryd | tr -s \' \' | cut -d \' \' -f2',
capture=True)
try:
status = STATUS._asdict()[res.stdout]
except KeyError as e:
if res.stdout == 'STARTING':
status = STATUS.RUNNING
else:
raise e
print_status(status, 'celery')
return status
@task
def start_server():
if status_celery() == STATUS.STOPPED:
start_celery()
local('python manage.py runserver 0.0.0.0:8000')
@task
def stop_all():
# TODO: update stop server
stop_celery()
stop_rabbitmq()
def parse_bool(value):
if isinstance(value, bool):
return value
elif isinstance(value, str):
return value.lower() == 'true'
else:
raise Exception('Cannot convert {} to bool'.format(type(value)))
def print_status(status, task_name):
print "{} status: {}".format(task_name, STATUS._fields[STATUS.index(status)])