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

Merge branch 'SDC-1005-multiple-summary-structures' into 'master'

Sdc 1005 multiple summary structures

See merge request !321
parents 77fa92dd bc0ce88c
No related branches found
No related tags found
2 merge requests!323merge keycloak changes into branch,!321Sdc 1005 multiple summary structures
Pipeline #59326 passed
......@@ -938,8 +938,6 @@ def construct_default_summary(task):
return results
def construct_imaging_summary(task):
totals = ""
......@@ -1072,6 +1070,63 @@ def construct_imaging_summary(task):
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):
summary_flavour = get_summary_flavour(task)
......@@ -1080,7 +1135,13 @@ def construct_summary(task):
if summary_flavour == SummaryFlavour.DEFAULT.value:
html = construct_default_summary(task)
elif summary_flavour == SummaryFlavour.IMAGING.value:
elif summary_flavour == SummaryFlavour.IMAGING_COMPRESSION.value:
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
\ No newline at end of file
......@@ -26,7 +26,7 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds):
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'])
if summary_flavour == SummaryFlavour.DEFAULT.value:
......@@ -35,6 +35,7 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds):
record = summary[key]
rfi_percent = float(record['rfi_percent'])
if rfi_percent > 0:
quality = "good"
if rfi_percent >= quality_thresholds['moderate']:
......@@ -44,6 +45,8 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds):
return quality
except Exception as error:
# when rfi_percentage is missing, then the quality cannot be calculated.
# Just continue without it
pass
def calculate_quality_sasid(unsaved_task, tasks_for_this_sasid):
......
......@@ -10,7 +10,9 @@ logger = logging.getLogger(__name__)
class SummaryFlavour(Enum):
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
def timeit(method):
......@@ -31,9 +33,10 @@ def get_summary_flavour(task):
"""
# not every workflow has the same summary structure
# 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 in a yucky way. But at least the yuck is confined to this function
"""
summary_flavour = "default"
summary_flavour = SummaryFlavour.DEFAULT.value
try:
summary = task.quality_json["summary"]
......@@ -41,9 +44,18 @@ def get_summary_flavour(task):
# no summary found
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:
d = summary["details"]
summary_flavour = "imaging"
summary_flavour = SummaryFlavour.IMAGING_COMPRESSION.value
except:
# this is not an imaging summary, continue with the default
pass
......
......@@ -31,7 +31,7 @@
{% include 'taskdatabase/pagination.html' %}
</div>
</div>
<p class="footer"> Version 28 Aug 2023
<p class="footer"> Version 31 Aug 2023
</div>
{% include 'taskdatabase/refresh.html' %}
......
......@@ -29,10 +29,10 @@
<img src="{% static 'taskdatabase/surfsara.jpg' %}" height="20" alt="inspection plots">
</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 %}">
<i class="fas fa-images"></i>
</a>&nbsp;
</a>&nbsp;-->
</td>
{% else %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment