This commit is contained in:
Joel Falknau 2024-12-28 12:40:27 +10:00
parent f92d339a5d
commit 12efafc90d
No known key found for this signature in database
6 changed files with 37 additions and 23 deletions

View File

@ -1,15 +1,16 @@
from django.contrib import admin
from .models import AnalyticsIdentifier, AnalyticsTokens
from solo.admin import SingletonModelAdmin
@admin.register(AnalyticsIdentifier)
class AnalyticsIdentifierAdmin(admin.ModelAdmin):
class AnalyticsIdentifierAdmin(SingletonModelAdmin):
search_fields = ['identifier', ]
list_display = ('identifier',)
list_display = ['identifier', ]
@admin.register(AnalyticsTokens)
class AnalyticsTokensAdmin(admin.ModelAdmin):
search_fields = ['name', ]
list_display = ('name', 'type',)
list_display = ['name', 'type', ]

View File

@ -0,0 +1,17 @@
# Generated by Django 4.2.16 on 2024-12-11 02:17
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('analytics', '0009_remove_analyticstokens_ignore_paths_and_more'),
]
operations = [
migrations.AlterModelOptions(
name='analyticsidentifier',
options={'verbose_name': 'Analytics Identifier'},
),
]

View File

@ -1,23 +1,19 @@
from typing import Literal
from django.db import models
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
from solo.models import SingletonModel
from uuid import uuid4
class AnalyticsIdentifier(models.Model):
class AnalyticsIdentifier(SingletonModel):
identifier = models.UUIDField(
default=uuid4,
editable=False)
identifier = models.UUIDField(default=uuid4, editable=False)
def save(self, *args, **kwargs):
if not self.pk and AnalyticsIdentifier.objects.exists():
# Force a single object
raise ValidationError('There is can be only one \
AnalyticsIdentifier instance')
self.pk = self.id = 1 # If this happens to be deleted and recreated, force it to be 1
return super().save(*args, **kwargs)
def __str__(self) -> Literal['Analytics Identifier']:
return "Analytics Identifier"
class Meta:
verbose_name = "Analytics Identifier"
class AnalyticsTokens(models.Model):

View File

@ -68,8 +68,8 @@ def analytics_event(namespace: str,
value=value).apply_async(priority=9)
@shared_task()
def analytics_daily_stats():
@shared_task
def analytics_daily_stats() -> None:
"""Celery Task: Do not call directly
Gathers a series of daily statistics
@ -106,7 +106,6 @@ def analytics_daily_stats():
label='addons',
value=addons,
event_type='Stats')
for appconfig in apps.get_app_configs():
if appconfig.label in [
"django_celery_beat",
@ -142,7 +141,7 @@ def analytics_daily_stats():
event_type='Stats')
@shared_task()
@shared_task
def send_ga_tracking_celery_event(
measurement_id: str,
secret: str,
@ -172,7 +171,7 @@ def send_ga_tracking_celery_event(
}
payload = {
'client_id': AnalyticsIdentifier.objects.get(id=1).identifier.hex,
'client_id': AnalyticsIdentifier.get_solo().identifier.hex,
"user_properties": {
"allianceauth_version": {
"value": __version__

View File

@ -14,10 +14,10 @@ uuid_2 = "7aa6bd70701f44729af5e3095ff4b55c"
class TestAnalyticsIdentifier(TestCase):
def test_identifier_random(self):
self.assertNotEqual(AnalyticsIdentifier.objects.get(), uuid4)
self.assertNotEqual(AnalyticsIdentifier.get_solo(), uuid4)
def test_identifier_singular(self):
AnalyticsIdentifier.objects.all().delete()
AnalyticsIdentifier.get_solo().delete()
AnalyticsIdentifier.objects.create(identifier=uuid_1)
# Yeah i have multiple asserts here, they all do the same thing
with self.assertRaises(ValidationError):

View File

@ -1,3 +1,4 @@
import os
from django.apps import apps
from allianceauth.authentication.models import User
from esi.models import Token