|
|
- 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',)
- }
-
- search_fields = ["name", "user__email"]
- list_display = ("id", "name", "created", "code", "status", "email",
- "last_ping")
- list_select_related = ("user", )
- list_filter = ("status", OwnershipListFilter, "last_ping")
- actions = ["send_alert"]
-
-
- 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):
- search_fields = ("owner__name", "owner__code", "owner__user__email")
- list_select_related = ("owner", )
- list_display = ("id", "created", "check_name", "email", "scheme", "method",
- "ua")
- list_filter = ("created", "scheme", "method")
-
- 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):
- search_fields = ["value", "user__email"]
- list_select_related = ("user", )
- list_display = ("id", "code", "email", "formatted_kind", "value",
- "num_notifications")
-
- def email(self, obj):
- return obj.user.email if obj.user else None
-
- 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 <i>(unverified)</i>"
- else:
- raise NotImplementedError("Bad channel kind: %s" % obj.kind)
-
- formatted_kind.short_description = "Kind"
- formatted_kind.allow_tags = True
-
- def num_notifications(self, obj):
- return Notification.objects.filter(channel=obj).count()
-
- num_notifications.short_description = "# Notifications"
-
-
- @admin.register(Notification)
- class NotificationsAdmin(admin.ModelAdmin):
- search_fields = ["owner__name", "owner__code", "channel__value"]
- list_select_related = ("owner", "channel")
- list_display = ("id", "created", "check_status", "check_name",
- "channel_kind", "channel_value", "status")
- list_filter = ("created", "check_status", "channel__kind")
-
- 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
|