diff --git a/atdb/taskdatabase/services/activities_handler.py b/atdb/taskdatabase/services/activities_handler.py index 17834aefe3102cbf6c88e6fbd4418af557e16c8d..14a69f6da5b7340391b5eef697318e918c7b0239 100644 --- a/atdb/taskdatabase/services/activities_handler.py +++ b/atdb/taskdatabase/services/activities_handler.py @@ -144,6 +144,22 @@ def reset_activity(task): # which is always... except in some simpler unittests pass +def create_aggregation_task(task): + """ + create a new aggregation task based on this task + """ + aggregation_task = Task( + task_type='aggregation', + filter=task.filter, + project=task.project, + sas_id=task.sas_id, + workflow=task.workflow, + status=State.IDLE.value, + new_status=State.IDLE.value, + activity=task.activity) + + aggregation_task.save() + def update_processed_and_aggregate(task): """ Check if the whole SAS_ID (activity) is processed. @@ -192,6 +208,12 @@ def update_processed_and_aggregate(task): if not activity.storage_location: activity.create_storage_location() + # create a new 'aggregate_task' that is used to collect the aggregated output + # this has to be done only once, so this is a good place to do it. + aggregation_tasks = Task.objects.filter(sas_id=task.sas_id,task_type='aggregation') + if aggregation_tasks.count()==0: + create_aggregation_task(task) + # this means that its tasks know that they should copy their H5 files to the storage_location # (but the tasks cannot do that, the aggregator service does) activity.status = State.COLLECTING_DATA.value diff --git a/atdb/taskdatabase/services/common.py b/atdb/taskdatabase/services/common.py index efba7f128473dda0c75831ee50819fa195e7c7ad..444b8364dd129ab4b67ec30b19b5087b8054ada2 100644 --- a/atdb/taskdatabase/services/common.py +++ b/atdb/taskdatabase/services/common.py @@ -29,6 +29,7 @@ class State(Enum): DISCARDED = "discarded" FAILED = "failed" COLLECTING_DATA = "collecting_data" + IDLE = "idle" VERIFIED_STATUSSES = [State.STORED.value, State.VALIDATED.value, State.SCRUBBED.value, State.PRE_ARCHIVED.value, State.ARCHIVED.value, State.FINISHED.value, State.SUSPENDED.value, State.DISCARDED.value] diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index 1aa3b26ba6397429ba8b606b0607c82fb5107bc0..20043ea404d49f6265c69071675e2cb45fff7d8a 100644 --- a/atdb/taskdatabase/templates/taskdatabase/index.html +++ b/atdb/taskdatabase/templates/taskdatabase/index.html @@ -31,7 +31,7 @@ {% include 'taskdatabase/pagination.html' %} </div> </div> - <p class="footer"> Version 23 Jul 2024 + <p class="footer"> Version 29 Jul 2024 </div> {% include 'taskdatabase/refresh.html' %} diff --git a/atdb/taskdatabase/templates/taskdatabase/tasks.html b/atdb/taskdatabase/templates/taskdatabase/tasks.html index ecf378640b5913ef23eeb895a6d0add7f6ab2297..3bc7d44829cc51c670ae40d3fe6a756c1853a0d2 100644 --- a/atdb/taskdatabase/templates/taskdatabase/tasks.html +++ b/atdb/taskdatabase/templates/taskdatabase/tasks.html @@ -1,6 +1,6 @@ {% load static %} {% for task in my_tasks %} - {% if task.status != "discarded" %} + {% if task.status != "discarded" and task.task_type == 'regular' %} <div class="row"> <tr class="{{ task.status }}"> @@ -17,7 +17,7 @@ {% if task.has_quality %} - {% if task.is_summary %} + {% if task.is_summary or task.task_type == 'aggregation' %} <a class="open-modal btn btn-secondary btn-sm" href="{% url 'task-quality' task.id my_tasks.number %}" data-popup-url="{% url 'task-quality' task.id my_tasks.number %}"