diff --git a/bugsink/settings.py b/bugsink/settings.py index bd42f9e..e73e60e 100644 --- a/bugsink/settings.py +++ b/bugsink/settings.py @@ -34,6 +34,7 @@ INSTALLED_APPS = [ 'tailwind', 'theme', + 'admin_auto_filters', 'compat', 'projects', diff --git a/events/admin.py b/events/admin.py index 76be547..d6fd310 100644 --- a/events/admin.py +++ b/events/admin.py @@ -3,6 +3,7 @@ from django.contrib import admin import json +from projects.admin import ProjectFilter from .models import Event @@ -22,7 +23,7 @@ class EventAdmin(admin.ModelAdmin): ] list_filter = [ - 'project', + ProjectFilter, 'platform', 'level', 'sdk_name', @@ -34,6 +35,9 @@ class EventAdmin(admin.ModelAdmin): exclude = ["data"] readonly_fields = [ + 'ingested_event', + 'issue', + 'project', 'pretty_data', ] diff --git a/ingest/admin.py b/ingest/admin.py index 3ecc069..ae0b4da 100644 --- a/ingest/admin.py +++ b/ingest/admin.py @@ -3,15 +3,25 @@ from django.contrib import admin import json +from projects.admin import ProjectFilter from .models import DecompressedEvent @admin.register(DecompressedEvent) class DecompressedEventAdmin(admin.ModelAdmin): - list_display = ["timestamp", "project"] + list_filter = [ + ProjectFilter, + ] + + list_display = [ + "timestamp", + "project", + ] + exclude = ["data"] readonly_fields = [ + 'project', 'pretty_data', ] diff --git a/issues/admin.py b/issues/admin.py index e0db9d3..10a855f 100644 --- a/issues/admin.py +++ b/issues/admin.py @@ -5,6 +5,20 @@ from .models import Issue @admin.register(Issue) class IssueAdmin(admin.ModelAdmin): + fields = [ + 'project', + 'hash', + 'last_seen', + 'first_seen', + 'is_resolved', + 'fixed_at', + 'events_at', + 'is_muted', + 'unmute_on_volume_based_conditions', + 'unmute_after', + 'event_count', + ] + list_display = [ "title", "hash", @@ -18,6 +32,7 @@ class IssueAdmin(admin.ModelAdmin): exclude = ["events"] readonly_fields = [ + 'project', 'event_count', ] diff --git a/projects/admin.py b/projects/admin.py index c47eef9..2c75b32 100644 --- a/projects/admin.py +++ b/projects/admin.py @@ -1,22 +1,67 @@ from django.contrib import admin +from admin_auto_filters.filters import AutocompleteFilter from .models import Project, ProjectMembership +class ProjectFilter(AutocompleteFilter): + title = 'Project' + field_name = 'project' + + +class UserFilter(AutocompleteFilter): + title = 'User' + field_name = 'user' + + +class ProjectMembershipInline(admin.TabularInline): + model = ProjectMembership + autocomplete_fields = [ + 'user', + ] + extra = 0 + + @admin.register(Project) class ProjectAdmin(admin.ModelAdmin): + search_fields = [ + 'name', + ] + list_display = [ 'name', 'dsn', + 'alert_on_new_issue', + 'alert_on_regression', + 'alert_on_unmute', ] + readonly_fields = [ 'dsn', ] + inlines = [ + ProjectMembershipInline, + ] + +# the preferred way to deal with ProjectMembership is actually through the inline above; however, because this may prove +# to not scale well with (very? more than 50?) memberships per project, we've left the separate admin interface here for +# future reference. @admin.register(ProjectMembership) class ProjectMembershipAdmin(admin.ModelAdmin): + list_filter = [ + ProjectFilter, + UserFilter, + ] + list_display = [ 'project', 'user', + 'send_email_alerts', + ] + + autocomplete_fields = [ + 'project', + 'user', ] diff --git a/releases/admin.py b/releases/admin.py index 922963e..6f545dc 100644 --- a/releases/admin.py +++ b/releases/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin +from projects.admin import ProjectFilter from .models import Release @@ -14,5 +15,11 @@ class ReleaseAdmin(admin.ModelAdmin): ] list_filter = [ - 'project', + ProjectFilter, + ] + + readonly_fields = [ + 'project', + 'is_semver', + 'sort_epoch', ] diff --git a/requirements.txt b/requirements.txt index a92fc1c..6fe5dd5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ django-tailwind==3.6.* jsonschema==4.19.* semver==3.0.* Celery[librabbitmq] +django-admin-autocomplete-filter==0.7.* diff --git a/theme/static/css/dist/styles.css b/theme/static/css/dist/styles.css index ce601c2..c0a8a1f 100644 --- a/theme/static/css/dist/styles.css +++ b/theme/static/css/dist/styles.css @@ -1294,10 +1294,6 @@ select { font-style: italic; } -.not-italic { - font-style: normal; -} - .leading-normal { line-height: 1.5; }