cron: add a option to target domain (#44188)

This commit is contained in:
Lauréline Guérin 2020-11-27 15:35:36 +01:00
parent 33cddd0a2c
commit 262977132a
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 13 additions and 3 deletions

View File

@ -198,8 +198,13 @@ def test_cron_command():
gettempdir.side_effect = lambda: pub.app_dir
with mock.patch('wcs.qommon.management.commands.cron.cron_worker') as cron_worker:
call_command('cron')
assert cron_worker.call_count == 1
with mock.patch('wcs.qommon.publisher.QommonPublisher.get_tenants') as mock_tenants:
mock_tenants.return_value = ['example.net', 'foo.bar', 'something.com']
call_command('cron')
assert cron_worker.call_count == 3
cron_worker.reset_mock()
call_command('cron', domain='example.net')
assert cron_worker.call_count == 1
# simulate another locked cron
from wcs.qommon.vendor import locket

View File

@ -34,6 +34,7 @@ class Command(BaseCommand):
def add_arguments(self, parser):
parser.set_defaults(verbosity=0)
parser.add_argument('-d', '--domain', '--vhost', metavar='DOMAIN')
parser.add_argument('--force-job', dest='force_job', action='store_true',
help='Run even if DISABLE_CRON_JOBS is set in settings')
parser.add_argument('--job', dest='job_name', metavar='NAME')
@ -44,6 +45,10 @@ class Command(BaseCommand):
print('Command is ignored because DISABLE_CRON_JOBS is set in settings')
return
lockfile = os.path.join(tempfile.gettempdir(), 'wcs-cron-in-progress.lock')
if options.get('domain'):
domains = [options.get('domain')]
else:
domains = get_publisher_class().get_tenants()
try:
with locket.lock_file(lockfile, timeout=0):
if verbosity > 2:
@ -53,7 +58,7 @@ class Command(BaseCommand):
publisher_class.register_cronjobs()
publisher = publisher_class.create_publisher()
app_dir = publisher.app_dir
for hostname in publisher.get_tenants():
for hostname in domains:
if verbosity > 1:
print('cron work on %s' % hostname)
publisher.app_dir = os.path.join(app_dir, hostname)