|
@@ -58,21 +58,21 @@ class ResourcePingFilter(admin.SimpleListFilter):
|
|
|
|
|
|
def lookups(self, request, model_admin):
|
|
|
return (
|
|
|
- ('up', 'Up'),
|
|
|
- ('down', 'Down'),
|
|
|
- ('unknown', 'Inconnu'),
|
|
|
+ ('up', 'UP'),
|
|
|
+ ('down', 'DOWN'),
|
|
|
+ ('down-since', 'DOWN depuis…'),
|
|
|
+ ('never-up', 'Jamais vu UP'),
|
|
|
)
|
|
|
|
|
|
def queryset(self, request, queryset):
|
|
|
- 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.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'))
|
|
|
+ if self.value() == 'up':
|
|
|
+ return queryset.filter(up=True)
|
|
|
+ if self.value() == 'down':
|
|
|
+ return queryset.filter(models.Q(up__isnull=True) | models.Q(up=False))
|
|
|
+ if self.value() == 'down-since':
|
|
|
+ return queryset.filter(up=False)
|
|
|
+ if self.value() == 'never-up':
|
|
|
+ return queryset.filter(up__isnull=True)
|
|
|
|
|
|
|
|
|
class ActiveServiceFilter(admin.SimpleListFilter):
|
|
@@ -416,14 +416,13 @@ class IPResourceAdmin(admin.ModelAdmin):
|
|
|
models.When(category=1, then=models.Max('antenna_allocation__end')),
|
|
|
default=None,
|
|
|
))
|
|
|
- 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(),
|
|
|
+ qs = qs.annotate(up=models.Case(
|
|
|
+ models.When(last_check__isnull=False, last_time_up__isnull=False, last_time_up=models.F('last_check'), then=True),
|
|
|
+ models.When(last_check__isnull=False, last_time_up__isnull=False, then=False),
|
|
|
+ default=None,
|
|
|
+ output_field=models.NullBooleanField(),
|
|
|
))
|
|
|
+ qs = qs.annotate(downtime=models.F('last_check') - models.F('last_time_up'))
|
|
|
return qs
|
|
|
|
|
|
def available_display(self, obj):
|
|
@@ -440,12 +439,12 @@ class IPResourceAdmin(admin.ModelAdmin):
|
|
|
last_use.admin_order_field = 'last_use'
|
|
|
|
|
|
def ping(self, obj):
|
|
|
- if obj.downtime:
|
|
|
- label = 'down depuis >' + str(obj.downtime)
|
|
|
- elif obj.downtime == timedelta(days=0):
|
|
|
+ if obj.up:
|
|
|
label = 'UP'
|
|
|
+ elif obj.downtime:
|
|
|
+ label = 'dernier ping : ' + naturaltime(timezone.now() - obj.downtime)
|
|
|
else:
|
|
|
- return None
|
|
|
+ label = 'DOWN'
|
|
|
if obj.checkmk_url:
|
|
|
return format_html('<a href="{}">{}</a>', obj.checkmk_url, label)
|
|
|
else:
|