diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py index d491a5ecc8e18c1e4d4d0114269b885741eb602d..d9d211e730cadb2ca947b2fcc93fff50ac3691cc 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py @@ -326,33 +326,40 @@ def _get_subs_and_durations_from_project(project_pk: int) -> ({}, {}): """ from lofar.sas.tmss.tmss.workflowapp.models.schedulingunitflow import SchedulingUnitProcess - durations = {'total': 0, 'total_not_cancelled': 0, 'total_observed': 0, 'total_observed_succeeded': 0, - 'total_observed_failed': 0} + durations = {'total': 0, 'total_not_cancelled': 0, 'total_succeeded': 0, 'total_failed': 0, + 'total_observed': 0, 'total_observed_succeeded': 0, 'total_observed_failed': 0} # Get SUBs related to the project project_subs = models.SchedulingUnitBlueprint.objects.filter(draft__scheduling_set__project__pk=project_pk) subs_succeeded, subs_failed = [], [] for prio in models.PriorityQueueType.Choices: - durations[f'total_observed_succeeded_{prio.name}'] = 0 + durations[f'total_succeeded_{prio.name}'], durations[f'total_observed_succeeded_{prio.name}'] = 0, 0 subs = project_subs.filter(priority_queue=prio.value) for sub in subs: - # TODO: Does it make any sense to consider generic successful and failed? - durations['total'] += sub.duration.total_seconds() + sub_duration = sub.duration.total_seconds() + sub_observed_duration = sub.observed_duration.total_seconds() if sub.observed_duration else 0 + + durations['total'] += sub_duration # Total if sub.status != 'cancelled': # Not cancelled SUBs - durations['total_not_cancelled'] += sub.duration.total_seconds() - # Observations - if sub.observed_duration: - durations['total_observed'] += sub.observed_duration.total_seconds() - sup = SchedulingUnitProcess.objects.filter(su=sub).first() - if sup and sup.results_accepted: # Succeeded SUBs - durations[f'total_observed_succeeded_{prio.name}'] += sub.observed_duration.total_seconds() - subs_succeeded.append({'id': sub.pk, 'name': sub.name, 'duration': sub.duration.total_seconds(), - 'observed_duration': sub.observed_duration.total_seconds()}) - elif sup and sup.results_accepted is False: # Failed SUBs - durations['total_observed_failed'] += sub.observed_duration.total_seconds() - subs_failed.append({'id': sub.pk, 'name': sub.name, 'duration': sub.duration.total_seconds(), - 'observed_duration': sub.observed_duration.total_seconds()}) + durations['total_not_cancelled'] += sub_duration + + durations['total_observed'] += sub_observed_duration # Total observed + sup = SchedulingUnitProcess.objects.filter(su=sub).first() + # Succeeded SUBs + if sup and sup.results_accepted: + durations[f'total_succeeded_{prio.name}'] += sub_duration + durations[f'total_observed_succeeded_{prio.name}'] += sub_observed_duration + subs_succeeded.append({'id': sub.pk, 'name': sub.name, 'duration': sub_duration, + 'observed_duration': sub_observed_duration}) + # Failed SUBs + elif sup and sup.results_accepted is False: + durations['total_failed'] += sub_duration + durations['total_observed_failed'] += sub_observed_duration + subs_failed.append({'id': sub.pk, 'name': sub.name, 'duration': sub_duration, + 'observed_duration': sub_observed_duration}) + # Gather prios durations as well + durations['total_succeeded'] += durations[f'total_succeeded_{prio.name}'] durations['total_observed_succeeded'] += durations[f'total_observed_succeeded_{prio.name}'] subs = {'successful': subs_succeeded, 'failed': subs_failed}