From 9ba517109d8342b40731c513a710951a09a70fd2 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 3 Sep 2020 14:40:19 +0200 Subject: [PATCH] Allow to inspect logs by device --- .../pretixcontrol/organizers/device_logs.html | 55 +++++++++++++++++++ .../pretixcontrol/organizers/devices.html | 5 ++ src/pretix/control/urls.py | 2 + src/pretix/control/views/organizer.py | 27 ++++++++- 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/pretix/control/templates/pretixcontrol/organizers/device_logs.html diff --git a/src/pretix/control/templates/pretixcontrol/organizers/device_logs.html b/src/pretix/control/templates/pretixcontrol/organizers/device_logs.html new file mode 100644 index 000000000..322dd1fb0 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/device_logs.html @@ -0,0 +1,55 @@ +{% extends "pretixcontrol/items/base.html" %} +{% load i18n %} +{% load static %} +{% block title %}{% trans "Device logs" %}{% endblock %} +{% block inside %} +

{% trans "Device logs" %}

+

+ {{ device }} +

+ + {% include "pretixcontrol/pagination.html" %} +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/devices.html b/src/pretix/control/templates/pretixcontrol/organizers/devices.html index 64f65965d..672dce7bd 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/devices.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/devices.html @@ -92,6 +92,11 @@ class="btn btn-default btn-sm"> {% trans "Revoke access" %} {% endif %} + + + {% trans "Logs" %} + diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py index 617ce0df4..4304e16dd 100644 --- a/src/pretix/control/urls.py +++ b/src/pretix/control/urls.py @@ -97,6 +97,8 @@ urlpatterns = [ name='organizer.device.connect'), url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/revoke$', organizer.DeviceRevokeView.as_view(), name='organizer.device.revoke'), + url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/logs$', organizer.DeviceLogView.as_view(), + name='organizer.device.logs'), url(r'^organizer/(?P[^/]+)/teams$', organizer.TeamListView.as_view(), name='organizer.teams'), url(r'^organizer/(?P[^/]+)/team/add$', organizer.TeamCreateView.as_view(), name='organizer.team.add'), url(r'^organizer/(?P[^/]+)/team/(?P[^/]+)/$', organizer.TeamMemberView.as_view(), diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index babfd8156..bfc1ed0a6 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -27,7 +27,7 @@ from pretix.api.models import WebHook from pretix.base.auth import get_auth_backends from pretix.base.models import ( CachedFile, Device, GiftCard, OrderPayment, Organizer, Team, TeamInvite, - User, + User, LogEntry, ) from pretix.base.models.event import Event, EventMetaProperty, EventMetaValue from pretix.base.models.giftcards import gen_giftcard_secret @@ -731,6 +731,31 @@ class DeviceCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi return super().form_invalid(form) +class DeviceLogView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + template_name = 'pretixcontrol/organizers/device_logs.html' + permission = 'can_change_organizer_settings' + model = LogEntry + context_object_name = 'logs' + paginate_by = 20 + + @cached_property + def device(self): + return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['device'] = self.device + return ctx + + def get_queryset(self): + qs = LogEntry.objects.filter( + device_id=self.device + ).select_related( + 'user', 'content_type', 'api_token', 'oauth_application', 'device', 'event' + ).order_by('-datetime') + return qs + + class DeviceUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): model = Device template_name = 'pretixcontrol/organizers/device_edit.html'