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 %}