Add logging to API endpoints

This commit is contained in:
Lars van Rhijn
2023-11-24 22:35:16 +01:00
parent 66ac1076d3
commit 8da9672fc1
18 changed files with 398 additions and 107 deletions

View File

@ -1,3 +1,4 @@
from django.contrib.auth import get_user_model
from django.db import models
from django.db.models import Q
from django.conf import settings
@ -6,6 +7,8 @@ from django.utils import timezone
from queues.exceptions import RequestException
from songs.models import Song
User = get_user_model()
class Playlist(models.Model):
def __str__(self):
@ -143,10 +146,41 @@ class Queue(models.Model):
playlist_song.save()
song_count += 1
def log_action(self, user: User, action: str, description: str) -> "QueueLogEntry":
"""
Log a queue action.
:param user: The user performing the action.
:param action: An identifier of the action performed.
:param description: An optional description for the action.
:return: The created QueueLogEntry object.
"""
return QueueLogEntry.objects.create(
queue=self,
user=user,
action=action,
description=description,
)
def __str__(self):
return str(self.name)
class UserQueue(models.Model):
"""
UserQueue model.
This model connects a user to its queue.
"""
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="queue")
queue = models.ForeignKey(Queue, on_delete=models.SET_NULL, null=True, blank=True, related_name="users")
def __str__(self):
"""Convert this object to string."""
return "Queue for user {}".format(self.user)
class QueueCommand(models.Model):
queue = models.ForeignKey(
Queue,
@ -157,3 +191,20 @@ class QueueCommand(models.Model):
def __str__(self):
return str(self.command)
class QueueLogEntry(models.Model):
"""Model for logging queue events."""
queue = models.ForeignKey(Queue, on_delete=models.CASCADE, related_name="logs")
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
action = models.CharField(max_length=255)
timestamp = models.DateTimeField(auto_now_add=True)
description = models.CharField(max_length=255)
def __str__(self):
return f"{self.queue} {self.action} by {self.user} at {self.timestamp}"
class Meta:
verbose_name = "player log entry"
verbose_name_plural = "player log entries"