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

add summary json endpoint

parent 32b94d3b
No related branches found
No related tags found
1 merge request!349SDC-1148 Summary endpoints
Pipeline #76282 passed
......@@ -1127,11 +1127,12 @@ def construct_linc_summary(task):
return results
def construct_summary(task):
def construct_summary(task, format='html'):
summary_flavour = get_summary_flavour(task)
logger.info(f'summary_flavour = {summary_flavour}')
if format=='html':
# construct the appropriate summary html
if summary_flavour == SummaryFlavour.DEFAULT.value:
return construct_default_summary(task)
......@@ -1145,4 +1146,116 @@ def construct_summary(task):
elif summary_flavour == SummaryFlavour.LINC_TARGET.value:
return construct_linc_summary(task)
elif format=='json':
if summary_flavour == SummaryFlavour.DEFAULT.value:
return construct_default_summary_json(task)
return None
def construct_default_summary_json(task):
total_size_input = 0
total_size_output = 0
quality_values = {'poor': 0, 'moderate': 0, 'good': 0}
sas_id = task.sas_id
title = f'Summary File for SAS_ID {task.sas_id}'
summary_json = {}
summary_json['title'] = title
tasks = Task.objects.filter(sas_id=sas_id)
tasks_records = []
for task in tasks:
task_record = {}
# skip 'suspended' and 'discarded' tasks
if task.status in ['suspended', 'discarded']:
continue
task_record['task'] = task.id
# find the summary in the quality json structure
try:
summary = task.quality_json["summary"]
for key in summary:
record = summary[key]
total_size_input += record['input_size']
total_size_output+= record['output_size']
task_record['file'] = key
task_record['input_name'] = record['input_name']
task_record['input_size'] = record['input_size']
task_record['output_name'] = record['output_name']
task_record['output_size'] = record['output_size']
task_record['size_ratio'] = str(round(record['size_ratio'],3))
if 'rfi_percent' in record:
# add RFI percentage (if present)
task_record['rfi_percent'] = str(record['rfi_percent'])
try:
# add calculated quality (if present)
calculated_qualities = task.calculated_qualities
if calculated_qualities:
task_quality = calculated_qualities['per_task']
task_record['task_quality'] = str(task_quality)
except:
pass
try:
task_record['added'] = record['added']
except:
pass
try:
task_record['deleted'] = record['deleted']
except:
pass
try:
key = task.calculated_qualities['per_task']
quality_values[key] = quality_values[key] + 1
except:
# ignore the tasks that have no calculated quality.
pass
tasks_records.append(task_record)
except:
pass
# calculate totals
totals_record = {}
try:
totals_record['input_size'] = total_size_input
totals_record['output_size'] = total_size_output
totals_record['ratio'] = round(total_size_output / total_size_input, 3)
try:
# add calculated quality per sasid (if present)
if calculated_qualities:
sasid_quality = calculated_qualities['per_sasid']
totals_record['sasid_quality'] = str(sasid_quality)
totals_record['quality_values'] = str(quality_values)
try:
quality_thresholds = json.loads(Configuration.objects.get(key='quality_thresholds').value)
totals_record['rfi_tresholds'] = quality_thresholds
except:
pass
except:
pass
except:
pass
summary_json['totals'] = totals_record
summary_json['tasks'] = tasks_records
return summary_json
......@@ -17,7 +17,7 @@
<a href="{% url 'task-retry-view' task.pk 'scrubbed' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
{% endif %}
{% if task.status == "archived_failed" %}
(manual) </b></a>
<a href="{% url 'task-retry-view' task.pk 'pre_archived' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
{% endif %}
{% if task.status == "finished_failed" %}
<a href="{% url 'task-retry-view' task.pk 'finishing' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
......
......@@ -1796,8 +1796,8 @@ def GetSummaryJson(request, sas_id):
# use a trick to be able to use the existing task based code
queryset = Task.objects.filter(sas_id=sas_id)
task = queryset[0]
#summary_json = algorithms.construct_summary_json(task)
summary_json = None
summary_json = algorithms.construct_summary(task,format='json')
return JsonResponse({
'summary': summary_json
})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment