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