From 64582b72f85bacf44cf100d3db163e899801275a Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Mon, 8 Mar 2021 12:18:08 +0100 Subject: [PATCH 1/2] Make data checks compatible with non-optional Celery --- aleksis/core/views.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/aleksis/core/views.py b/aleksis/core/views.py index f1bc04013..b2642e20e 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -750,16 +750,14 @@ class RunDataChecks(PermissionRequiredMixin, View): permission_required = "core.run_data_checks" def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: - if not check_data()[1]: - messages.success( - request, - _( - "The data check has been started. Please note that it may take " - "a while before you are able to fetch the data on this page." - ), - ) - else: - messages.success(request, _("The data check has finished.")) + check_data.delay() + messages.success( + request, + _( + "The data check has been started. Please note that it may take " + "a while before you are able to fetch the data on this page." + ), + ) return redirect("check_data") -- GitLab From ddc1b47de08620ca39a824d1aea3649180312928 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 14 Mar 2021 12:16:58 +0100 Subject: [PATCH 2/2] Use celery progress recorder for running data checks in the frontend --- aleksis/core/data_checks.py | 8 ++++---- aleksis/core/views.py | 24 ++++++++++++++---------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/aleksis/core/data_checks.py b/aleksis/core/data_checks.py index f7152686f..a7d43d293 100644 --- a/aleksis/core/data_checks.py +++ b/aleksis/core/data_checks.py @@ -9,7 +9,7 @@ import reversion from reversion import set_comment from templated_email import send_templated_mail -from .celery import app +from .util.celery_progress import ProgressRecorder, recorded_task from .util.core_helpers import get_site_preferences @@ -208,10 +208,10 @@ class DataCheckRegistry: return [(check.name, check.verbose_name) for check in cls.data_checks] -@app.task -def check_data(): +@recorded_task +def check_data(recorder: ProgressRecorder): """Execute all registered data checks and send email if activated.""" - for check in DataCheckRegistry.data_checks: + for check in recorder.iterate(DataCheckRegistry.data_checks): logging.info(f"Run check: {check.verbose_name}") check.check_data() diff --git a/aleksis/core/views.py b/aleksis/core/views.py index 5b040e013..0eb64c62c 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -8,7 +8,7 @@ from django.db.models import QuerySet from django.forms.models import BaseModelForm, modelform_factory from django.http import HttpRequest, HttpResponse, HttpResponseNotFound from django.shortcuts import get_object_or_404, redirect, render -from django.urls import reverse_lazy +from django.urls import reverse, reverse_lazy from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.views.decorators.cache import never_cache @@ -756,15 +756,19 @@ class RunDataChecks(PermissionRequiredMixin, View): permission_required = "core.run_data_checks" def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: - check_data.delay() - messages.success( - request, - _( - "The data check has been started. Please note that it may take " - "a while before you are able to fetch the data on this page." - ), - ) - return redirect("check_data") + result = check_data.delay() + + context = { + "title": _("Progress: Run data checks"), + "back_url": reverse("check_data"), + "progress": { + "task_id": result.task_id, + "title": _("Run data checks …"), + "success": _("The data checks were run successfully."), + "error": _("There was a problem while running data checks."), + }, + } + return render(request, "core/pages/progress.html", context) class SolveDataCheckView(PermissionRequiredMixin, RevisionMixin, DetailView): -- GitLab