diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f00347b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM python:2-slim + +ENV PYTHONUNBUFFERED 1 + +RUN apt-get update && apt-get install -y git + +RUN git clone https://github.com/mrname/tasktiger-admin.git + +WORKDIR tasktiger-admin + +RUN python setup.py install + +EXPOSE 5000 + +CMD ["tasktiger-admin", "-i", "0.0.0.0"] diff --git a/setup.py b/setup.py index 67ead36..0f90587 100644 --- a/setup.py +++ b/setup.py @@ -18,8 +18,9 @@ ], install_requires=[ 'click', + 'dsnparse', 'flask-admin', - 'redis', + 'redis>=2,<3', 'structlog', 'tasktiger>=0.4', ], diff --git a/tasktiger_admin/utils.py b/tasktiger_admin/utils.py index 318576d..c5e1367 100644 --- a/tasktiger_admin/utils.py +++ b/tasktiger_admin/utils.py @@ -1,20 +1,37 @@ +import os + import click +import dsnparse from flask import Flask from flask_admin import Admin import redis from tasktiger import TaskTiger from tasktiger_admin import TaskTigerView + @click.command() @click.option('-h', '--host', help='Redis server hostname') @click.option('-p', '--port', help='Redis server port') @click.option('-a', '--password', help='Redis password') @click.option('-n', '--db', help='Redis database number') @click.option('-l', '--listen', help='Admin port to listen on') -def run_admin(host, port, db, password, listen): +@click.option('-i', '--interface', help='Admin interface to listen on', + default='127.0.0.1') +@click.option( + '--structlog/--no-structlog', default=True, help='Enable/Disable structlog' +) +def run_admin(host, port, db, password, listen, interface, **kwargs): + environ_dsn = os.environ.get('REDIS_URL', None) + if environ_dsn: + dsn_parsed = dsnparse.parse(environ_dsn) + host = host or dsn_parsed.host + port = port or dsn_parsed.port + password = dsn_parsed.password conn = redis.Redis(host, int(port or 6379), int(db or 0), password) - tiger = TaskTiger(setup_structlog=True, connection=conn) + # FIXME - fix --no-structlog flag + # tiger = TaskTiger(setup_structlog=kwargs['structlog'], connection=conn) + tiger = TaskTiger(setup_structlog=False, connection=conn) app = Flask(__name__) admin = Admin(app, url='/') admin.add_view(TaskTigerView(tiger, name='TaskTiger', endpoint='tasktiger')) - app.run(debug=True, port=int(listen or 5000)) + app.run(debug=False, port=int(listen or 5000), host=interface)