From 08f73d1f5bf79d45e586a03a5b86fe09266c8c3f Mon Sep 17 00:00:00 2001
From: Roy de Goei <goei@astron.nl>
Date: Thu, 27 Jan 2022 13:04:13 +0100
Subject: [PATCH] SDC-470: Do not filter on status and skip when no timestamp

---
 atdb/taskdatabase/services/algorithms.py | 37 +++++++++++++-----------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py
index 925f5437..d1f5dc25 100644
--- a/atdb/taskdatabase/services/algorithms.py
+++ b/atdb/taskdatabase/services/algorithms.py
@@ -44,30 +44,33 @@ def get_size(status_list, type):
 @timeit
 def get_min_start_and_max_end_time(sas_id):
     """
-    Retrieve the minimum start time en maximum end time of a set of taskids (sas_id) which has the
-    status 'archived' or 'finished'
+    Retrieve the minimum start time en maximum end time of a set of taskids (sas_id)
     The start time is the moment when the task start 'processing'
     The end time is the moment when the task was 'processed'
     """
     min_start_time = None
     max_end_time = None
     logger.info("get_min_start_and_max_end_time(" + str(sas_id) + ")")
-    tasks = Task.objects.filter(sas_id=sas_id).filter(Q(status='archived') | Q(status='finished'))
+    tasks = Task.objects.filter(sas_id=sas_id)
     for task in tasks:
-        # If more entrees are found for 'processing' task, get the latest
-        latest_start_time = LogEntry.objects.filter(task=task.pk).filter(step_name='running').filter(status='processing').latest('timestamp')
-        start_time = latest_start_time.timestamp
-        # If more entrees are found for 'processed' task, get the latest
-        lastest_end_time = LogEntry.objects.filter(task=task.pk).filter(step_name='running').filter(status='processed').latest('timestamp')
-        end_time = lastest_end_time.timestamp
-        if min_start_time is None:
-            min_start_time = start_time
-        elif start_time < min_start_time:
-            min_start_time = start_time
-        if max_end_time is None:
-            max_end_time = end_time
-        elif end_time > max_end_time:
-            max_end_time = end_time
+        try:
+            # If more entrees are found for 'processing' task, get the latest
+            latest_start_time = LogEntry.objects.filter(task=task.pk).filter(step_name='running').filter(status='processing').latest('timestamp')
+            start_time = latest_start_time.timestamp
+            # If more entrees are found for 'processed' task, get the latest
+            lastest_end_time = LogEntry.objects.filter(task=task.pk).filter(step_name='running').filter(status='processed').latest('timestamp')
+            end_time = lastest_end_time.timestamp
+            if min_start_time is None:
+                min_start_time = start_time
+            elif start_time < min_start_time:
+                min_start_time = start_time
+            if max_end_time is None:
+                max_end_time = end_time
+            elif end_time > max_end_time:
+                max_end_time = end_time
+        except:
+            pass  # having no timestamp, just skip
+
     return min_start_time, max_end_time
 
 
-- 
GitLab