mirror of
https://github.com/MOIS3Y/logs-collector.git
synced 2025-02-01 01:10:52 +01:00
Modify: admin panel fields, filters and decorations
This commit is contained in:
parent
d314fe7e4e
commit
332764fca2
@ -1,25 +1,96 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin, messages
|
||||||
|
from django.urls import reverse
|
||||||
|
from django.utils.html import format_html
|
||||||
|
from django.utils.translation import ngettext
|
||||||
|
|
||||||
from .models import Platform, Archive, Ticket
|
from .models import Platform, Archive, Ticket
|
||||||
|
from .utils import sizify
|
||||||
|
|
||||||
|
|
||||||
# Register your models here.
|
|
||||||
class PlatformAdmin(admin.ModelAdmin):
|
class PlatformAdmin(admin.ModelAdmin):
|
||||||
pass
|
list_display = ('id', 'name', 'pretty_name')
|
||||||
|
search_fields = ('name',)
|
||||||
|
|
||||||
|
|
||||||
class TicketAdmin(admin.ModelAdmin):
|
class TicketAdmin(admin.ModelAdmin):
|
||||||
pass
|
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,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ArchiveAdmin(admin.ModelAdmin):
|
class ArchiveAdmin(admin.ModelAdmin):
|
||||||
pass
|
list_display = (
|
||||||
|
'id',
|
||||||
|
'file_link',
|
||||||
|
'file_size',
|
||||||
|
'md5',
|
||||||
|
'ticket',
|
||||||
|
'time_create'
|
||||||
|
)
|
||||||
|
search_fields = ('ticket',)
|
||||||
|
list_filter = ('time_create', 'ticket')
|
||||||
|
|
||||||
|
def file_size(self, obj):
|
||||||
|
return sizify(obj.file.size)
|
||||||
|
|
||||||
class TokenAdmin(admin.ModelAdmin):
|
def file_link(self, obj):
|
||||||
pass
|
if obj.file:
|
||||||
|
file_name = obj.file.name.rpartition('/')[-1]
|
||||||
|
file_path = reverse(
|
||||||
|
'collector:download',
|
||||||
|
kwargs={'path': file_name}
|
||||||
|
)
|
||||||
|
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'
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Platform, PlatformAdmin)
|
admin.site.register(Platform, PlatformAdmin)
|
||||||
admin.site.register(Ticket, TicketAdmin)
|
admin.site.register(Ticket, TicketAdmin)
|
||||||
admin.site.register(Archive, ArchiveAdmin)
|
admin.site.register(Archive, ArchiveAdmin)
|
||||||
|
|
||||||
|
admin.site.site_title = 'Logs Collector'
|
||||||
|
admin.site.site_header = 'LOGS COLLECTOR'
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
def logs_dir_path(instance, filename):
|
def logs_dir_path(instance, filename):
|
||||||
"""
|
"""
|
||||||
file will be uploaded to
|
file will be uploaded to
|
||||||
@ -9,22 +6,25 @@ def logs_dir_path(instance, filename):
|
|||||||
return f'{instance.ticket.number}/{filename}'
|
return f'{instance.ticket.number}/{filename}'
|
||||||
|
|
||||||
|
|
||||||
# deprecated
|
def sizify(value: int) -> str:
|
||||||
def get_file_size(file_path, unit='bytes'):
|
"""Simple kb/mb/gb size snippet for admin panel custom field:
|
||||||
file_size = os.path.getsize(file_path)
|
|
||||||
exponents_map = {'bytes': 0, 'kb': 1, 'mb': 2, 'gb': 3}
|
Args:
|
||||||
if unit not in exponents_map:
|
value (int): size of file from Filefield
|
||||||
raise ValueError("Must select from \
|
|
||||||
['bytes', 'kb', 'mb', 'gb']")
|
Returns:
|
||||||
|
str: format human readable size like 4.2 Gb
|
||||||
|
"""
|
||||||
|
if value < 512000:
|
||||||
|
value = value / 1024.0
|
||||||
|
ext = 'Kb'
|
||||||
|
elif value < 4194304000:
|
||||||
|
value = value / 1048576.0
|
||||||
|
ext = 'Mb'
|
||||||
else:
|
else:
|
||||||
size = file_size / 1024 ** exponents_map[unit]
|
value = value / 1073741824.0
|
||||||
return round(size, 3)
|
ext = 'Gb'
|
||||||
|
return f'{round(value, 2)} {ext}'
|
||||||
|
|
||||||
# deprecated
|
|
||||||
def is_ajax(request):
|
|
||||||
if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class PageTitleViewMixin:
|
class PageTitleViewMixin:
|
||||||
|
5
logs_collector/templates/admin/base_site.html
Normal file
5
logs_collector/templates/admin/base_site.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{% extends "admin/base_site.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% block extrahead %}
|
||||||
|
<link rel="shortcut icon" href="{% static 'img/favicon.ico' %}" />
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user