]> git.ipfire.org Git - people/jschlag/pbs.git/blob - src/hub/__init__.py
Use autotools
[people/jschlag/pbs.git] / src / hub / __init__.py
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
11 import handlers
12
13 BASEDIR = os.path.join(os.path.dirname(__file__), "..", "data")
14
15 # Read command line
16 tornado.options.define("debug", default=False, help="Run in debug mode", type=bool)
17 tornado.options.parse_command_line()
18
19 class Application(tornado.web.Application):
20 def __init__(self):
21 self.__pakfire = None
22
23 settings = dict(
24 debug = tornado.options.options.debug,
25 gzip = True,
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
34 self.add_handlers(r"pakfirehub.ipfire.org", [
35 # Redirect strayed users.
36 #(r"/", handlers.RedirectHandler),
37
38 # Test handlers
39 (r"/noop", handlers.NoopHandler),
40 (r"/error/test", handlers.ErrorTestHandler),
41 (r"/error/test/(\d+)", handlers.ErrorTestHandler),
42
43 # Statistics
44 (r"/statistics/builds/types", handlers.StatsBuildsTypesHandler),
45 (r"/statistics/jobs/durations", handlers.StatsJobsDurationsHandler),
46 (r"/statistics/jobs/queue", handlers.StatsJobsQueueHandler),
47 (r"/statistics/jobs/states", handlers.StatsJobsStatesHandler),
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
62 (r"/jobs/active", handlers.JobsGetActiveHandler),
63 (r"/jobs/latest", handlers.JobsGetLatestHandler),
64 (r"/jobs/queue", handlers.JobsGetQueueHandler),
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),
75 ])
76
77 logging.info("Successfully initialied application")
78
79 @property
80 def pakfire(self):
81 if self.__pakfire is None:
82 config_file = os.path.join(BASEDIR, "..", "pbs.conf")
83
84 self.__pakfire = backend.Pakfire(config_file=config_file)
85
86 return self.__pakfire
87
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
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
112 # All requests should be done after 30 seconds or they will be killed.
113 self.ioloop.set_blocking_log_threshold(30)
114
115 self.ioloop.start()
116
117 def reload(self):
118 logging.debug("Caught reload signal")