From bab9196c3884e17272d8593e1926086b476867c6 Mon Sep 17 00:00:00 2001 From: Robert Einsle Date: Sun, 11 Feb 2018 11:18:15 +0100 Subject: [PATCH 1/2] show alert-danger if client last_seen older then 5 minutes --- billard/admin.py | 4 ++-- billard/migrations/0026_client_last_seen.py | 17 +++++++++++++++++ billard/models.py | 1 + billard/templatetags/display_client.py | 5 ++++- 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 billard/migrations/0026_client_last_seen.py diff --git a/billard/admin.py b/billard/admin.py index f23d77c..b06774c 100644 --- a/billard/admin.py +++ b/billard/admin.py @@ -31,8 +31,8 @@ class LocationAdmin(admin.ModelAdmin): @admin.register(Client) class ClientAdmin(admin.ModelAdmin): - list_display = ('uuid', 'location', 'report_user') - fields = ['location', 'uuid', 'report_user'] + list_display = ('uuid', 'location', 'report_user', 'last_seen') + fields = ['location', 'uuid', 'report_user', 'last_seen'] @admin.register(LocationData) diff --git a/billard/migrations/0026_client_last_seen.py b/billard/migrations/0026_client_last_seen.py new file mode 100644 index 0000000..d716f52 --- /dev/null +++ b/billard/migrations/0026_client_last_seen.py @@ -0,0 +1,17 @@ +# Generated by Django 2.0.2 on 2018-02-11 11:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('billard', '0025_auto_20180211_1059'), + ] + + operations = [ + migrations.AddField( + model_name='client', + name='last_seen', + field=models.DateTimeField(blank=True, null=True, verbose_name='Letzter Update'), + ), + ] diff --git a/billard/models.py b/billard/models.py index 45e7378..5ce0cde 100644 --- a/billard/models.py +++ b/billard/models.py @@ -52,6 +52,7 @@ class Client(models.Model): location = models.ForeignKey(Location, related_name="clients", verbose_name="Standort", on_delete=models.CASCADE) report_user = models.ForeignKey(User, blank=True, null=True, verbose_name="Reporting Benutzer", related_name='reporting_clients', on_delete=models.DO_NOTHING) + last_seen = models.DateTimeField(blank=True, null=True, verbose_name="Letzter Update") def __str__(self): return '{}, {}'.format(self.location.name, self.uuid) diff --git a/billard/templatetags/display_client.py b/billard/templatetags/display_client.py index e1616d5..d15f81a 100644 --- a/billard/templatetags/display_client.py +++ b/billard/templatetags/display_client.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timedelta from django import template from django.utils.html import format_html @@ -34,6 +34,9 @@ def display_client(client, desk_no): prize = '{0:.2f}'.format(prize) if prize != a.prize: a.prize = prize + before5min = datetime.now() - timedelta(minutes=5) + if client.last_seen is not None and client.last_seen < before5min: + alert = 'alert-danger' html = '
\n' html += '
\n'.format(alert) html += '

({}) {}

\n'.format(desk_no, desk.name) From ae020102032a6cd5918759a4e77e5536f1742cf1 Mon Sep 17 00:00:00 2001 From: Robert Einsle Date: Sun, 11 Feb 2018 11:27:27 +0100 Subject: [PATCH 2/2] add last_seen serializer --- billard/serializers.py | 8 +++++++- billard/urls.py | 1 + billard/views.py | 7 ++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/billard/serializers.py b/billard/serializers.py index 92d287c..dd40344 100644 --- a/billard/serializers.py +++ b/billard/serializers.py @@ -1,9 +1,15 @@ from rest_framework import serializers -from billard.models import LocationData +from billard.models import LocationData, Client class LocationDataSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = LocationData fields = ('client_id', 'desk_no', 'tst', 'on_off',) + + +class ClientUpdateLastSeenSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Client + fields = ('uuid', 'last_seen') diff --git a/billard/urls.py b/billard/urls.py index f70f7fe..a28b8b8 100644 --- a/billard/urls.py +++ b/billard/urls.py @@ -7,6 +7,7 @@ from billard import views router = routers.DefaultRouter() router.register(r'locationdata', views.LocationDataViewSet) +router.register(r'last_seen', views.ClientUpdateLastSeenViewSet) app_name = 'billard' urlpatterns = [ diff --git a/billard/views.py b/billard/views.py index e12f4fa..2b737d9 100644 --- a/billard/views.py +++ b/billard/views.py @@ -11,7 +11,7 @@ from django.views import generic from rest_framework import viewsets from billard.models import LocationData, Location, Client, Accounting -from billard.serializers import LocationDataSerializer +from billard.serializers import LocationDataSerializer, ClientUpdateLastSeenSerializer from billard.tasks import process_location_data log = logging.getLogger(__name__) @@ -108,6 +108,11 @@ class LocationDataViewSet(viewsets.ModelViewSet): serializer_class = LocationDataSerializer +class ClientUpdateLastSeenViewSet(viewsets.ModelViewSet): + queryset = LocationData.objects.all() + serializer_class = ClientUpdateLastSeenSerializer + + def process_location_data(request): process_location_data() return HttpResponse('DONE')