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 .utils import sizify
|
||||
|
||||
|
||||
# Register your models here.
|
||||
class PlatformAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = ('id', 'name', 'pretty_name')
|
||||
search_fields = ('name',)
|
||||
|
||||
|
||||
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):
|
||||
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):
|
||||
pass
|
||||
def file_link(self, obj):
|
||||
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(Ticket, TicketAdmin)
|
||||
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):
|
||||
"""
|
||||
file will be uploaded to
|
||||
@ -9,22 +6,25 @@ def logs_dir_path(instance, filename):
|
||||
return f'{instance.ticket.number}/{filename}'
|
||||
|
||||
|
||||
# deprecated
|
||||
def get_file_size(file_path, unit='bytes'):
|
||||
file_size = os.path.getsize(file_path)
|
||||
exponents_map = {'bytes': 0, 'kb': 1, 'mb': 2, 'gb': 3}
|
||||
if unit not in exponents_map:
|
||||
raise ValueError("Must select from \
|
||||
['bytes', 'kb', 'mb', 'gb']")
|
||||
def sizify(value: int) -> str:
|
||||
"""Simple kb/mb/gb size snippet for admin panel custom field:
|
||||
|
||||
Args:
|
||||
value (int): size of file from Filefield
|
||||
|
||||
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:
|
||||
size = file_size / 1024 ** exponents_map[unit]
|
||||
return round(size, 3)
|
||||
|
||||
|
||||
# deprecated
|
||||
def is_ajax(request):
|
||||
if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
|
||||
return True
|
||||
value = value / 1073741824.0
|
||||
ext = 'Gb'
|
||||
return f'{round(value, 2)} {ext}'
|
||||
|
||||
|
||||
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