/
labcontrol
executable file
·117 lines (91 loc) · 4.06 KB
/
labcontrol
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
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env python
# ----------------------------------------------------------------------------
# Copyright (c) 2017-, LabControl development team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
# ----------------------------------------------------------------------------
from base64 import b64encode
from uuid import uuid4
import click
from labcontrol.db.environment import patch_database
@click.group()
def labcontrol():
pass
@labcontrol.command("start-webserver")
@click.option('--port', required=False, type=int,
help="Port where the webserver will start", default=8181)
def start_webserver(port):
"""Starts the labcontrol webserver"""
import socket
import errno
from os.path import join
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import options, parse_command_line
from labcontrol.gui.webserver import Application
from labcontrol.db.settings import labcontrol_settings
# Set up logs
options.log_file_prefix = join(labcontrol_settings.log_dir,
'labcontrol_%d.log' % port)
options.logging = 'debug'
parse_command_line()
# Create the webserver
ssl_options = {'certfile': labcontrol_settings.certificate_filepath,
'keyfile': labcontrol_settings.key_filepath}
http_server = HTTPServer(Application(), ssl_options=ssl_options)
try:
http_server.listen(port)
except socket.error as e:
if e.errno == errno.EADDRINUSE:
raise RuntimeError(
"Port %d is already in use. Please choose another "
"port with --port" % port)
else:
raise
click.echo("LabControl started on port %d" % port)
ioloop = IOLoop.instance()
ioloop.start()
@labcontrol.command()
def config():
"""Generate labcontrol configuration file"""
from os.path import expanduser
from labcontrol.db.configuration_manager import ConfigurationManager
config_fp = expanduser(click.prompt('Path to the configuration file',
default='~/.labcontrol.cfg'))
click.echo('Main configuration:')
test_env = click.prompt('Test environment', default=True)
log_dir = click.prompt('Log directory', default="/tmp/")
certificate_filepath = click.prompt(
'LabControl Certificate Filepath', default="")
key_filepath = click.prompt('LabControl Key Filepath', default="")
cookie_secret = click.prompt(
'Server cookie secret (default: random)', default=b64encode(
uuid4().bytes + uuid4().bytes))
click.echo('Postgres configuration:')
db_host = click.prompt('Postgres host', default='localhost')
db_port = click.prompt('Postgres port', default=5432)
db_name = click.prompt('Database name', default='qiita')
db_user = click.prompt('Postgres user', default='labcontrol')
db_password = click.prompt('Postgres user password', hide_input=True,
confirmation_prompt=True, default="")
db_admin_user = click.prompt('Postgres admin user', default='labcontrol')
db_admin_password = click.prompt(
'Postgres admin user password', hide_input=True,
confirmation_prompt=True, default="")
click.echo('Qiita configuration (for testing purposes):')
qiita_server_cert = click.prompt('Qiita server certificate', default="")
ConfigurationManager.create(config_fp, test_env, certificate_filepath,
key_filepath, cookie_secret, db_host, db_port,
db_name, db_user, db_password, db_admin_user,
db_admin_password, log_dir, qiita_server_cert)
@labcontrol.command()
def patch(verbose=False):
"""Bring the labcontrol schema up to the latest patch
Pulls the current patch from the settings table and applies all subsequent
patches found in the patches directory.
"""
patch_database(verbose)
if __name__ == '__main__':
labcontrol()