import argparse import logging import multiprocessing from gevent import monkey monkey.patch_all() import grpc.experimental.gevent as grpc_gevent grpc_gevent.init_gevent() from werkzeug.contrib.fixers import ProxyFix import gunicorn.app.base from bgpwtf.cccampix.frontend.frontend import create_app class StandaloneApplication(gunicorn.app.base.BaseApplication): def __init__(self, app, options=None): self.options = options or {} self.application = app super(StandaloneApplication, self).__init__() def load_config(self): config = dict( [ (key, value) for key, value in options.items() if key in self.cfg.settings and value is not None ] ) for key, value in config.items(): self.cfg.set(key.lower(), value) def load(self): return self.application parser = argparse.ArgumentParser(description="Run the IXP frontend") parser.add_argument("--flask_secret", required=True, help="Flask App Secret") parser.add_argument("--workers", type=int, default=4, help="Number of gunicorn workers to run") parser.add_argument("--listen", default="0.0.0.0:8080", help="Listen address") parser.add_argument("--verifier", default="127.0.0.1:4200", help="Address of verifier service") if __name__ == '__main__': args = parser.parse_args() options = { "bind": args.listen, "workers": args.workers, "sendfile": False, "timeout": 240, } config = { "verifier": args.verifier, } app = create_app(config) app.secret_key = args.flask_secret app = ProxyFix(app) StandaloneApplication(app, options).run()