diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index b62b5e9044c77c30b9247af029f82fae6e6d54d1..333f671b18305d8e5e73e34d0136ef5da1ca8421 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -127,7 +127,7 @@ def calculate_qualities(task): """ try: # gather the results of all the calculated_quality values for this sas_id - d = {'poor': 0, 'moderate': 0, 'good': 0} + qualities = {'poor': 0, 'moderate': 0, 'good': 0} for task in Task.objects.filter(sas_id=unsaved_task.sas_id): @@ -140,16 +140,16 @@ def calculate_qualities(task): try: key = t.calculated_qualities['per_task'] - d[key] = d[key] + 1 + qualities[key] = qualities[key] + 1 except: # ignore the tasks that have no calculated quality (they are probably not 'stored'). pass - total = d['poor'] + d['moderate'] + d['good'] + total = qualities['poor'] + qualities['moderate'] + qualities['good'] if total > 0: - percentage_poor = (d['poor'] / total) * 100 - percentage_good = (d['good'] / total) * 100 + percentage_poor = (qualities['poor'] / total) * 100 + percentage_good = (qualities['good'] / total) * 100 quality_sasid = "moderate" if percentage_poor >= quality_thresholds['overall_poor']: diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py index 1f01fd7813059931082ff569b6edc7416e1e33a0..a14a1d8f6d9fed77acf2393bad3158c04c1bdc29 100644 --- a/atdb/taskdatabase/services/algorithms.py +++ b/atdb/taskdatabase/services/algorithms.py @@ -3,10 +3,10 @@ Author: Nico Vermaas - Astron Description: Business logic for ATDB. These functions are called from the views (views.py). """ -import os +import json import requests import base64 -from datetime import datetime, timedelta +from datetime import datetime from django.db.models import Q, Sum import logging from .common import timeit @@ -801,11 +801,13 @@ def construct_summary(task): results = "" total_size_input = 0 total_size_output = 0 + qualities = {'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 @@ -853,8 +855,9 @@ def construct_summary(task): # add calculated quality (if present) calculated_qualities = task.calculated_qualities if calculated_qualities: - line += '<tr><td><b>Calculated Quality</b></td>' task_quality = calculated_qualities['per_task'] + + line += '<tr><td><b>Calculated Quality</b></td>' line += '<td class="' + task_quality + '">' + str(task_quality) + '</td>' line += '</tr>' @@ -881,12 +884,19 @@ def construct_summary(task): except: pass + try: + key = task.calculated_qualities['per_task'] + qualities[key] = qualities[key] + 1 + except: + # ignore the tasks that have no calculated quality (they are probably not 'stored'). + pass + results += line except: pass - totals += '<th>Totals</th><th></th><th></th>' + totals += '<th>Totals</th><th></th><th width="35%"></th>' try: totals += '<tr><td colspan="2"><b>Input size</b></td><td>' + str(total_size_input) + '</td></tr>' totals += '<tr><td colspan="2"><b>Output size</b><td>' + str(total_size_output) + '</td></tr>' @@ -898,6 +908,24 @@ def construct_summary(task): sasid_quality = calculated_qualities['per_sasid'] totals += '<tr><td colspan="2"><b>Calculated Quality</b></td>' totals += '<td class="' + sasid_quality + '">' + str(sasid_quality) + '</td></tr>' + + totals += '<tr><td colspan="2"><b>Quality Statistics</b></td><td>' + str(qualities) + '</td></tr>' + + try: + quality_thresholds = json.loads(Configuration.objects.get(key='quality_thresholds').value) + + totals += '<tr>' + totals += '<td><b>RFI thresholds</b></td>' + totals += '<td>Per Task</td><td>M, rfi >'+ str(quality_thresholds['poor']) + '% = P, rfi <=' + str(quality_thresholds['moderate']) + '% = G</td>' + totals += '</tr>' + + totals += '<tr>' + totals += '<td></td>' + totals += '<td>Per SAS_ID</td><td>M, >'+ str(quality_thresholds['overall_poor']) + '% P = P, >' + str(quality_thresholds['overall_good']) + '% G = G</td>' + totals += '</tr>' + + except: + pass except: pass diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index b496c34575ecb7ee9db76270aaeaac99747afc55..d31782c70ac7c315c404e0c565e12c25494152c4 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 21 June 2023 + <p class="footer"> Version 23 June 2023 </div> {% include 'taskdatabase/refresh.html' %} diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 04f5d9acb607bee9795f8113a32e3f4ed11e9bb2..fc87edc123cb2fbd94ed14526b8fbc591664c565 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -1082,7 +1082,8 @@ def TaskValidateSasId(request, pk, quality, new_status, page=0): sas_id = task.sas_id tasks = Task.objects.filter(sas_id=sas_id) for task in tasks: - if task.status == 'stored': + + if task.status == 'stored' or task.status == 'validated ': if quality == 'calculated': try: