Skip to content
Snippets Groups Projects
Commit f535eea2 authored by Mattia Mancini's avatar Mattia Mancini
Browse files

Story SW-300: improving performances of rtsm error retrieval

parent 16db6d29
No related branches found
No related tags found
2 merge requests!89Monitoring maintenance Epic branch merge,!1Resolve OSB-13 "Monitoringmaintenance "
......@@ -19,10 +19,26 @@ class RTSMObservation(models.Model):
samples = models.IntegerField(default=None, null=True)
class RTSMErrorSummary(models.Model):
rcu = models.SmallIntegerField(default=None, null=True)
mode = models.SmallIntegerField(default=None, null=True)
observation = models.ForeignKey(RTSMObservation, related_name='errors_summary', on_delete=models.CASCADE)
error_type = models.CharField(max_length=10)
start_frequency = models.FloatField(default=None, null=True)
stop_frequency = models.FloatField(default=None, null=True)
time = models.DateTimeField()
class Meta:
managed = False
db_table = 'monitoringdb_rtsmerror'
class RTSMError(models.Model):
rcu = models.SmallIntegerField(default=None, null=True)
mode = models.SmallIntegerField(default=None, null=True)
observation = models.ForeignKey(RTSMObservation, related_name='errors', on_delete=models.CASCADE)
error_type = models.CharField(max_length=10)
start_frequency = models.FloatField(default=None, null=True)
stop_frequency = models.FloatField(default=None, null=True)
......@@ -30,3 +46,20 @@ class RTSMError(models.Model):
bad_spectrum = ArrayField(models.FloatField())
average_spectrum = ArrayField(models.FloatField())
def __str__(self):
return self.__unicode__()
def __repr__(self):
return self.__unicode__()
def __unicode__(self):
return '%s - MODE %d, FROM %f MHz TO %f MHz RCU=(%d): %s' % (self.time,
self.mode,
self.start_frequency,
self.stop_frequency,
self.rcu,
self.error_type,)
class Meta:
managed = True
db_table = 'monitoringdb_rtsmerror'
......@@ -19,14 +19,18 @@ class RTSMErrorSerializer(serializers.ModelSerializer):
class RTSMErrorSummarySerializer(serializers.ModelSerializer):
samples = serializers.IntegerField(source='observation.samples', read_only=True)
start_time = serializers.DateTimeField(source='observation.start_time', read_only=True)
end_time = serializers.DateTimeField(source='observation.start_time', read_only=True)
observation_id = serializers.IntegerField(source='observation.observation_id', read_only=True)
id = serializers.IntegerField()
class Meta:
model = RTSMError
exclude = ['average_spectrum', 'bad_spectrum']
model = RTSMErrorSummary
fields = '__all__'
class RTSMObservationSerializer(serializers.ModelSerializer):
errors = RTSMErrorSummarySerializer(many=True)
errors_summary = RTSMErrorSummarySerializer(many=True)
class Meta:
model = RTSMObservation
......
......@@ -12,8 +12,8 @@ station_test_router.register(r'^', StationTestViewSet)
rtsm_router = routers.DefaultRouter()
#RTSM
rtsm_router.register(r'^errors_detailed', RTSMErrorsDetailedViewSet)
rtsm_router.register(r'^errors', RTSMErrorsViewSet)
rtsm_router.register(r'^/errors_detailed', RTSMErrorsDetailedViewSet)
rtsm_router.register(r'^/errors', RTSMErrorsViewSet)
rtsm_router.register(r'^', RTSMObservationViewSet)
......
......@@ -5,6 +5,7 @@ from ..rtsm_test_raw_parser import parse_rtsm_test
logger = logging.getLogger('views')
class RTSMErrorsDetailedViewSet(viewsets.ModelViewSet):
queryset = RTSMError.objects.all()
serializer_class = RTSMErrorSerializer
......@@ -23,7 +24,7 @@ class RTSMErrorsViewSet(viewsets.ModelViewSet):
serializer_class = RTSMErrorSummarySerializer
def get_queryset(self):
queryset = RTSMError.objects.all()
queryset = RTSMError.objects.defer('average_spectrum', 'bad_spectrum').all()
for key, param in self.request.query_params.items():
if key in RESERVED_FILTER_NAME:
continue
......@@ -31,9 +32,8 @@ class RTSMErrorsViewSet(viewsets.ModelViewSet):
return queryset
class RTSMObservationViewSet(viewsets.ModelViewSet):
queryset = RTSMObservation.objects.all()
queryset = RTSMObservation.objects.select_related('errors').defer('errors__average_spectrum', 'errors__bad_spectrum').all()
serializer_class = RTSMObservationSerializer
def get_queryset(self):
......
......@@ -56,7 +56,7 @@ def perform_query(query_string, address, next_url=None):
response = requests.get(full_address)
logging.info('response acknowledged: status code is %s', response.status_code)
if response.status_code == 200:
parsed_content = json.loads(response.content)
parsed_content = response.json()
extracted_content = parsed_content['results']
next_url = parsed_content['next']
......@@ -324,7 +324,7 @@ def print_out_rtsm_summary(rtsm_results):
'component_id', 'error_type', 'start_frequency', 'stop_frequency',
'mode', 'percentage']
sorted_rtsm = rtsm_sort_errors(rtsm_result['errors'])
sorted_rtsm = rtsm_sort_errors(rtsm_result['errors_summary'])
rtsm_errors = Counter()
for error in sorted_rtsm:
rcu_id = error['rcu']
......@@ -364,7 +364,7 @@ def print_out_rtsm(rtsm_results):
for rtsm_result in rtsm_results:
obs_id = rtsm_result['observation_id']
station_name = rtsm_result['station_name']
for error in rtsm_sort_errors(rtsm_result['errors']):
for error in rtsm_sort_errors(rtsm_result['errors_summary']):
rcu_id = error['rcu']
start_frequency = error['start_frequency']
stop_frequency = error['stop_frequency']
......
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