From 011b4fa5ca3a93b4e7878bf1a696b994a3252314 Mon Sep 17 00:00:00 2001 From: Mario Raciti <mario.raciti@inaf.it> Date: Tue, 4 May 2021 16:29:23 +0200 Subject: [PATCH] TMSS-610: Refactoring; add get_cycles_report util API --- .../src/tmss/tmssapp/adapters/reports.py | 51 ++++++++----------- SAS/TMSS/backend/src/tmss/tmssapp/views.py | 17 +++++++ .../tmss/tmssapp/viewsets/specification.py | 10 +--- SAS/TMSS/backend/src/tmss/urls.py | 1 + 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py index 6b817132347..b6cb8916cc7 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py @@ -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 diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/views.py b/SAS/TMSS/backend/src/tmss/tmssapp/views.py index 85bdfe0de03..59b4c16e99c 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/views.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/views.py @@ -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) diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py index 4e7123acfe1..8d268b2053c 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py @@ -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) diff --git a/SAS/TMSS/backend/src/tmss/urls.py b/SAS/TMSS/backend/src/tmss/urls.py index 5306787cb40..b19efbc46ac 100644 --- a/SAS/TMSS/backend/src/tmss/urls.py +++ b/SAS/TMSS/backend/src/tmss/urls.py @@ -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): -- GitLab