From 36ccddd1b1dfac76ee8dd7b69a916d713de0349e Mon Sep 17 00:00:00 2001
From: Mattia Mancini <mancini@astron.nl>
Date: Wed, 17 Oct 2018 17:01:29 +0000
Subject: [PATCH] OSB-28: speed up latest observation controller and removed
 unuseful filtering of the data

---
 .../monitoringdb/views/controllers.py          | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py b/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py
index 772eda36357..08008cc6689 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py
@@ -331,7 +331,7 @@ class ControllerLatestObservations(APIView):
             return Response(status=status.HTTP_406_NOT_ACCEPTABLE,
                             data='Please specify both the start and the end date: %s' % (e,))
 
-        rtsm_observation_entities = RTSMObservation.objects.order_by('-start_datetime').filter(
+        rtsm_observation_entities = RTSMObservation.objects.filter(
             start_datetime__gte=self.from_date)
         for group in self.station_group:
             if group is not 'A':
@@ -342,7 +342,7 @@ class ControllerLatestObservations(APIView):
         for rtsm_observation_entity in rtsm_observation_entities.values('observation_id',
                                                                         'start_datetime',
                                                                         'end_datetime'). \
-                distinct():
+                distinct().order_by('-observation_id'):
             observation_payload = OrderedDict()
 
             observation_payload['observation_id'] = rtsm_observation_entity['observation_id']
@@ -351,18 +351,16 @@ class ControllerLatestObservations(APIView):
 
             rtsm_list = RTSMObservation.objects.filter(
                 start_datetime__gte=self.from_date,
-                observation_id=rtsm_observation_entity['observation_id']). \
-                order_by('-start_datetime')
+                observation_id=rtsm_observation_entity['observation_id'])
             unique_modes = [item['errors__mode'] for item in rtsm_list.values('errors__mode').distinct()]
 
             observation_payload['mode'] = unique_modes
             observation_payload['total_component_errors'] = 0
 
-            station_list = rtsm_list.values('station').distinct()
+
             station_involved_list = list()
 
-            for station in station_list:
-                rtsm_entry_per_station = rtsm_list.filter(station__pk=station['station']).first()
+            for rtsm_entry_per_station in rtsm_list.order_by('station__name'):
 
                 station_summary = OrderedDict()
                 station_summary['station_name'] = rtsm_entry_per_station.station.name
@@ -376,9 +374,6 @@ class ControllerLatestObservations(APIView):
 
                 observation_payload['total_component_errors'] += station_summary['n_errors']
 
-            station_involved_list = sorted(station_involved_list,
-                                           key=lambda rtsm_per_station: rtsm_per_station['n_errors'],
-                                           reverse=True)
             observation_payload['station_involved'] = station_involved_list
 
             response_payload.append(observation_payload)
@@ -388,8 +383,7 @@ class ControllerLatestObservations(APIView):
                 lambda station_entry:
                 len(station_entry['total_component_errors']) > 0,
                 response_payload)
-        response_payload = sorted(response_payload, key=lambda item: item['total_component_errors'],
-                                  reverse=True)
+
         return Response(status=status.HTTP_200_OK, data=response_payload)
 
 
-- 
GitLab