From 408597ecaa3860e3362bb55d1e90e93340be5faf Mon Sep 17 00:00:00 2001 From: Mario Raciti <mario.raciti@inaf.it> Date: Tue, 20 Jul 2021 11:09:56 +0200 Subject: [PATCH] TMSS-770: Fix get_subs_and_durations_from_project duration gathering logic --- .../src/tmss/tmssapp/adapters/reports.py | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py index d491a5ecc8e..d9d211e730c 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} -- GitLab