]>
Commit | Line | Data |
---|---|---|
9137135a MT |
1 | #!/usr/bin/python |
2 | ||
3 | import logging | |
4 | import os.path | |
5 | import tornado.httpserver | |
6 | import tornado.locale | |
7 | import tornado.options | |
8 | import tornado.web | |
9 | ||
10 | import backend | |
f6e6ff79 | 11 | import handlers |
9137135a MT |
12 | |
13 | BASEDIR = os.path.join(os.path.dirname(__file__), "..", "data") | |
14 | ||
15 | # Enable logging | |
16 | tornado.options.parse_command_line() | |
17 | ||
f6e6ff79 | 18 | class Application(tornado.web.Application): |
9137135a | 19 | def __init__(self): |
f6e6ff79 MT |
20 | self.__pakfire = None |
21 | ||
9137135a | 22 | settings = dict( |
f6e6ff79 MT |
23 | debug = False, |
24 | gzip = True, | |
9137135a MT |
25 | ) |
26 | ||
27 | # Load translations. | |
28 | tornado.locale.load_gettext_translations( | |
29 | os.path.join(BASEDIR, "translations"), "pakfire") | |
30 | ||
31 | tornado.web.Application.__init__(self, **settings) | |
32 | ||
f6e6ff79 MT |
33 | self.add_handlers(r"pakfirehub.ipfire.org", [ |
34 | # Redirect strayed users. | |
35 | (r"/", handlers.RedirectHandler), | |
36 | ||
9137135a | 37 | # API |
f6e6ff79 MT |
38 | (r"/builder", handlers.BuilderHandler), |
39 | (r"/user", handlers.UserHandler), | |
9137135a MT |
40 | ]) |
41 | ||
f6e6ff79 MT |
42 | # This is the deprecated version. It will be removed some time. |
43 | self.add_handlers(r"pakfire.ipfire.org", [ | |
44 | # API | |
45 | (r"/pakfirehub/builder", handlers.BuilderHandler), | |
46 | (r"/pakfirehub/user", handlers.UserHandler), | |
47 | ]) | |
9137135a MT |
48 | |
49 | logging.info("Successfully initialied application") | |
50 | ||
f6e6ff79 MT |
51 | @property |
52 | def pakfire(self): | |
53 | if self.__pakfire is None: | |
54 | self.__pakfire = backend.Pakfire() | |
55 | ||
56 | return self.__pakfire | |
57 | ||
9137135a MT |
58 | def __del__(self): |
59 | logging.info("Shutting down application") | |
60 | ||
61 | @property | |
62 | def ioloop(self): | |
63 | return tornado.ioloop.IOLoop.instance() | |
64 | ||
65 | def shutdown(self, *args): | |
66 | logging.debug("Caught shutdown signal") | |
67 | self.ioloop.stop() | |
68 | ||
69 | def run(self, port=81): | |
70 | logging.debug("Going to background") | |
71 | ||
9137135a MT |
72 | http_server = tornado.httpserver.HTTPServer(self, xheaders=True) |
73 | ||
74 | # If we are not running in debug mode, we can actually run multiple | |
75 | # frontends to get best performance out of our service. | |
76 | if not self.settings["debug"]: | |
77 | http_server.bind(port) | |
78 | http_server.start(num_processes=4) | |
79 | else: | |
80 | http_server.listen(port) | |
81 | ||
f6e6ff79 MT |
82 | # All requests should be done after 30 seconds or they will be killed. |
83 | self.ioloop.set_blocking_log_threshold(30) | |
84 | ||
9137135a MT |
85 | self.ioloop.start() |
86 | ||
87 | def reload(self): | |
88 | logging.debug("Caught reload signal") |