Skip to content
Snippets Groups Projects
Commit 4f325fd9 authored by Mario Raciti's avatar Mario Raciti
Browse files

TMSS-610: Add telescope_time_distribution for cycles without yet any assigned category

parent 3334c12c
No related branches found
No related tags found
3 merge requests!634WIP: COBALT commissioning delta,!492Resolve TMSS-610,!481Draft: SW-971 SW-973 SW-975: Various fixes to build LOFAR correctly.
...@@ -32,12 +32,13 @@ def _get_telescope_time_distribution(cycle: models.Cycle): ...@@ -32,12 +32,13 @@ def _get_telescope_time_distribution(cycle: models.Cycle):
""" """
result = {} result = {}
# Consider FILLER as a category # Consider UNASSIGNED and FILLER as categories for the purposes of reporting
categories = ['FILLER',] + [c for c in models.ProjectCategory.Choices] categories = ['UNASSIGNED', 'FILLER',] + [c for c in models.ProjectCategory.Choices]
for c in categories: for c in categories:
total, succeeded, failed = 0, 0, 0 total, succeeded, failed = 0, 0, 0
projects = models.Project.objects.filter(cycles=cycle, project_category=c.value) if c != 'FILLER' \ projects = models.Project.objects.filter(cycles=cycle, project_category=c.value) if (c != 'UNASSIGNED' and c != 'FILLER') \
else models.Project.objects.filter(cycles=cycle, filler=True) else models.Project.objects.filter(cycles=cycle, filler=True) if c == 'FILLER' \
else models.Project.objects.filter(cycles=cycle, project_category__isnull=True)
for p in projects: for p in projects:
# Get durations for single project and aggregate to get the totals # Get durations for single project and aggregate to get the totals
_, durations = _get_subs_and_durations_from_project(p) _, durations = _get_subs_and_durations_from_project(p)
...@@ -45,14 +46,16 @@ def _get_telescope_time_distribution(cycle: models.Cycle): ...@@ -45,14 +46,16 @@ def _get_telescope_time_distribution(cycle: models.Cycle):
succeeded += durations['total_succeeded'] succeeded += durations['total_succeeded']
failed += durations['total_failed'] failed += durations['total_failed']
idle = total - succeeded - failed idle = total - succeeded - failed
result[c.name if c != 'FILLER' else 'FILLER'] = {'durations': {'total': total, 'succeeded': succeeded, result[c if c == 'UNASSIGNED' or c == 'FILLER' else c.name] = {'durations': {'total': total, 'succeeded': succeeded,
'failed': failed, 'idle': idle}} 'failed': failed, 'idle': idle}}
return result return result
def _get_average_efficiency(cycle: models.Cycle): def _get_average_efficiency(cycle: models.Cycle):
return 0 result = {'efficiency': '65%'} # TODO: Default efficiency is 65%. Change it properly when it will be implemented.
return result
def _get_completion_level(cycle: models.Cycle): def _get_completion_level(cycle: models.Cycle):
...@@ -72,7 +75,7 @@ def _get_observation_hours_per_category(cycle: models.Cycle): ...@@ -72,7 +75,7 @@ def _get_observation_hours_per_category(cycle: models.Cycle):
subs = models.SchedulingUnitBlueprint.objects.filter(draft__scheduling_set__project__cycles=cycle.pk).filter(priority_queue=prio.value) subs = models.SchedulingUnitBlueprint.objects.filter(draft__scheduling_set__project__cycles=cycle.pk).filter(priority_queue=prio.value)
for sub in subs: for sub in subs:
result['total_duration_idle'] += sub.duration.total_seconds() result['total_duration_idle'] += sub.duration.total_seconds()
if sub.status == 'finished': if sub.status == 'finished': # TODO: Use QA workflow flag instead of the finished status
result[f'total_duration_{prio.name}'] += sub.duration.total_seconds() result[f'total_duration_{prio.name}'] += sub.duration.total_seconds()
if sub.status == 'cancelled': if sub.status == 'cancelled':
result['total_duration_failed'] += sub.duration.total_seconds() result['total_duration_failed'] += sub.duration.total_seconds()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment