From 6e7eccbc9cd5f391e073c8adf4b204aae5db3868 Mon Sep 17 00:00:00 2001 From: Vermaas <vermaas@astron.nl> Date: Fri, 23 Feb 2024 08:06:19 +0100 Subject: [PATCH] add update-summary-flag endpoint, in case of data migration --- atdb/taskdatabase/models.py | 1 + atdb/taskdatabase/urls.py | 1 + atdb/taskdatabase/views.py | 27 ++++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index 5f6e51cc..49e9aaae 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -154,6 +154,7 @@ def check_if_summary(task): for tar in tars: if 'summary' in tar['basename']: # a summary tarball was found, this task is a summary task + logger.info(f'task {task.id} with workflow {task.workflow} is a summary task') return True except: # no 'tar_archive' was found diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py index 906ffe5e..0c5fb770 100644 --- a/atdb/taskdatabase/urls.py +++ b/atdb/taskdatabase/urls.py @@ -133,4 +133,5 @@ urlpatterns = [ #some migration and repair endpoints path('tasks/repair/associate-activities/', views.AssociateActivities, name='associate-activities'), path('tasks/repair/update-activity/<sas_id>', views.UpdateActivitySasId, name='update-activity-sasid'), + path('tasks/repair/update-summary-flag/<task_id>', views.UpdateSummaryFlag, name='update-summary-flag'), ] diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 0ff77a34..9ee039c8 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -24,6 +24,8 @@ from rest_framework.request import Request from django.conf import settings from .models import Activity, Task, Workflow, LogEntry, Configuration, Job, PostProcessingRule, Monitor, LatestMonitor +from .models import check_if_summary + from .services.common import State from .services.signals import disconnect_signals, connect_signals from .tables import TaskTable @@ -1685,7 +1687,7 @@ class GetUniqueValuesForKey(generics.ListAPIView): @staff_member_required def AssociateActivities(request): - # disconnect the signals to avoid save recursion + # disconnect the signals to avoid unneccesary updates disconnect_signals() #tasks = Task.objects.filter(activity__isnull=True)[:10000] @@ -1734,3 +1736,26 @@ def UpdateActivitySasId(request, sas_id): 'total': total }) +def UpdateSummaryFlag(request, task_id): + # this function is called externally to avoid worker timeouts + # http://localhost:8000/atdb/tasks/repair/update-summary-flag/12345 + + try: + task = Task.objects.get(id=task_id) + if not task.is_summary: + is_summary = check_if_summary(task) + if is_summary: + # disconnect the signals to avoid unneccesary updates + disconnect_signals() + task.save() + connect_signals() + + except Exception as error: + logger.error(error) + return JsonResponse({ + 'error': str(error) + }) + + return JsonResponse({ + 'is_summary': task.is_summary + }) -- GitLab