1
0
Fork 0

Fixes long loading times on satellite page by adding is_decoded boolean field with index on DemodData.

merge-requests/216/head
Jacek Chmielewski 2018-03-05 16:57:36 +01:00
parent 3c49c470bf
commit d224e549a5
3 changed files with 29 additions and 4 deletions

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.10 on 2018-03-04 08:50
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0001_squashed_0009_auto_20180103_1931'),
]
operations = [
migrations.AddField(
model_name='demoddata',
name='is_decoded',
field=models.BooleanField(db_index=True, default=False),
),
]

View File

@ -8,7 +8,7 @@ from django.conf import settings
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from django.db.models.signals import post_save
from django.db.models.signals import post_save, pre_save
from django.utils.timezone import now
from db.base.helpers import gridsquare
@ -37,6 +37,10 @@ def _gen_observer(sender, instance, created, **kwargs):
post_save.connect(_gen_observer, sender=DemodData)
def _set_is_decoded(sender, instance, **kwargs):
instance.is_decoded = instance.payload_decoded != ''
class TransmitterApprovedManager(models.Manager):
def get_queryset(self):
return super(TransmitterApprovedManager, self).get_queryset().filter(approved=True)
@ -179,6 +183,7 @@ class DemodData(models.Model):
default=0)
lng = models.FloatField(validators=[MaxValueValidator(180), MinValueValidator(-180)],
default=0)
is_decoded = models.BooleanField(default=False, db_index=True)
timestamp = models.DateTimeField(null=True)
class Meta:
@ -199,3 +204,4 @@ class DemodData(models.Model):
post_save.connect(_gen_observer, sender=DemodData)
pre_save.connect(_set_is_decoded, sender=DemodData)

View File

@ -88,9 +88,8 @@ def satellite(request, norad):
satellite = get_object_or_404(satellite_query, norad_cat_id=norad)
suggestions = Suggestion.objects.filter(satellite=satellite)
modes = Mode.objects.all()
telemetry_data_empty = DemodData.objects.filter(satellite__norad_cat_id=norad,
payload_decoded__exact='').count()
telemetry_data_count = satellite.payload_frames_count - telemetry_data_empty
telemetry_data_count = DemodData.objects.filter(satellite__norad_cat_id=norad,
is_decoded=True).count()
try:
latest_frame = DemodData.objects.get(satellite=satellite,