root: implement monitored tasks

This commit is contained in:
Jens Langhammer
2020-10-16 11:28:54 +02:00
parent 17060238f0
commit 91ce7f7363
12 changed files with 217 additions and 11 deletions

View File

@ -3,14 +3,16 @@ from django.utils.timezone import now
from structlog import get_logger
from passbook.core.models import ExpiringModel
from passbook.lib.tasks import MonitoredTask, TaskResult, TaskResultStatus
from passbook.root.celery import CELERY_APP
LOGGER = get_logger()
@CELERY_APP.task()
def clean_expired_models():
@CELERY_APP.task(bind=True, base=MonitoredTask)
def clean_expired_models(self: MonitoredTask):
"""Remove expired objects"""
messages = []
for cls in ExpiringModel.__subclasses__():
cls: ExpiringModel
amount, _ = (
@ -20,3 +22,5 @@ def clean_expired_models():
.delete()
)
LOGGER.debug("Deleted expired models", model=cls, amount=amount)
messages.append(f"Deleted {amount} expired {cls._meta.verbose_name_plural}")
self.set_status(TaskResult(TaskResultStatus.SUCCESSFUL, messages))

View File

@ -14,5 +14,5 @@ class TestTasks(TestCase):
"""Test Token cleanup task"""
Token.objects.create(expires=now(), user=get_anonymous_user())
self.assertEqual(Token.objects.all().count(), 1)
clean_expired_models()
clean_expired_models.delay()
self.assertEqual(Token.objects.all().count(), 0)