2023-09-02 16:54:53 +08:00
|
|
|
from django.contrib import admin, messages
|
2023-09-02 19:22:40 +08:00
|
|
|
from django.db.models import F
|
2023-09-02 16:54:53 +08:00
|
|
|
from django.urls import reverse
|
|
|
|
from django.utils.html import format_html
|
|
|
|
from django.utils.translation import ngettext
|
2023-07-25 14:29:17 +08:00
|
|
|
|
2023-08-09 00:59:17 +08:00
|
|
|
from .models import Platform, Archive, Ticket
|
2023-09-07 12:07:18 +08:00
|
|
|
from .utils.helpers import sizify
|
2023-07-27 10:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
class PlatformAdmin(admin.ModelAdmin):
|
2023-09-02 16:54:53 +08:00
|
|
|
list_display = ('id', 'name', 'pretty_name')
|
|
|
|
search_fields = ('name',)
|
2023-07-27 10:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
class TicketAdmin(admin.ModelAdmin):
|
2023-09-02 16:54:53 +08:00
|
|
|
list_display = (
|
|
|
|
'id',
|
|
|
|
'number',
|
|
|
|
'token',
|
|
|
|
'platform',
|
|
|
|
'user',
|
|
|
|
'time_create',
|
|
|
|
'time_update',
|
|
|
|
'resolved',
|
|
|
|
)
|
|
|
|
search_fields = ('number',)
|
|
|
|
list_filter = ('platform', 'resolved', 'time_create',)
|
|
|
|
actions = ['make_resolved', 'make_unresolved']
|
|
|
|
|
|
|
|
@admin.action(description='Mark selected ticket(s) as resolved')
|
|
|
|
def make_resolved(self, request, queryset):
|
|
|
|
updated = queryset.update(resolved=True)
|
|
|
|
self.message_user(
|
|
|
|
request,
|
|
|
|
ngettext(
|
|
|
|
f'{updated} ticket was successfully marked as resolved.',
|
|
|
|
f'{updated} tickets were successfully marked as resolved.',
|
|
|
|
number=updated,
|
|
|
|
),
|
|
|
|
messages.SUCCESS,
|
|
|
|
)
|
|
|
|
|
|
|
|
@admin.action(description='Mark selected ticket(s) as unresolved')
|
|
|
|
def make_unresolved(self, request, queryset):
|
|
|
|
updated = queryset.update(resolved=False)
|
|
|
|
self.message_user(
|
|
|
|
request,
|
|
|
|
ngettext(
|
|
|
|
f'{updated} ticket was successfully marked as unresolved.',
|
|
|
|
f'{updated} tickets were successfully marked as unresolved.',
|
|
|
|
number=updated,
|
|
|
|
),
|
|
|
|
messages.SUCCESS,
|
|
|
|
)
|
2023-07-27 10:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
class ArchiveAdmin(admin.ModelAdmin):
|
2023-09-02 16:54:53 +08:00
|
|
|
list_display = (
|
|
|
|
'id',
|
|
|
|
'file_link',
|
|
|
|
'file_size',
|
|
|
|
'md5',
|
|
|
|
'ticket',
|
|
|
|
'time_create'
|
|
|
|
)
|
|
|
|
search_fields = ('ticket',)
|
|
|
|
list_filter = ('time_create', 'ticket')
|
2023-07-27 10:26:27 +08:00
|
|
|
|
2023-09-02 19:22:40 +08:00
|
|
|
def get_queryset(self, request):
|
|
|
|
qs = super(ArchiveAdmin, self).get_queryset(request)
|
|
|
|
qs = qs.annotate(file_size=F('size'))
|
|
|
|
return qs
|
|
|
|
|
2023-09-02 16:54:53 +08:00
|
|
|
def file_size(self, obj):
|
2023-09-02 19:22:40 +08:00
|
|
|
return sizify(obj.size)
|
2023-07-27 10:26:27 +08:00
|
|
|
|
2023-09-02 16:54:53 +08:00
|
|
|
def file_link(self, obj):
|
|
|
|
if obj.file:
|
|
|
|
file_name = obj.file.name.rpartition('/')[-1]
|
|
|
|
file_path = reverse(
|
|
|
|
'collector:download',
|
2023-09-02 19:22:40 +08:00
|
|
|
kwargs={'path': obj.file}
|
2023-09-02 16:54:53 +08:00
|
|
|
)
|
|
|
|
return format_html(
|
|
|
|
'<a href="{file_path}">{file_name}</a>',
|
|
|
|
file_path=file_path,
|
|
|
|
file_name=file_name
|
|
|
|
)
|
|
|
|
else:
|
|
|
|
return "No attachment"
|
|
|
|
|
|
|
|
file_link.allow_tags = True
|
|
|
|
file_link.short_description = 'File Download'
|
2023-09-02 19:22:40 +08:00
|
|
|
file_size.admin_order_field = 'file_size'
|
2023-08-08 19:27:45 +08:00
|
|
|
|
|
|
|
|
2023-07-27 10:26:27 +08:00
|
|
|
admin.site.register(Platform, PlatformAdmin)
|
|
|
|
admin.site.register(Ticket, TicketAdmin)
|
|
|
|
admin.site.register(Archive, ArchiveAdmin)
|
2023-09-02 16:54:53 +08:00
|
|
|
|
|
|
|
admin.site.site_title = 'Logs Collector'
|
|
|
|
admin.site.site_header = 'LOGS COLLECTOR'
|