diff --git a/aleksis/core/data_checks.py b/aleksis/core/data_checks.py index f7152686f61fb63997eb9e0a6af9e23b47237f66..a7d43d293a34e69f329cf9506116cd36d8a5103c 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 2ee83523ca49c5b112579a98b49147dbf3afcff8..0eb64c62cdc8368e664d3a2a031d7d6dc5d003f2 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,17 +756,19 @@ 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.")) - 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):