From 1104b6b1de37b8331526ebe0582bdb9b20c3d117 Mon Sep 17 00:00:00 2001
From: Mario Raciti <mario.raciti@inaf.it>
Date: Mon, 7 Jun 2021 16:22:36 +0200
Subject: [PATCH] TMSS-610: Update data_ingested_per_site_and_type info

---
 .../src/tmss/tmssapp/adapters/reports.py      | 44 ++++++++++---------
 1 file changed, 24 insertions(+), 20 deletions(-)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
index 21e1e0aa483..3f0b97b4b32 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -156,26 +156,30 @@ def _get_data_ingested_per_site_and_type(request: Request, cycle: models.Cycle)
     """
     result = []
 
-    # Get DataProducts related to the cycle with an ArchiveInfo
-    archive_info = models.DataproductArchiveInfo.objects.filter(dataproduct__producer__subtask__task_blueprints__draft__scheduling_unit_draft__scheduling_set__project__cycles=cycle.pk)
-    dataproducts = [ai.dataproduct for ai in archive_info]
-    # Filter DataProducts from Subtasks of type 'observation'
-    dp_from_observations = dataproducts.filter(producer__subtask__specifications_template__type='observation')
-    # Filter DataProducts from Subtasks of type 'pipeline'
-    dp_from_pipelines = dataproducts.filter(producer__subtask__specifications_template__type='pipeline')
-
-    # TODO: Filter categories basing on DataType, TaskType, DataFormat.
-    # Filter DataProducts of type 'visibilities' and 'time series' from observations and pipelines
-    dp_visibilities = dp_from_observations.filter(datatype='visibilities') | dp_from_pipelines.filter(datatype='visibilities')
-    dp_time_series = dp_from_observations.filter(datatype='time series') | dp_from_pipelines.filter(datatype='time series')
-
-    # TODO: Group dataproducts also per site.
-    # Iterate over categories
-    # categories = ('', '', '', '')
-    # for dt in datatypes:
-    #     dataproducts_per_type = dataproducts.filter(datatype=dt.value)
-    #     dataproducts_per_type_data = [serializers.DataproductSerializer(dp, context={'request': request}).data for dp in dataproducts_per_type]
-    #     result.append({'type': dt.value, 'dataproducts': dataproducts_per_type_data})
+    # TODO: Currently there is no way to fitler per LTA site.
+    # # Get DataProducts related to the cycle with an ArchiveInfo
+    # archive_info = models.DataproductArchiveInfo.objects.filter(dataproduct__producer__subtask__task_blueprints__draft__scheduling_unit_draft__scheduling_set__project__cycles=cycle.pk)
+    # dataproducts = [ai.dataproduct for ai in archive_info]
+
+    # Get DataProducts related to the cycle 
+    dataproducts = models.Dataproduct.objects.filter(producer__subtask__task_blueprints__draft__scheduling_unit_draft__scheduling_set__project__cycles=cycle.pk)
+
+    # Combine and filter DataPrducts accordingly
+    dps_interferometric_obs = dataproducts.filter(producer__subtask__specifications_template__type='observation', dataformat='MeasurementSet', datatype='visibilities')
+    dps_interferometric_obs_data = [serializers.DataproductSerializer(dp, context={'request': request}).data for dp in dps_interferometric_obs]
+    result.append({'category': 'Interferometric Observation', 'dataproducts': dps_interferometric_obs_data})
+
+    dps_beamformed_obs = dataproducts.filter(producer__subtask__specifications_template__type='observation', dataformat='Beamformed', datatype='time series')
+    dps_beamformed_obs_data = [serializers.DataproductSerializer(dp, context={'request': request}).data for dp in dps_beamformed_obs]
+    result.append({'category': 'Beamformed Observation', 'dataproducts': dps_beamformed_obs_data})
+
+    dp_averaging_pip = dataproducts.filter(producer__subtask__specifications_template__type='pipeline', dataformat='MeasurementSet', datatype='visibilities')
+    dp_averaging_pip_data = [serializers.DataproductSerializer(dp, context={'request': request}).data for dp in dp_averaging_pip]
+    result.append({'category': 'Averaging Pipeline', 'dataproducts': dp_averaging_pip_data})
+
+    dp_pulsar_pip = dataproducts.filter(producer__subtask__specifications_template__type='pipeline', dataformat__in=['pulp summary', 'pulp analysis'], datatype__in=['visibilities', 'pulsar profile'])
+    dp_pulsar_pip_data = [serializers.DataproductSerializer(dp, context={'request': request}).data for dp in dp_pulsar_pip]
+    result.append({'category': 'Pulsar Pipeline', 'dataproducts': dp_pulsar_pip_data})
 
     return result
 
-- 
GitLab