Store service directly in Hit
This commit is contained in:
parent
f2e875d03d
commit
874aad87a8
38
shynet/analytics/migrations/0006_hit_service.py
Normal file
38
shynet/analytics/migrations/0006_hit_service.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Generated by Django 3.1.7 on 2021-03-28 19:36
|
||||||
|
|
||||||
|
from ..models import Hit, Session
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db.models import Subquery, OuterRef
|
||||||
|
|
||||||
|
def add_service_to_hits(_a, _b):
|
||||||
|
service = Session.objects.filter(
|
||||||
|
pk=OuterRef('session')
|
||||||
|
).values_list(
|
||||||
|
'service'
|
||||||
|
)[:1]
|
||||||
|
|
||||||
|
Hit.objects.update(
|
||||||
|
service=Subquery(service)
|
||||||
|
)
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0008_auto_20200628_1403'),
|
||||||
|
('analytics', '0005_auto_20210328_1518'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='hit',
|
||||||
|
name='service',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.service'),
|
||||||
|
),
|
||||||
|
migrations.RunPython(add_service_to_hits, lambda: ()),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='hit',
|
||||||
|
name='service',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.service'),
|
||||||
|
),
|
||||||
|
]
|
17
shynet/analytics/migrations/0007_auto_20210328_1634.py
Normal file
17
shynet/analytics/migrations/0007_auto_20210328_1634.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 3.1.7 on 2021-03-28 20:34
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('analytics', '0006_hit_service'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddIndex(
|
||||||
|
model_name='hit',
|
||||||
|
index=models.Index(fields=['service', '-start_time'], name='analytics_h_service_f4f41e_idx'),
|
||||||
|
),
|
||||||
|
]
|
@ -94,10 +94,15 @@ class Hit(models.Model):
|
|||||||
referrer = models.TextField(blank=True, db_index=True)
|
referrer = models.TextField(blank=True, db_index=True)
|
||||||
load_time = models.FloatField(null=True, db_index=True)
|
load_time = models.FloatField(null=True, db_index=True)
|
||||||
|
|
||||||
|
# While not necessary, we store the root service directly for performance.
|
||||||
|
# It makes querying much easier; no need for inner joins.
|
||||||
|
service = models.ForeignKey(Service, on_delete=models.CASCADE, db_index=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ["-start_time"]
|
ordering = ["-start_time"]
|
||||||
indexes = [
|
indexes = [
|
||||||
models.Index(fields=["session", "-start_time"]),
|
models.Index(fields=["session", "-start_time"]),
|
||||||
|
models.Index(fields=["service", "-start_time"]),
|
||||||
models.Index(fields=["session", "location"]),
|
models.Index(fields=["session", "location"]),
|
||||||
models.Index(fields=["session", "referrer"]),
|
models.Index(fields=["session", "referrer"]),
|
||||||
]
|
]
|
||||||
@ -109,5 +114,5 @@ class Hit(models.Model):
|
|||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse(
|
return reverse(
|
||||||
"dashboard:service_session",
|
"dashboard:service_session",
|
||||||
kwargs={"pk": self.session.service.pk, "session_pk": self.session.pk},
|
kwargs={"pk": self.service.pk, "session_pk": self.session.pk},
|
||||||
)
|
)
|
||||||
|
@ -184,6 +184,7 @@ def ingress_request(
|
|||||||
load_time=payload.get("loadTime"),
|
load_time=payload.get("loadTime"),
|
||||||
start_time=time,
|
start_time=time,
|
||||||
last_seen=time,
|
last_seen=time,
|
||||||
|
service=service
|
||||||
)
|
)
|
||||||
# Set idempotency (if applicable)
|
# Set idempotency (if applicable)
|
||||||
if idempotency is not None:
|
if idempotency is not None:
|
||||||
|
@ -129,7 +129,7 @@ class Service(models.Model):
|
|||||||
session_count = sessions.count()
|
session_count = sessions.count()
|
||||||
|
|
||||||
hits = Hit.objects.filter(
|
hits = Hit.objects.filter(
|
||||||
session__service=self, start_time__lt=end_time, start_time__gt=start_time
|
service=self, start_time__lt=end_time, start_time__gt=start_time
|
||||||
)
|
)
|
||||||
hit_count = hits.count()
|
hit_count = hits.count()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user