From: Michael Tremer Date: Fri, 4 Jan 2019 18:50:59 +0000 (+0000) Subject: systemd: Add unit files for web UI X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37b3e1db48ab6d2dfd1fa2c7bed0f7b95756692f;p=pbs.git systemd: Add unit files for web UI Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index f453fa14..b30d25a3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -419,7 +419,9 @@ docker: Dockerfile if HAVE_SYSTEMD systemdsystemunit_DATA = \ src/systemd/pakfire-hub-1.service \ - src/systemd/pakfire-hub-2.service + src/systemd/pakfire-hub-2.service \ + src/systemd/pakfire-web-1.service \ + src/systemd/pakfire-web-2.service CLEANFILES += \ $(systemdsystemunit_DATA) @@ -430,7 +432,9 @@ endif EXTRA_DIST += \ src/systemd/pakfire-hub-1.service.in \ - src/systemd/pakfire-hub-2.service.in + src/systemd/pakfire-hub-2.service.in \ + src/systemd/pakfire-web-1.service.in \ + src/systemd/pakfire-web-2.service.in dist_database_DATA = \ src/database.sql diff --git a/src/scripts/pakfire-web b/src/scripts/pakfire-web index a50a92bf..c035cca1 100644 --- a/src/scripts/pakfire-web +++ b/src/scripts/pakfire-web @@ -1,30 +1,21 @@ #!/usr/bin/python -import daemon -import os -import signal -import sys - +import tornado.ioloop import tornado.options -from pakfire.buildservice.web import Application - -#tornado.options.parse_command_line() +import pakfire.buildservice.web -if __name__ == "__main__": - app = Application() +tornado.options.define("debug", type=bool, default=False, help="Enable debug mode") +tornado.options.define("port", type=int, default=9000, help="Port to listen on") - context = daemon.DaemonContext( - working_directory=os.getcwd(), -# stdout=sys.stdout, stderr=sys.stderr, # XXX causes errors... - ) +def run(): + tornado.options.parse_command_line() - context.signal_map = { - signal.SIGHUP : app.reload, - signal.SIGTERM : app.shutdown, - } + # Initialise application + app = pakfire.buildservice.web.Application(debug=tornado.options.options.debug) + app.listen(tornado.options.options.port, xheaders=True) -# with context: -# app.run() + # Launch IOLoop + tornado.ioloop.IOLoop.current().start() - app.run() +run() diff --git a/src/systemd/pakfire-web-1.service.in b/src/systemd/pakfire-web-1.service.in new file mode 100644 index 00000000..f72af7d2 --- /dev/null +++ b/src/systemd/pakfire-web-1.service.in @@ -0,0 +1,10 @@ +[Unit] +Description=Pakfire Web UI #1 +After=network.target + +[Service] +ExecStart=@bindir@/pakfire-web --port=9001 +User=pakfire + +[Install] +WantedBy=multi-user.target diff --git a/src/systemd/pakfire-web-2.service.in b/src/systemd/pakfire-web-2.service.in new file mode 100644 index 00000000..3ceb79d4 --- /dev/null +++ b/src/systemd/pakfire-web-2.service.in @@ -0,0 +1,10 @@ +[Unit] +Description=Pakfire Web UI #2 +After=network.target + +[Service] +ExecStart=@bindir@/pakfire-web --port=9002 +User=pakfire + +[Install] +WantedBy=multi-user.target diff --git a/src/web/__init__.py b/src/web/__init__.py index a02f021e..d1c14a19 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -2,16 +2,11 @@ # encoding: utf-8 import logging -import multiprocessing -import os.path -import tornado.httpserver import tornado.locale -import tornado.options import tornado.web from .. import Backend from ..constants import * -from ..decorators import * # Import all handlers from . import api @@ -31,15 +26,9 @@ from .handlers import * from . import ui_modules -# Enable logging -tornado.options.define("debug", default=False, help="Run in debug mode", type=bool) -tornado.options.parse_command_line() - class Application(tornado.web.Application): - def __init__(self, **_settings): + def __init__(self, **kwargs): settings = dict( - debug = tornado.options.options.debug, - gzip = True, login_url = "/login", template_path = TEMPLATESDIR, static_path = STATICDIR, @@ -105,7 +94,7 @@ class Application(tornado.web.Application): }, xsrf_cookies = True, ) - settings.update(_settings) + settings.update(kwargs) # Load translations. tornado.locale.load_gettext_translations(LOCALEDIR, PACKAGE_NAME) @@ -244,48 +233,10 @@ class Application(tornado.web.Application): (r"/api/packages/autocomplete", api.ApiPackagesAutocomplete), ], default_handler_class=errors.Error404Handler, **settings) - logging.info("Successfully initialied application") - - @lazy_property - def backend(self): - """ - Backend connection - """ - return Backend() - - def __del__(self): - logging.info("Shutting down application") - - @property - def ioloop(self): - return tornado.ioloop.IOLoop.instance() - - def shutdown(self, *args): - logging.debug("Caught shutdown signal") - self.ioloop.stop() - - def run(self, port=7001): - logging.debug("Going to background") + # Launch backend + self.backend = Backend() - http_server = tornado.httpserver.HTTPServer(self, xheaders=True) - - # If we are not running in debug mode, we can actually run multiple - # frontends to get best performance out of our service. - if self.settings.get("debug", False): - http_server.listen(port) - else: - cpu_count = multiprocessing.cpu_count() - - http_server.bind(port) - http_server.start(num_processes=cpu_count) - - # All requests should be done after 60 seconds or they will be killed. - self.ioloop.set_blocking_log_threshold(60) - - self.ioloop.start() - - def reload(self): - logging.debug("Caught reload signal") + logging.info("Successfully initialied application") ## UI methods