Add periodic task to remove stale shared uploads.

This commit is contained in:
Roberto Rosario
2015-09-08 18:58:48 -04:00
parent 43e1ffbc24
commit 460d8585ee
3 changed files with 53 additions and 0 deletions

View File

@@ -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,

View File

@@ -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

View File

@@ -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')