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

OSB-28: Removed the RTSMObservationSummary model and modified the...

OSB-28: Removed the RTSMObservationSummary model and modified the RTSMObservation to include a summary of the RTSM
parent 8bb3aee1
No related branches found
No related tags found
2 merge requests!89Monitoring maintenance Epic branch merge,!1Resolve OSB-13 "Monitoringmaintenance "
......@@ -19,19 +19,6 @@ class RTSMObservation(models.Model):
samples = models.IntegerField(default=None, null=True)
class RTSMObservationSummary(RTSMObservation):
@property
def errors_found(self):
return RTSMError.objects.defer('spectra'). \
filter(observation=self).values('error_type', 'mode', 'rcu'). \
annotate(count=models.Count('error_type', unique=True, output_field=models.FloatField())). \
annotate(percentage=models.ExpressionWrapper(models.F('count') * 100. / models.F('observation__samples'),
output_field=models.FloatField()))
class Meta:
proxy = True
class RTSMError(models.Model):
observation = models.ForeignKey(RTSMObservation, related_name='errors', on_delete=models.CASCADE)
......@@ -58,7 +45,18 @@ class RTSMError(models.Model):
self.error_type,)
class RTSMErrorSummary(models.Model):
observation = models.ForeignKey(RTSMObservation, related_name='errors_summary', on_delete=models.CASCADE)
percentage = models.FloatField(default=None, null=True)
rcu = models.SmallIntegerField(default=None, null=True)
mode = models.SmallIntegerField(default=None, null=True)
count = models.IntegerField(default=None, null=True)
error_type = models.CharField(max_length=50)
start_frequency = models.FloatField(default=None, null=True)
stop_frequency = models.FloatField(default=None, null=True)
class RTSMSpectrum(models.Model):
bad_spectrum = ArrayField(models.FloatField())
average_spectrum = ArrayField(models.FloatField())
rtsm_error = models.ForeignKey(RTSMError, related_name='spectra', on_delete=models.CASCADE)
\ No newline at end of file
rtsm_error = models.ForeignKey(RTSMError, related_name='spectra', on_delete=models.CASCADE)
......@@ -9,13 +9,6 @@ from .station import Station
logger = logging.getLogger('serializers')
class RTSMErrorsAggregateSerializer(serializers.Serializer):
count = serializers.IntegerField()
percentage = serializers.FloatField()
error_type = serializers.CharField()
rcu = serializers.IntegerField()
class RTSMSpectrumSerializer(serializers.ModelSerializer):
bad_spectrum = serializers.ListField(child=serializers.FloatField())
average_spectrum = serializers.ListField(child=serializers.FloatField())
......@@ -26,8 +19,8 @@ class RTSMSpectrumSerializer(serializers.ModelSerializer):
class RTSMErrorSerializer(serializers.ModelSerializer):
observation = serializers.PrimaryKeyRelatedField(read_only=True)
def __init__(self, *args, **kwargs):
self.Meta.depth = kwargs.pop('depth', 1)
super(RTSMErrorSerializer, self).__init__(*args, **kwargs)
......@@ -37,27 +30,37 @@ class RTSMErrorSerializer(serializers.ModelSerializer):
fields = '__all__'
class RTSMObservationSummarySerializer(serializers.ModelSerializer):
errors_found = RTSMErrorsAggregateSerializer(many=True)
class RTSMErrorSummarySerializer(serializers.ModelSerializer):
observation = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
model = RTSMObservationSummary
model = RTSMErrorSummary
fields = '__all__'
depth=1
class RTSMObservationSerializer(serializers.ModelSerializer):
errors = RTSMErrorSerializer(many=True, depth=0)
errors_summary = RTSMErrorSummarySerializer(many=True)
class Meta:
model = RTSMObservation
fields = '__all__'
def compute_summary(self, RTSMObservation_entry):
summary_entries = RTSMObservation_entry.errors.defer('spectra'). \
filter(observation=RTSMObservation_entry).values('error_type', 'mode', 'rcu', 'start_frequency',
'stop_frequency'). \
annotate(count=models.Count('error_type', unique=True, output_field=models.FloatField())). \
annotate(percentage=models.ExpressionWrapper(models.F('count') * 100. / models.F('observation__samples'),
output_field=models.FloatField()))
for summary_entry in summary_entries:
RTSMErrorSummary(observation=RTSMObservation_entry, **summary_entry).save()
@atomic
def create(self, validated_data):
rtsm_errors = validated_data.pop('errors')
# derive the station type from the station name
# derive the station type from the station name
station_name = validated_data.pop('station_name')
station_type = station_name[0].capitalize()
station_type = station_type if station_type in ['C', 'R'] else 'I'
......@@ -85,16 +88,15 @@ class RTSMObservationSerializer(serializers.ModelSerializer):
average_spectrum = rtsm_error.pop('average_spectrum')
bad_spectrum = rtsm_error.pop('bad_spectrum')
rtsm_error_instance = RTSMError.objects.create(**rtsm_error)
rtsm_error_instance.save()
ActionLogSerializer.log_model_insert(rtsm_error_instance)
rtsm_spectrum_instance = RTSMSpectrum.objects.create(average_spectrum=average_spectrum,
bad_spectrum=bad_spectrum,
rtsm_error=rtsm_error_instance)
bad_spectrum=bad_spectrum,
rtsm_error=rtsm_error_instance)
rtsm_spectrum_instance.save()
ActionLogSerializer.log_model_insert(rtsm_spectrum_instance)
self.compute_summary(RTSMObservation_instance)
return RTSMObservation_instance
from .common import *
from ..models.rtsm import RTSMObservation, RTSMError, RTSMSpectrum, RTSMObservationSummary
from ..serializers.rtsm import RTSMObservationSerializer, RTSMErrorSerializer,\
RTSMObservationSummarySerializer, RTSMSpectrumSerializer
from ..models.rtsm import RTSMObservation, RTSMError, RTSMSpectrum
from ..serializers.rtsm import RTSMObservationSerializer, RTSMErrorSerializer, \
RTSMSpectrumSerializer
from ..rtsm_test_raw_parser import parse_rtsm_test
logger = logging.getLogger('views')
......@@ -12,12 +12,6 @@ class RTSMSpectrumViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = RTSMSpectrumSerializer
filter_fields = ['rtsm_error']
class RTSMErrorsDetailedViewSet(viewsets.ReadOnlyModelViewSet):
queryset = RTSMError.objects.all()
serializer_class = RTSMErrorSerializer
filter_fields = '__all__'
class RTSMErrorsViewSet(viewsets.ReadOnlyModelViewSet):
queryset = RTSMError.objects.all()
......@@ -25,19 +19,12 @@ class RTSMErrorsViewSet(viewsets.ReadOnlyModelViewSet):
filter_fields = '__all__'
class RTSMObservationViewSet(viewsets.ReadOnlyModelViewSet):
queryset = RTSMObservation.objects.all()
serializer_class = RTSMObservationSerializer
filter_fields = '__all__'
class RTSMObservationSummaryViewSet(viewsets.ReadOnlyModelViewSet):
queryset = RTSMObservationSummary.objects.all()
serializer_class = RTSMObservationSummarySerializer
filter_fields = '__all__'
@api_view(['POST'])
def insert_raw_rtsm_test(request):
"""
......@@ -61,8 +48,8 @@ def insert_raw_rtsm_test(request):
entry.update(station_name=station_name)
logger.info('RTSM parsed successfully for obsid %d and station %s',
entry['observation_id'],
entry['station_name'])
entry['observation_id'],
entry['station_name'])
try:
rtsm_item = RTSMObservationSerializer().create(dict(entry))
......@@ -84,7 +71,7 @@ def insert_raw_rtsm_test(request):
return Response(exception=True,
data="the post message is not correct." +
" It has to be of the form {content:[RAWSTRING], station_name:[STATION_NAME]}: %s. Request provided %s" % (
e, request),
e, request),
status=status.HTTP_400_BAD_REQUEST)
else:
return Response(exception=True,
......
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