blob: 6ab52451ca003871bb125db9c9bd34d049b1ea63 [file] [log] [blame]
Sergiusz Bazanski1fad2e52019-08-01 20:16:27 +02001import argparse
2import logging
3import multiprocessing
4
5from gevent import monkey
6
7monkey.patch_all()
8
9import grpc.experimental.gevent as grpc_gevent
10grpc_gevent.init_gevent()
11
12from werkzeug.contrib.fixers import ProxyFix
13import gunicorn.app.base
14
15from bgpwtf.cccampix.frontend.frontend import create_app
16
17
18class StandaloneApplication(gunicorn.app.base.BaseApplication):
19 def __init__(self, app, options=None):
20 self.options = options or {}
21 self.application = app
22 super(StandaloneApplication, self).__init__()
23
24 def load_config(self):
25 config = dict(
26 [
27 (key, value)
28 for key, value in options.items()
29 if key in self.cfg.settings and value is not None
30 ]
31 )
32 for key, value in config.items():
33 self.cfg.set(key.lower(), value)
34
35 def load(self):
36 return self.application
37
38
39parser = argparse.ArgumentParser(description="Run the IXP frontend")
40parser.add_argument("--flask_secret", required=True, help="Flask App Secret")
41parser.add_argument("--workers", type=int, default=4, help="Number of gunicorn workers to run")
42parser.add_argument("--listen", default="0.0.0.0:8080", help="Listen address")
43parser.add_argument("--verifier", default="127.0.0.1:4200", help="Address of verifier service")
44
45if __name__ == '__main__':
46 args = parser.parse_args()
47
48 options = {
49 "bind": args.listen,
50 "workers": args.workers,
51 "sendfile": False,
52 "timeout": 240,
53 }
54
55 config = {
56 "verifier": args.verifier,
57 }
58 app = create_app(config)
59 app.secret_key = args.flask_secret
60 app = ProxyFix(app)
61 StandaloneApplication(app, options).run()