Parcourir la source

filtre réponse au ping

Élie Bouttier il y a 7 ans
Parent
commit
0dafc4b5c0
1 fichiers modifiés avec 25 ajouts et 0 suppressions
  1. 25 0
      services/admin.py

+ 25 - 0
services/admin.py

@@ -20,6 +20,7 @@ from djgeojson.views import GeoJSONLayerView
 from urllib.parse import urlencode
 
 from functools import partial, update_wrapper
+from datetime import timedelta
 
 from djadhere.utils import get_active_filter
 from adhesions.models import Adhesion
@@ -48,6 +49,29 @@ class ResourceInUseFilter(admin.SimpleListFilter):
             return queryset.filter(available_filter)
 
 
+class ResourcePingFilter(admin.SimpleListFilter):
+    title = 'ping'
+    parameter_name = 'ping'
+
+    def lookups(self, request, model_admin):
+        return (
+            (1, 'Répond au ping'),
+            (0, 'Pas de ping >1j'),
+            (-1, 'Inconnu'),
+        )
+
+    def queryset(self, request, queryset):
+        answer_filter = Q(last_time_up__gte=timezone.now() - timedelta(days=1))
+        if self.value() == '-1':
+            return queryset.filter(last_time_up__isnull=True)
+        else:
+            queryset = queryset.exclude(last_time_up__isnull=True)
+            if self.value() == '0':
+                return queryset.exclude(answer_filter)
+            if self.value() == '1':
+                return queryset.filter(answer_filter)
+
+
 class ActiveServiceFilter(admin.SimpleListFilter):
     title = 'actif'
     parameter_name = 'active'
@@ -254,6 +278,7 @@ class IPResourceAdmin(admin.ModelAdmin):
     list_filter = (
         'category',
         ResourceInUseFilter,
+        ResourcePingFilter,
         'reserved',
         ('prefixes', admin.RelatedOnlyFieldListFilter),
         RouteFilter,