Skip to content
Snippets Groups Projects
Commit 150a7d52 authored by Nico Vermaas's avatar Nico Vermaas
Browse files

added summary info for LINC pipelines also

parent 44b56b8c
No related branches found
No related tags found
1 merge request!321Sdc 1005 multiple summary structures
Pipeline #56747 passed
...@@ -938,8 +938,6 @@ def construct_default_summary(task): ...@@ -938,8 +938,6 @@ def construct_default_summary(task):
return results return results
def construct_imaging_summary(task): def construct_imaging_summary(task):
totals = "" totals = ""
...@@ -1072,6 +1070,63 @@ def construct_imaging_summary(task): ...@@ -1072,6 +1070,63 @@ def construct_imaging_summary(task):
return results return results
def construct_linc_summary(task):
totals = ""
results = ""
total_size_to_process = 0
total_size_processed = 0
total_total_processing_time = 0
quality_values = {'poor': 0, 'moderate': 0, 'good': 0}
sas_id = task.sas_id
title = "<h4>Summary File for SAS_ID " + task.sas_id + "</h4> "
tasks = Task.objects.filter(sas_id=sas_id)
for task in tasks:
# skip 'suspended' and 'discarded' tasks
if task.status in ['suspended', 'discarded']:
continue
results += '<tr style="background-color:#7EB1C4"><td colspan="3"><b>Task ' + str(task.id) + '</b></td></tr>'
total_size_to_process += task.size_to_process
total_size_processed += task.size_processed
total_total_processing_time += task.total_processing_time
# find the summary in the quality json structure
try:
summary = task.quality_json["summary"]
results += '<tr><td><b>size_to_process</b></td><td>' + str(task.size_to_process) + '</td></tr>'
results += '<tr><td><b>size_processed</b></td><td>' + str(task.size_processed) + '</td></tr>'
results += '<tr><td><b>basename</b></td><td>' + str(summary['basename']) + '</td></tr>'
results += '<tr><td><b>checksum</b></td><td>' + str(summary['checksum']) + '</td></tr>'
results += '<tr><td><b>class</b></td><td>' + str(summary['class']) + '</td></tr>'
results += '<tr><td><b>location</b></td><td>' + str(summary['location']) + '</td></tr>'
results += '<tr><td><b>nameext</b></td><td>' + str(summary['nameext']) + '</td></tr>'
results += '<tr><td><b>nameroot</b></td><td>' + str(summary['nameroot']) + '</td></tr>'
results += '<tr><td><b>size</b></td><td>' + str(summary['size']) + '</td></tr>'
results += '<tr><td><b>surl</b></td><td>' + str(summary['surl']) + '</td></tr>'
except:
pass
totals += '<th>Totals</th><th></th><th width="35%"></th>'
try:
totals += '<tr><td><b>Size to process</b></td colspan="2"><td>' + str(total_size_to_process) + '</td></tr>'
totals += '<tr><td><b>Size processed</b><td colspan="2">' + str(total_size_processed) + '</td></tr>'
except:
pass
results = title + totals + results
return results
def construct_summary(task): def construct_summary(task):
summary_flavour = get_summary_flavour(task) summary_flavour = get_summary_flavour(task)
...@@ -1080,7 +1135,13 @@ def construct_summary(task): ...@@ -1080,7 +1135,13 @@ def construct_summary(task):
if summary_flavour == SummaryFlavour.DEFAULT.value: if summary_flavour == SummaryFlavour.DEFAULT.value:
html = construct_default_summary(task) html = construct_default_summary(task)
elif summary_flavour == SummaryFlavour.IMAGING.value: elif summary_flavour == SummaryFlavour.IMAGING_COMPRESSION.value:
html = construct_imaging_summary(task) html = construct_imaging_summary(task)
elif summary_flavour == SummaryFlavour.LINC_CALIBRATOR.value:
html = construct_linc_summary(task)
elif summary_flavour == SummaryFlavour.LINC_TARGET.value:
html = construct_linc_summary(task)
return html return html
\ No newline at end of file
...@@ -26,7 +26,7 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds): ...@@ -26,7 +26,7 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds):
summary_flavour = get_summary_flavour(task) summary_flavour = get_summary_flavour(task)
if summary_flavour == SummaryFlavour.IMAGING.value: if summary_flavour == SummaryFlavour.IMAGING_COMPRESSION.value:
rfi_percent = float(summary['details']['rfi_percentage']) rfi_percent = float(summary['details']['rfi_percentage'])
if summary_flavour == SummaryFlavour.DEFAULT.value: if summary_flavour == SummaryFlavour.DEFAULT.value:
...@@ -35,6 +35,7 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds): ...@@ -35,6 +35,7 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds):
record = summary[key] record = summary[key]
rfi_percent = float(record['rfi_percent']) rfi_percent = float(record['rfi_percent'])
if rfi_percent > 0: if rfi_percent > 0:
quality = "good" quality = "good"
if rfi_percent >= quality_thresholds['moderate']: if rfi_percent >= quality_thresholds['moderate']:
...@@ -44,6 +45,8 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds): ...@@ -44,6 +45,8 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds):
return quality return quality
except Exception as error: except Exception as error:
# when rfi_percentage is missing, then the quality cannot be calculated.
# Just continue without it
pass pass
def calculate_quality_sasid(unsaved_task, tasks_for_this_sasid): def calculate_quality_sasid(unsaved_task, tasks_for_this_sasid):
......
...@@ -10,7 +10,9 @@ logger = logging.getLogger(__name__) ...@@ -10,7 +10,9 @@ logger = logging.getLogger(__name__)
class SummaryFlavour(Enum): class SummaryFlavour(Enum):
DEFAULT = "default" DEFAULT = "default"
IMAGING = "imaging" LINC_CALIBRATOR = "linc_calibrator"
LINC_TARGET = "linc_target"
IMAGING_COMPRESSION = "imaging_compression"
# this is a decorator that can be put in front (around) a function all to measure its execution time # this is a decorator that can be put in front (around) a function all to measure its execution time
def timeit(method): def timeit(method):
...@@ -33,7 +35,7 @@ def get_summary_flavour(task): ...@@ -33,7 +35,7 @@ def get_summary_flavour(task):
# determine the flavour based on the selected task, and construct the html accordingly # determine the flavour based on the selected task, and construct the html accordingly
# this could be made implicit in the future by adding a setting to the Workflow, but currently it is derived # this could be made implicit in the future by adding a setting to the Workflow, but currently it is derived
""" """
summary_flavour = "default" summary_flavour = SummaryFlavour.DEFAULT.value
try: try:
summary = task.quality_json["summary"] summary = task.quality_json["summary"]
...@@ -41,9 +43,18 @@ def get_summary_flavour(task): ...@@ -41,9 +43,18 @@ def get_summary_flavour(task):
# no summary found # no summary found
return None return None
# so... yikes... what distinguishes the summary flavours?
workflow_uri = task.workflow.workflow_uri
# for linc, look at the workflow_uri
if "linc_calibrator" in workflow_uri:
return SummaryFlavour.LINC_CALIBRATOR.value
if "linc_target" in workflow_uri:
return SummaryFlavour.LINC_TARGET.value
try: try:
d = summary["details"] d = summary["details"]
summary_flavour = "imaging" summary_flavour = SummaryFlavour.IMAGING_COMPRESSION.value
except: except:
# this is not an imaging summary, continue with the default # this is not an imaging summary, continue with the default
pass pass
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
{% include 'taskdatabase/pagination.html' %} {% include 'taskdatabase/pagination.html' %}
</div> </div>
</div> </div>
<p class="footer"> Version 28 Aug 2023 <p class="footer"> Version 31 Aug 2023
</div> </div>
{% include 'taskdatabase/refresh.html' %} {% include 'taskdatabase/refresh.html' %}
......
...@@ -29,10 +29,10 @@ ...@@ -29,10 +29,10 @@
<img src="{% static 'taskdatabase/surfsara.jpg' %}" height="20" alt="inspection plots"> <img src="{% static 'taskdatabase/surfsara.jpg' %}" height="20" alt="inspection plots">
</a>&nbsp; </a>&nbsp;
<a class="open-modal btn btn-warning btn-sm" <!-- <a class="open-modal btn btn-warning btn-sm"
data-popup-url="{% url 'inspection-plots-sasid' task.id True %}"> data-popup-url="{% url 'inspection-plots-sasid' task.id True %}">
<i class="fas fa-images"></i> <i class="fas fa-images"></i>
</a>&nbsp; </a>&nbsp;-->
</td> </td>
{% else %} {% else %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment