From caa72f81ce8b30ca3ea551ecd41e2bf577ce3208 Mon Sep 17 00:00:00 2001
From: Mattia Mancini <mancini@astron.nl>
Date: Fri, 7 Dec 2018 09:23:45 +0000
Subject: [PATCH] OSB-36: Make the errors unique

---
 .../monitoringdb/views/controllers.py         | 41 ++++++++-----------
 1 file changed, 17 insertions(+), 24 deletions(-)

diff --git a/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py b/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py
index 65f5eb839e7..ce5a8713348 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/views/controllers.py
@@ -953,10 +953,10 @@ class ControllerStationComponentElementErrors(ValidableReadOnlyView):
                                        end_datetime__lt=self.to_date,
                                        station__name=self.station_name).\
             exclude(errors_summary__rcu__in=list(rcus_per_polarization.keys())).\
-            order_by('-start_datetime').values('pk',
-                                                'observation_id',
-                                                'start_datetime',
-                                                'end_datetime')
+            values('pk',
+                    'observation_id',
+                    'start_datetime',
+                    'end_datetime').distinct('pk')
         result = []
         for observation in good_observation_list:
             entry = dict(test_id=observation['observation_id'],
@@ -1020,29 +1020,27 @@ class ControllerStationComponentElementErrors(ValidableReadOnlyView):
                                                        component_errors=dict())
             rcu = item['rcu']
             polarization = rcus_per_polarization[rcu]
-            if polarization not in errors[observation_pk]:
-                errors[observation_pk]['component_errors'][polarization] = dict(
-                    rcu=rcu,
-                    errors = dict()
-                )
+
             error_type = item['error_type']
             percentage = item['percentage']
             count = item['count']
             mode = item['mode']
             samples = item['observation__samples']
 
+            if error_type not in errors[observation_pk]['component_errors']:
+                errors[observation_pk]['component_errors'][error_type] = dict()
+
             url_to_plot = reverse('rtsm-summary-plot-detail', (item['pk'],), request=self.request)
-            errors[observation_pk]['component_errors'][polarization]['errors'][error_type] = dict(samples=samples,
+            errors[observation_pk]['component_errors'][error_type][polarization] = dict(samples=samples,
                                                                               percentage=percentage,
                                                                               count=count,
                                                                               mode=mode,
+                                                                              rcu=rcu,
                                                                               url=url_to_plot)
         return list(errors.values())
 
     def compute_station_tests_error_list(self):
         errors = dict()
-        rcus_per_polarization = self.rcus_from_antenna_and_type(self.antenna_id,
-                                                                self.component_type)
         component_errors = ComponentError.objects.filter(
             station_test__start_datetime__gt=self.from_date,
             station_test__end_datetime__lt=self.to_date,
@@ -1058,20 +1056,15 @@ class ControllerStationComponentElementErrors(ValidableReadOnlyView):
                                                end_date=component_error.station_test.end_datetime,
                                                test_type='S',
                                                component_errors=dict())
-                for rcu_id, polarization in rcus_per_polarization.items():
-                    if polarization not in errors[station_test_pk]:
-                        errors[station_test_pk]['component_errors'][polarization] = dict(
-                            rcu=rcu_id,
-                            errors=dict())
-                    error_type = component_error.type
-                    details = component_error.details
-                    errors_per_error_polarization = errors[station_test_pk]['component_errors'][polarization]['errors']
-                    errors_per_error_polarization[error_type] = dict(details=details, element_errors=dict())
+            error_type = component_error.type
+            details = component_error.details
+            errors[station_test_pk]['component_errors'][error_type] = dict(details=details, element_errors = dict())
 
+            error_per_error_type = errors[station_test_pk]['component_errors'][error_type]
 
-                    for element in component_error.failing_elements.values('element__element_id', 'details'):
-                        element_id = element['element__element_id']
-                        errors_per_error_polarization[error_type]['element_errors'][element_id] = element['details']
+            for element in component_error.failing_elements.values('element__element_id', 'details'):
+                element_id = element['element__element_id']
+                error_per_error_type["element_errors"][element_id] = element['details']
 
         return list(errors.values())
 
-- 
GitLab