From 225c76f1916831e44a1252ebc43f71981f821c15 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 8 Apr 2023 14:45:44 +0200 Subject: [PATCH] misc: use hobo.multitenant.spooler (#76430) --- debian/uwsgi.ini | 3 +-- passerelle/base/models.py | 33 +++++++++++++++++++++++++++------ passerelle/settings.py | 1 + passerelle/utils/spooler.py | 30 +++++------------------------- 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/debian/uwsgi.ini b/debian/uwsgi.ini index 3c0224dd..1e758625 100644 --- a/debian/uwsgi.ini +++ b/debian/uwsgi.ini @@ -13,8 +13,7 @@ chmod-socket = 666 vacuum = true spooler-processes = 3 -spooler-python-import = hobo.provisionning.spooler -spooler-python-import = passerelle.utils.spooler +spooler-python-import = hobo.multitenant.spooler spooler-max-tasks = 20 # every five minutes diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 6808a2d7..2e88384b 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -7,6 +7,7 @@ import itertools import logging import os import re +import subprocess import sys import traceback import uuid @@ -36,7 +37,7 @@ from model_utils.managers import InheritanceManager as ModelUtilsInheritanceMana import passerelle from passerelle.forms import GenericConnectorForm -from passerelle.utils import ImportSiteError +from passerelle.utils import ImportSiteError, spooler from passerelle.utils.api import endpoint from passerelle.utils.jsonresponse import APIError from passerelle.utils.sftp import SFTP, SFTPField @@ -849,13 +850,33 @@ class Job(models.Model): self.status_details.update({'new_job_pk': new_job.pk}) self.save() + @classmethod + def run_with_subprocess(cls, job_id): + tenant = getattr(connection, 'tenant', None) + domain = getattr(tenant, 'domain_url', None) + + cmd_args = [ + settings.PASSERELLE_MANAGE_COMMAND, + ] + + if domain: + # multitenant installation + cmd_args.append('tenant_command') + + cmd_args += ['runjob', '--job-id', str(job_id)] + + if domain: + # multitenant installation + cmd_args.append('--domain') + cmd_args.append(domain) + + # pylint: disable=subprocess-run-check + subprocess.run(cmd_args) + def run(self, spool=False): if spool and self.pk: - if 'uwsgi' in sys.modules and settings.PASSERELLE_MANAGE_COMMAND: - from passerelle.utils.spooler import run_job - - tenant = getattr(connection, 'tenant', None) - run_job.spool(job_id=str(self.pk), domain=getattr(tenant, 'domain_url', None)) + if settings.PASSERELLE_MANAGE_COMMAND: + spooler.run(Job.run_with_subprocess, job_id=self.pk) return self.status = 'running' diff --git a/passerelle/settings.py b/passerelle/settings.py index f4750b91..10923eeb 100644 --- a/passerelle/settings.py +++ b/passerelle/settings.py @@ -291,6 +291,7 @@ LOGGED_REQUESTS_MAX_SIZE = 5000 # Number of days to keep logs LOG_RETENTION_DAYS = 7 +USE_NEW_SPOOLER = True LOGGING = { 'version': 1, diff --git a/passerelle/utils/spooler.py b/passerelle/utils/spooler.py index a6fd7854..ff5013ff 100644 --- a/passerelle/utils/spooler.py +++ b/passerelle/utils/spooler.py @@ -14,29 +14,9 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import subprocess +try: + from hobo.multitenant.spooler import run # pylint: disable=unused-import +except ImportError: -from uwsgidecorators import spool # pylint: disable=import-error - - -@spool -def run_job(args): - from django.conf import settings - - cmd_args = [ - settings.PASSERELLE_MANAGE_COMMAND, - ] - - if args.get('domain'): - # multitenant installation - cmd_args.append('tenant_command') - - cmd_args += ['runjob', '--job-id', args['job_id']] - - if args.get('domain'): - # multitenant installation - cmd_args.append('--domain') - cmd_args.append(args['domain']) - - # pylint: disable=subprocess-run-check - subprocess.run(cmd_args) + def run(func, *args, **kwargs): + func(*args, **kwargs)