From e913aeae3703bbc117288cf005175cbf2cf75b0b Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Sun, 10 Jan 2021 20:23:55 +0100 Subject: [PATCH] =?UTF-8?q?Spou=C5=A1t=C4=9Bn=C3=AD=20job=C5=AF=20pomoc?= =?UTF-8?q?=C3=AD=20uwsgi=20mules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO | 5 +++-- etc/uwsgi.ini.example | 1 + mo/web/__init__.py | 34 ++++++++++++++++++++++++++++++++++ setup.py | 1 + 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 4d59484e..98a58e30 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,5 @@ -- select for update - Nasazení: - zkontrolovat rotování logů (i u /akce/mathletics/ a jiných instancí uwsgi) +- zapnout mule v uwsgi.ini +- upgradovat strukturu DB +- doplnit config.py diff --git a/etc/uwsgi.ini.example b/etc/uwsgi.ini.example index c8e1c202..c2559d9d 100644 --- a/etc/uwsgi.ini.example +++ b/etc/uwsgi.ini.example @@ -18,5 +18,6 @@ mount = /osmo-test=mo.web:app plugin = python3 virtualenv = venv manage-script-name = true +mule static-map = /static=static diff --git a/mo/web/__init__.py b/mo/web/__init__.py index 31b84a90..5e52757d 100644 --- a/mo/web/__init__.py +++ b/mo/web/__init__.py @@ -13,6 +13,7 @@ import werkzeug.exceptions import mo import mo.config as config import mo.db as db +import mo.jobs import mo.users import mo.util from mo.util import logger @@ -83,6 +84,39 @@ def init_request(): app.before_request(init_request) +### UWSGI glue ### + +try: + import uwsgi + from uwsgidecorators import timer, signal + + # Čas od času se probudíme a projdeme joby pro případ, že by se ztratil signál. + # Také při tom expirujeme zastaralé joby. + @timer(120, target='mule') + def mule_timer(signum): + app.logger.debug('Mule: Timer tick') + with app.app_context(): + mo.now = mo.util.get_now() + mo.jobs.process_jobs() + + # Obykle při vložení jobu dostaneme signál. + @signal(42, target='mule') + def mule_signal(signum): + app.logger.debug('Mule: Přijat signál') + with app.app_context(): + mo.now = mo.util.get_now() + mo.jobs.process_jobs() + + def wake_up_mule(): + app.logger.debug('Mule: Posíláme signál') + uwsgi.signal(42) + + mo.jobs.send_notify = wake_up_mule + +except ImportError: + app.logger.warn('Nenalezeno UWSGI, takže automatické notifikace nepoběží.') + + # Většina webu je v samostatných modulech import mo.web.auth import mo.web.menu diff --git a/setup.py b/setup.py index a7c8f036..e4d89a8b 100644 --- a/setup.py +++ b/setup.py @@ -30,5 +30,6 @@ setuptools.setup( 'pikepdf', 'psycopg2', 'sqlalchemy', + 'uwsgidecorators', ], ) -- GitLab