Improve admin panel & display
This commit is contained in:
@@ -2,8 +2,25 @@ from django.contrib import admin
|
||||
|
||||
from .models import Hit, Session
|
||||
|
||||
admin.site.register(Session)
|
||||
class HitInline(admin.TabularInline):
|
||||
model = Hit
|
||||
fk_name = "session"
|
||||
extra = 0
|
||||
|
||||
admin.site.register(Hit)
|
||||
class SessionAdmin(admin.ModelAdmin):
|
||||
list_display = ("uuid", "service", "start_time", "identifier", "ip", "asn", "country")
|
||||
list_display_links = ("uuid",)
|
||||
search_fields = ("ip", "user_agent", "device", "device_type", "identifier", "asn", "time_zone")
|
||||
list_filter = ("device_type",)
|
||||
inlines = [HitInline]
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(Session, SessionAdmin)
|
||||
|
||||
|
||||
class HitAdmin(admin.ModelAdmin):
|
||||
list_display = ("session", "initial", "start_time", "heartbeats", "tracker", "load_time")
|
||||
list_display_links = ("session",)
|
||||
search_fields = ("initial", "tracker", "location", "referrer")
|
||||
list_filter = ("initial", "tracker")
|
||||
|
||||
admin.site.register(Hit, HitAdmin)
|
||||
|
||||
@@ -5,6 +5,7 @@ from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
from core.models import Service
|
||||
from django.shortcuts import reverse
|
||||
|
||||
|
||||
def _default_uuid():
|
||||
@@ -62,6 +63,15 @@ class Session(models.Model):
|
||||
def duration(self):
|
||||
return self.last_seen - self.start_time
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.identifier if self.identifier != '' else 'Anonymous'} @ {self.service.name} [{str(self.uuid)[:6]}]"
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse(
|
||||
"dashboard:service_session",
|
||||
kwargs={"pk": self.service.pk, "session_pk": self.uuid},
|
||||
)
|
||||
|
||||
|
||||
class Hit(models.Model):
|
||||
session = models.ForeignKey(Session, on_delete=models.CASCADE, db_index=True)
|
||||
@@ -71,7 +81,9 @@ class Hit(models.Model):
|
||||
start_time = models.DateTimeField(auto_now_add=True, db_index=True)
|
||||
last_seen = models.DateTimeField(auto_now_add=True)
|
||||
heartbeats = models.IntegerField(default=0)
|
||||
tracker = models.TextField() # Tracking pixel or JS
|
||||
tracker = models.TextField(
|
||||
choices=[("JS", "JavaScript"), ("PIXEL", "Pixel (noscript)")]
|
||||
) # Tracking pixel or JS
|
||||
|
||||
# Advanced page information
|
||||
location = models.TextField(blank=True, db_index=True)
|
||||
@@ -89,3 +101,9 @@ class Hit(models.Model):
|
||||
@property
|
||||
def duration(self):
|
||||
return self.last_seen - self.start_time
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse(
|
||||
"dashboard:service_session",
|
||||
kwargs={"pk": self.session.service.pk, "session_pk": self.session.pk},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user