]>
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 | ||
c2902b29 MT |
15 | # Read command line |
16 | tornado.options.define("debug", default=False, help="Run in debug mode", type=bool) | |
9137135a MT |
17 | tornado.options.parse_command_line() |
18 | ||
f6e6ff79 | 19 | class Application(tornado.web.Application): |
9137135a | 20 | def __init__(self): |
f6e6ff79 MT |
21 | self.__pakfire = None |
22 | ||
9137135a | 23 | settings = dict( |
c2902b29 | 24 | debug = tornado.options.options.debug, |
f6e6ff79 | 25 | gzip = True, |
9137135a MT |
26 | ) |
27 | ||
28 | # Load translations. | |
29 | tornado.locale.load_gettext_translations( | |
30 | os.path.join(BASEDIR, "translations"), "pakfire") | |
31 | ||
32 | tornado.web.Application.__init__(self, **settings) | |
33 | ||
f6e6ff79 MT |
34 | self.add_handlers(r"pakfirehub.ipfire.org", [ |
35 | # Redirect strayed users. | |
c2902b29 | 36 | #(r"/", handlers.RedirectHandler), |
f6e6ff79 | 37 | |
c2902b29 MT |
38 | # Test handlers |
39 | (r"/noop", handlers.NoopHandler), | |
40 | (r"/error/test", handlers.ErrorTestHandler), | |
41 | (r"/error/test/(\d+)", handlers.ErrorTestHandler), | |
42 | ||
43 | # Statistics | |
6efed544 MT |
44 | (r"/statistics/builds/types", handlers.StatsBuildsTypesHandler), |
45 | (r"/statistics/jobs/durations", handlers.StatsJobsDurationsHandler), | |
c2902b29 | 46 | (r"/statistics/jobs/queue", handlers.StatsJobsQueueHandler), |
6efed544 | 47 | (r"/statistics/jobs/states", handlers.StatsJobsStatesHandler), |
c2902b29 MT |
48 | |
49 | # Builds | |
50 | (r"/builds/create", handlers.BuildsCreateHandler), | |
51 | (r"/builds/(.*)", handlers.BuildsGetHandler), | |
52 | ||
53 | # Builders | |
54 | (r"/builders/info", handlers.BuildersInfoHandler), | |
55 | (r"/builders/jobs/queue", handlers.BuildersJobsQueueHandler), | |
56 | (r"/builders/jobs/(.*)/addfile/(.*)", handlers.BuildersJobsAddFileHandler), | |
57 | (r"/builders/jobs/(.*)/buildroot", handlers.BuildersJobsBuildrootHandler), | |
58 | (r"/builders/jobs/(.*)/state/(.*)", handlers.BuildersJobsStateHandler), | |
59 | (r"/builders/keepalive", handlers.BuildersKeepaliveHandler), | |
60 | ||
61 | # Jobs | |
ba9f9092 MT |
62 | (r"/jobs/active", handlers.JobsGetActiveHandler), |
63 | (r"/jobs/latest", handlers.JobsGetLatestHandler), | |
64 | (r"/jobs/queue", handlers.JobsGetQueueHandler), | |
c2902b29 MT |
65 | (r"/jobs/(.*)", handlers.JobsGetHandler), |
66 | ||
67 | # Packages | |
68 | (r"/packages/(.*)", handlers.PackagesGetHandler), | |
69 | ||
70 | # Uploads | |
71 | (r"/uploads/create", handlers.UploadsCreateHandler), | |
72 | (r"/uploads/(.*)/sendchunk", handlers.UploadsSendChunkHandler), | |
73 | (r"/uploads/(.*)/finished", handlers.UploadsFinishedHandler), | |
74 | (r"/uploads/(.*)/destroy", handlers.UploadsDestroyHandler), | |
f6e6ff79 | 75 | ]) |
9137135a MT |
76 | |
77 | logging.info("Successfully initialied application") | |
78 | ||
f6e6ff79 MT |
79 | @property |
80 | def pakfire(self): | |
81 | if self.__pakfire is None: | |
4585a44d MT |
82 | config_file = os.path.join(BASEDIR, "..", "pbs.conf") |
83 | ||
84 | self.__pakfire = backend.Pakfire(config_file=config_file) | |
f6e6ff79 MT |
85 | |
86 | return self.__pakfire | |
87 | ||
9137135a MT |
88 | def __del__(self): |
89 | logging.info("Shutting down application") | |
90 | ||
91 | @property | |
92 | def ioloop(self): | |
93 | return tornado.ioloop.IOLoop.instance() | |
94 | ||
95 | def shutdown(self, *args): | |
96 | logging.debug("Caught shutdown signal") | |
97 | self.ioloop.stop() | |
98 | ||
99 | def run(self, port=81): | |
100 | logging.debug("Going to background") | |
101 | ||
9137135a MT |
102 | http_server = tornado.httpserver.HTTPServer(self, xheaders=True) |
103 | ||
104 | # If we are not running in debug mode, we can actually run multiple | |
105 | # frontends to get best performance out of our service. | |
106 | if not self.settings["debug"]: | |
107 | http_server.bind(port) | |
108 | http_server.start(num_processes=4) | |
109 | else: | |
110 | http_server.listen(port) | |
111 | ||
f6e6ff79 MT |
112 | # All requests should be done after 30 seconds or they will be killed. |
113 | self.ioloop.set_blocking_log_threshold(30) | |
114 | ||
9137135a MT |
115 | self.ioloop.start() |
116 | ||
117 | def reload(self): | |
118 | logging.debug("Caught reload signal") |