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

TMSS-610: Add skeleton for cycle reporting

parent df1202fb
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.
......@@ -6,6 +6,70 @@ from rest_framework.request import Request
from datetime import timedelta
def create_cycle_report(request: Request, current_cycle: models.Cycle, other_cycles: [models.Cycle]) -> {}:
"""
Create a cycle report as a JSON object.
"""
current_cycle_pk = current_cycle.pk
other_cycles_pk = [c.pk for c in other_cycles] if other_cycles else []
result = {'current_cycle': current_cycle_pk}
# TODO: Manage default cases. See TMSS-610.
# Add properties
result['cycles'] = []
for c in sorted(other_cycles_pk + [current_cycle_pk, ]):
result['cycles'].append({c: {'telescope_time_distribution': _get_telescope_time_distribution(),
'average_efficiency': _get_average_efficiency(),
'completion_level': _get_completion_level(),
'observation_hours_per_category': _get_observation_hours_per_category(),
'weekly_efficiency': _get_weekly_efficiency(),
'data_ingested_per_site_and_category': _get_data_ingested_per_site_and_category(),
'projects_summary': _get_projects_summary(),
'usage_mode': _get_usage_mode(),
'failures': _get_failures(),
}})
return result
def _get_average_efficiency():
return 0
def _get_completion_level():
return 0
def _get_telescope_time_distribution():
return 0
def _get_observation_hours_per_category():
return 0
def _get_weekly_efficiency():
return 0
def _get_data_ingested_per_site_and_category():
return 0
def _get_projects_summary():
return 0
def _get_usage_mode():
return 0
def _get_failures():
return 0
def create_project_report(request: Request, project: models.Project) -> {}:
"""
Create a project report as a JSON object.
......
......@@ -23,7 +23,7 @@ from drf_yasg.openapi import Parameter
from lofar.sas.tmss.tmss.tmssapp.viewsets.lofar_viewset import LOFARViewSet, LOFARNestedViewSet, AbstractTemplateViewSet, LOFARCopyViewSet, LOFARFilterBackend
from lofar.sas.tmss.tmss.tmssapp import models
from lofar.sas.tmss.tmss.tmssapp import serializers
from lofar.sas.tmss.tmss.tmssapp.adapters.reports import create_project_report
from lofar.sas.tmss.tmss.tmssapp.adapters.reports import create_cycle_report, create_project_report
from django.http import JsonResponse
from datetime import datetime
......@@ -318,6 +318,21 @@ class CycleViewSet(LOFARViewSet):
serializer_class = serializers.CycleSerializer
ordering = ['start']
@swagger_auto_schema(responses={200: 'The Report information',
403: 'forbidden'},
operation_description="Get Report information for the cycle.")
@action(methods=['get'], detail=True, url_name="report", name="Get Report")
def report(self, request, pk=None, other_cycles=None):
# TODO: Maybe would it be better to implement this method outside of the viewset?
# Let's assume the cycle istance is the current cycle for the moment.
cycle = get_object_or_404(models.Cycle, pk=pk)
cycles = []
if other_cycles is not None:
for c in other_cycles:
cycles.append(get_object_or_404(models.Cycle, pk=c.pk))
result = create_cycle_report(request, cycle, cycles)
return Response(result, status=status.HTTP_200_OK)
class CycleQuotaViewSet(LOFARViewSet):
queryset = models.CycleQuota.objects.all()
......
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