From 1f25962d787863480d9b5c480e3972e233b3b9c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 17:33:14 +0100 Subject: [PATCH] [Fixes #10303] automatic periodic TaskResult removal (#10306) (#10319) * [Fixes #10303] automatic periodic TaskResult removal * [Fixes #10303] automatic periodic TaskResult removal * [Fixes #10303] automatic periodic TaskResult removal * [Fixes #10303] fix flake8 formatting Co-authored-by: Alessio Fabiani Co-authored-by: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com> Co-authored-by: Alessio Fabiani --- geonode/settings.py | 1 + geonode/upload/__init__.py | 17 +++++++++++++++++ geonode/upload/tasks.py | 13 +++++++++++++ 3 files changed, 31 insertions(+) diff --git a/geonode/settings.py b/geonode/settings.py index e82ac2b8fec..92816eeaa32 100644 --- a/geonode/settings.py +++ b/geonode/settings.py @@ -1755,6 +1755,7 @@ def get_geonode_catalogue_service(): Queue('email', GEONODE_EXCHANGE, routing_key='email', priority=0), Queue('security', GEONODE_EXCHANGE, routing_key='security', priority=0), Queue('management_commands_http', GEONODE_EXCHANGE, routing_key='management_commands_http', priority=0), + Queue('clery_cleanup', GEONODE_EXCHANGE, routing_key='clery_cleanup', priority=0) ) if USE_GEOSERVER: diff --git a/geonode/upload/__init__.py b/geonode/upload/__init__.py index 45422903171..74da66ef06b 100644 --- a/geonode/upload/__init__.py +++ b/geonode/upload/__init__.py @@ -54,6 +54,19 @@ def run_setup_hooks(sender, **kwargs): start_time=timezone.now() ) ) + daily_interval, _ = IntervalSchedule.objects.get_or_create( + every=1, + period="days" + ) + PeriodicTask.objects.update_or_create( + name="clean-up-old-task-result", + defaults=dict( + task="geonode.upload.tasks.cleanup_celery_task_entries", + interval=daily_interval, + args='', + start_time=timezone.now() + ) + ) class UploadAppConfig(AppConfig): @@ -67,6 +80,10 @@ def ready(self): 'task': 'geonode.upload.tasks.finalize_incomplete_session_uploads', 'schedule': 10.0, } + settings.CELERY_BEAT_SCHEDULE['clean-up-old-task-result'] = { + 'task': 'geonode.upload.tasks.cleanup_celery_task_entries', + 'schedule': 86400.0, + } default_app_config = "geonode.upload.UploadAppConfig" diff --git a/geonode/upload/tasks.py b/geonode/upload/tasks.py index 599ecce2d7e..099023ecc83 100644 --- a/geonode/upload/tasks.py +++ b/geonode/upload/tasks.py @@ -16,6 +16,7 @@ # along with this program. If not, see . # ######################################################################### +from datetime import datetime import json import logging @@ -238,3 +239,15 @@ def _upload_session_cleanup(self, upload_session_id: int): logger.debug(f"Upload {upload_session_id} deleted with state {_upload.state}.") except Exception as e: logger.error(f"Upload {upload_session_id} errored with exception {e}.") + + +@app.task( + bind=False, + acks_late=False, + queue="clery_cleanup", + ignore_result=True) +def cleanup_celery_task_entries(): + from django_celery_results.models import TaskResult + result_obj = TaskResult.objects.filter(date_done__lte=(datetime.today() - timedelta(days=7))) + logger.error(f"Total celery task to be deleted: {result_obj.count()}") + result_obj.delete()