Files
crawlab/manage.py
2019-06-01 17:05:46 +08:00

83 lines
2.0 KiB
Python

import argparse
import os
import subprocess
from multiprocessing import Process
import sys
BASE_DIR = os.path.dirname(__file__)
APP_DESC = """
Crawlab CLI tool.
usage: python manage.py [action]
action:
serve: start all necessary services to run crawlab. This is for quick start, please checkout Deployment guide for production environment.
app: start app + flower services, normally run on master node.
worker: start app + worker services, normally run on worker nodes.
flower: start flower service only.
frontend: start frontend/client service only.
"""
ACTION_LIST = [
'serve',
'app',
'worker',
'flower',
'frontend',
]
if len(sys.argv) == 1:
print(APP_DESC)
sys.argv.append('--help')
parser = argparse.ArgumentParser()
parser.add_argument('action', type=str)
args = parser.parse_args()
def run_app():
p = subprocess.Popen([sys.executable, os.path.join(BASE_DIR, 'crawlab', 'app.py')])
p.communicate()
def run_flower():
p = subprocess.Popen([sys.executable, os.path.join(BASE_DIR, 'crawlab', 'flower.py')])
p.communicate()
def run_worker():
p = subprocess.Popen([sys.executable, os.path.join(BASE_DIR, 'crawlab', 'worker.py')])
p.communicate()
def run_frontend():
p = subprocess.Popen(['npm', 'run', 'serve'],
cwd=os.path.abspath(os.path.join(BASE_DIR, 'frontend')))
p.communicate()
def main():
p_app = Process(target=run_app)
p_flower = Process(target=run_flower)
p_worker = Process(target=run_worker)
p_frontend = Process(target=run_frontend)
if args.action == 'serve':
p_app.start()
p_flower.start()
p_worker.start()
p_frontend.start()
elif args.action == 'app':
p_app.start()
p_flower.start()
elif args.action == 'worker':
p_app.start()
p_worker.start()
elif args.action == 'flower':
p_flower.start()
elif args.action == 'frontend':
p_frontend.start()
else:
print(f'Invalid action: {args.action}')
if __name__ == '__main__':
main()