healthchecks/hc/api/admin.py

93 lines
2.5 KiB
Python

from django.contrib import admin
from hc.api.models import Channel, Check, Notification, Ping
class OwnershipListFilter(admin.SimpleListFilter):
title = "Ownership"
parameter_name = 'ownership'
def lookups(self, request, model_admin):
return (
('assigned', "Assigned"),
)
def queryset(self, request, queryset):
if self.value() == 'assigned':
return queryset.filter(user__isnull=False)
return queryset
@admin.register(Check)
class ChecksAdmin(admin.ModelAdmin):
class Media:
css = {
'all': ('css/admin/checks.css',)
}
list_display = ("id", "name", "created", "code", "status", "email",
"last_ping")
list_select_related = ("user", )
actions = ["send_alert"]
list_filter = ("status", OwnershipListFilter)
def email(self, obj):
return obj.user.email if obj.user else None
def send_alert(self, request, qs):
for check in qs:
check.send_alert()
self.message_user(request, "%d alert(s) sent" % qs.count())
send_alert.short_description = "Send Alert"
@admin.register(Ping)
class PingsAdmin(admin.ModelAdmin):
list_select_related = ("owner", )
list_display = ("id", "created", "check_name", "email", "scheme", "method",
"ua")
def check_name(self, obj):
return obj.owner.name if obj.owner.name else obj.owner.code
def email(self, obj):
return obj.owner.user.email if obj.owner.user else None
@admin.register(Channel)
class ChannelsAdmin(admin.ModelAdmin):
list_select_related = ("user", )
list_display = ("id", "code", "user", "formatted_kind", "value")
def formatted_kind(self, obj):
if obj.kind == "pd":
return "PagerDuty"
elif obj.kind == "webhook":
return "Webhook"
elif obj.kind == "email" and obj.email_verified:
return "Email"
elif obj.kind == "email" and not obj.email_verified:
return "Email (unverified)"
else:
raise NotImplementedError("Bad channel kind: %s" % obj.kind)
@admin.register(Notification)
class NotificationsAdmin(admin.ModelAdmin):
list_select_related = ("owner", "channel")
list_display = ("id", "created", "check_status", "check_name",
"channel_kind", "channel_value", "status")
def check_name(self, obj):
return obj.owner.name_then_code()
def channel_kind(self, obj):
return obj.channel.kind
def channel_value(self, obj):
return obj.channel.value