diff --git a/logs_collector/collector/admin.py b/logs_collector/collector/admin.py index b33b0c2..08fa41a 100644 --- a/logs_collector/collector/admin.py +++ b/logs_collector/collector/admin.py @@ -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( + '{file_name}', + 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' diff --git a/logs_collector/collector/utils.py b/logs_collector/collector/utils.py index c0b25fc..0c61f31 100644 --- a/logs_collector/collector/utils.py +++ b/logs_collector/collector/utils.py @@ -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: diff --git a/logs_collector/templates/admin/base_site.html b/logs_collector/templates/admin/base_site.html new file mode 100644 index 0000000..8a7c0f4 --- /dev/null +++ b/logs_collector/templates/admin/base_site.html @@ -0,0 +1,5 @@ +{% extends "admin/base_site.html" %} +{% load static %} +{% block extrahead %} + +{% endblock %}