diff --git a/pillar/__init__.py b/pillar/__init__.py index fb2c0344..9d282647 100644 --- a/pillar/__init__.py +++ b/pillar/__init__.py @@ -465,6 +465,13 @@ class PillarServer(Eve): result_expires=3600, ) + # This configures the Celery task scheduler in such a way that we don't + # have to import the pillar.celery.XXX modules. Remember to run + # 'manage.py celery beat' too, otherwise those will never run. + beat_schedule = self.config.get('CELERY_BEAT_SCHEDULE') + if beat_schedule: + self.celery.conf.beat_schedule = beat_schedule + self.log.info('Pinging Celery workers') self.log.info('Response: %s', self.celery.control.ping()) diff --git a/pillar/cli/celery.py b/pillar/cli/celery.py index 85abe55f..8f5aa110 100644 --- a/pillar/cli/celery.py +++ b/pillar/cli/celery.py @@ -58,3 +58,12 @@ def purge(): log.warning('Purging all pending Celery tasks.') current_app.celery.control.purge() + + +@manager_celery.option('args', nargs='*') +def beat(args): + """Runs the Celery beat.""" + + from celery.bin.beat import beat + + return beat(app=current_app.celery).run_from_argv('je moeder', args, command='beat') diff --git a/pillar/config.py b/pillar/config.py index 057a5b5c..c1af2a18 100644 --- a/pillar/config.py +++ b/pillar/config.py @@ -178,6 +178,16 @@ TLS_CERT_FILE = requests.certs.where() CELERY_BACKEND = 'redis://redis/1' CELERY_BROKER = 'amqp://guest:guest@rabbit//' +# This configures the Celery task scheduler in such a way that we don't +# have to import the pillar.celery.XXX modules. Remember to run +# 'manage.py celery beat' too, otherwise those will never run. +CELERY_BEAT_SCHEDULE = { + 'regenerate-expired-links': { + 'task': 'pillar.celery.file_link_tasks.regenerate_all_expired_links', + 'schedule': 600.0, + 'args': ('gcs', 100) + }, +} # Mapping from user role to capabilities obtained by users with that role. USER_CAPABILITIES = defaultdict(**{