|
@@ -55,21 +55,21 @@ class ResourcePingFilter(admin.SimpleListFilter):
|
|
|
|
|
|
def lookups(self, request, model_admin):
|
|
|
return (
|
|
|
- (1, 'Répond au ping'),
|
|
|
- (0, 'Pas de ping >1j'),
|
|
|
- (-1, 'Inconnu'),
|
|
|
+ ('up', 'Up'),
|
|
|
+ ('down', 'Down'),
|
|
|
+ ('unknown', '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)
|
|
|
+ known_filter = models.Q(last_time_up__isnull=False, last_check__isnull=False)
|
|
|
+ if self.value() == 'unknown':
|
|
|
+ return queryset.exclude(known_filter)
|
|
|
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)
|
|
|
+ queryset = queryset.filter(known_filter)
|
|
|
+ if self.value() == 'up':
|
|
|
+ return queryset.filter(last_check__lte=models.F('last_time_up'))
|
|
|
+ if self.value() == 'down':
|
|
|
+ return queryset.filter(last_check__gt=models.F('last_time_up'))
|
|
|
|
|
|
|
|
|
class ActiveServiceFilter(admin.SimpleListFilter):
|
|
@@ -274,7 +274,7 @@ class IPPrefixAdmin(admin.ModelAdmin):
|
|
|
|
|
|
|
|
|
class IPResourceAdmin(admin.ModelAdmin):
|
|
|
- list_display = ('__str__', 'available_display', 'last_use', 'last_time_up_display',)
|
|
|
+ list_display = ('__str__', 'available_display', 'last_use', 'ping',)
|
|
|
list_filter = (
|
|
|
'category',
|
|
|
ResourceInUseFilter,
|
|
@@ -303,6 +303,14 @@ class IPResourceAdmin(admin.ModelAdmin):
|
|
|
models.When(category=0, then=models.Max('service_allocation__end')),
|
|
|
models.When(category=1, then=models.Max('antenna_allocation__end')),
|
|
|
))
|
|
|
+ qs = qs.annotate(downtime=Cast(
|
|
|
+ models.Case(
|
|
|
+ models.When(last_check__isnull=False, last_time_up__isnull=False, last_check__lte=models.F('last_time_up'), then=timedelta(days=0)),
|
|
|
+ models.When(last_check__isnull=False, last_time_up__isnull=False, then=models.F('last_check') - models.F('last_time_up')),
|
|
|
+ default=None,
|
|
|
+ ),
|
|
|
+ models.DurationField(),
|
|
|
+ ))
|
|
|
return qs
|
|
|
|
|
|
def available_display(self, obj):
|
|
@@ -315,10 +323,15 @@ class IPResourceAdmin(admin.ModelAdmin):
|
|
|
last_use.short_description = 'Dernière utilisation'
|
|
|
last_use.admin_order_field = 'last_use'
|
|
|
|
|
|
- def last_time_up_display(self, obj):
|
|
|
- return naturaltime(obj.last_time_up)
|
|
|
- last_time_up_display.short_description = 'Dernier Ping'
|
|
|
- last_time_up_display.admin_order_field = 'last_time_up'
|
|
|
+ def ping(self, obj):
|
|
|
+ if obj.downtime:
|
|
|
+ return 'down depuis >' + str(obj.downtime)
|
|
|
+ elif obj.downtime == timedelta(days=0):
|
|
|
+ return 'UP'
|
|
|
+ else:
|
|
|
+ return None
|
|
|
+ ping.short_description = 'ping'
|
|
|
+ ping.admin_order_field = 'downtime'
|
|
|
|
|
|
def get_actions(self, request):
|
|
|
actions = super().get_actions(request)
|