From 460d8585eec0541d93a975add6b68f49b2e690a3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 8 Sep 2015 18:58:48 -0400 Subject: [PATCH] Add periodic task to remove stale shared uploads. --- mayan/apps/common/apps.py | 26 ++++++++++++++++++++++++++ mayan/apps/common/literals.py | 3 +++ mayan/apps/common/tasks.py | 24 ++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 mayan/apps/common/tasks.py diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index af82f368a8..85f76801b7 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -1,5 +1,6 @@ from __future__ import absolute_import, unicode_literals +from datetime import timedelta import logging from kombu import Exchange, Queue @@ -22,7 +23,9 @@ from .links import ( link_current_user_locale_profile_edit, link_filters, link_license, link_setup, link_tools ) +from .literals import DELETE_STALE_UPLOADS_INTERVAL from .menus import menu_facet, menu_main, menu_secondary, menu_tools +from .tasks import task_delete_stale_uploads # NOQA - Force task registration logger = logging.getLogger(__name__) @@ -58,15 +61,38 @@ class CommonApp(MayanAppConfig): def ready(self): super(CommonApp, self).ready() + app.conf.CELERYBEAT_SCHEDULE.update( + { + 'task_delete_stale_uploads': { + 'task': 'common.tasks.task_delete_stale_uploads', + 'schedule': timedelta( + seconds=DELETE_STALE_UPLOADS_INTERVAL + ), + }, + } + ) + app.conf.CELERY_QUEUES.extend( ( Queue('default', Exchange('default'), routing_key='default'), Queue('tools', Exchange('tools'), routing_key='tools'), + Queue( + 'common_periodic', Exchange('common_periodic'), + routing_key='common_periodic', delivery_mode=1 + ), ) ) app.conf.CELERY_DEFAULT_QUEUE = 'default' + app.conf.CELERY_ROUTES.update( + { + 'common.tasks.task_delete_stale_uploads': { + 'queue': 'common_periodic' + }, + } + ) + menu_facet.bind_links( links=( link_current_user_details, diff --git a/mayan/apps/common/literals.py b/mayan/apps/common/literals.py index e1d6e61813..8b65daf4c0 100644 --- a/mayan/apps/common/literals.py +++ b/mayan/apps/common/literals.py @@ -2,8 +2,11 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ + +DELETE_STALE_UPLOADS_INTERVAL = 60 * 10 # 10 minutes TIME_DELTA_UNIT_CHOICES = ( ('days', _('Days')), ('hours', _('Hours')), ('minutes', _('Minutes')), ) +UPLOAD_EXPIRATION_INTERVAL = 60 * 60 * 24 * 7 # 7 days diff --git a/mayan/apps/common/tasks.py b/mayan/apps/common/tasks.py new file mode 100644 index 0000000000..0a42ec988c --- /dev/null +++ b/mayan/apps/common/tasks.py @@ -0,0 +1,24 @@ +from __future__ import unicode_literals + +from datetime import timedelta +import logging + +from django.utils.timezone import now + +from mayan.celery import app +from common.models import SharedUploadedFile + +from .literals import UPLOAD_EXPIRATION_INTERVAL +from .models import SharedUploadedFile + +logger = logging.getLogger(__name__) + + +@app.task(ignore_result=True) +def task_delete_stale_uploads(): + logger.info('Executing') + + for expired_upload in SharedUploadedFile.objects.filter(datetime__lt=now() - timedelta(seconds=UPLOAD_EXPIRATION_INTERVAL)): + expired_upload.delete() + + logger.info('Finshed')