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

TMSS-610: Refactoring; add get_cycles_report util API

parent 88e18c21
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,67 +6,58 @@ from rest_framework.request import Request
from datetime import timedelta
def create_cycle_report(request: Request, current_cycle: models.Cycle, other_cycles: [models.Cycle]) -> {}:
def create_cycle_report(request: Request, cycle: 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(),
}})
result = {'cycle': cycle.pk,
'telescope_time_distribution': _get_telescope_time_distribution(cycle),
'average_efficiency': _get_average_efficiency(cycle),
'completion_level': _get_completion_level(cycle),
'observation_hours_per_category': _get_observation_hours_per_category(cycle),
'weekly_efficiency': _get_weekly_efficiency(cycle),
'data_ingested_per_site_and_category': _get_data_ingested_per_site_and_category(cycle),
'projects_summary': _get_projects_summary(cycle),
'usage_mode': _get_usage_mode(cycle),
'failures': _get_failures(cycle),
}
return result
def _get_average_efficiency():
def _get_telescope_time_distribution(cycle: models.Cycle):
return 0
def _get_completion_level():
def _get_average_efficiency(cycle: models.Cycle):
return 0
def _get_telescope_time_distribution():
def _get_completion_level(cycle: models.Cycle):
return 0
def _get_observation_hours_per_category():
def _get_observation_hours_per_category(cycle: models.Cycle):
return 0
def _get_weekly_efficiency():
def _get_weekly_efficiency(cycle: models.Cycle):
return 0
def _get_data_ingested_per_site_and_category():
def _get_data_ingested_per_site_and_category(cycle: models.Cycle):
return 0
def _get_projects_summary():
def _get_projects_summary(cycle: models.Cycle):
return 0
def _get_usage_mode():
def _get_usage_mode(cycle: models.Cycle):
return 0
def _get_failures():
def _get_failures(cycle: models.Cycle):
return 0
......
......@@ -6,6 +6,7 @@ from lofar.sas.tmss.tmss.tmssapp import models
from lofar.common.json_utils import get_default_json_object_for_schema
from lofar.common.datetimeutils import formatDatetime
from lofar.sas.tmss.tmss.tmssapp.adapters.parset import convert_to_parset
from lofar.sas.tmss.tmss.tmssapp.adapters.reports import create_cycle_report
from drf_yasg.utils import swagger_auto_schema
from drf_yasg.openapi import Parameter
from rest_framework.authtoken.models import Token
......@@ -278,3 +279,19 @@ def get_target_rise_and_set(request):
rise_set_dict = coordinates_timestamps_and_stations_to_target_rise_and_set(angle1=angle1, angle2=angle2, direction_type=direction_type, angle_to_horizon=horizon, timestamps=timestamps, stations=stations)
return JsonResponse(rise_set_dict)
# TODO: Add other responses and change parameter to array.
@swagger_auto_schema(method='GET', responses={200: 'A JSON object with cycles information for reporting.'},
manual_parameters=[Parameter(name='cycles', required=True, type='string', in_='query',
description="Cycles' primary keys.")])
@api_view(['GET'])
def get_cycles_report(request):
cycles = [get_object_or_404(models.Cycle, pk='Cycle 00'), get_object_or_404(models.Cycle, pk='Cycle 01'),
get_object_or_404(models.Cycle, pk='Cycle 02')]#request.GET.get('cycles')
results = {}
for c in cycles: # TODO: Cycles will be a list of pks
# c = get_object_or_404(models.Cycle, pk=c_pk)
info = create_cycle_report(request, c)
results[c.pk] = info
return JsonResponse(results)
......@@ -322,15 +322,9 @@ class CycleViewSet(LOFARViewSet):
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.
def report(self, request, pk=None):
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)
result = create_cycle_report(request, cycle)
return Response(result, status=status.HTTP_200_OK)
......
......@@ -75,6 +75,7 @@ urlpatterns = [
re_path('util/lst/?', views.lst, name="conversion-lst"),
re_path('util/angular_separation/?', views.get_angular_separation, name='get_angular_separation'),
re_path('util/target_rise_and_set/?', views.get_target_rise_and_set, name='get_target_rise_and_set'),
re_path('util/cycles_report/?', views.get_cycles_report, name='get_cycles_report'),
]
if os.environ.get('SHOW_DJANGO_DEBUG_TOOLBAR', False):
......
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