Skip to content

Commit 5b649e8

Browse files
authored
fix(auditLogs): use fast pagination (#6069)
### 📣 Summary Speed up the audit log endpoints. ### 💭 Notes Use FastPagination on the audit log endpoints to avoid having to do a select distinct on a large number of fields on a large table. ### 👀 Preview steps Run the server with --print-sql. 1. Go to `/api/v2/audit-logs/?q=log_type:asset-management&format=json` 2. 🔴 [on main] Notice there is a query in the logs for `SELECT COUNT(*) from (SELECT DISTINCT <lots of fields> from audit_log_auditlog...)` 3. 🟢 [on PR] Notice the query is now `SELECT COUNT(*) from (SELECT DISTINCT id FROM audit_log_auditlog...)`
1 parent 3ca781c commit 5b649e8

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

kobo/apps/audit_log/views.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
ImportExportTask,
1212
ProjectHistoryLogExportTask,
1313
)
14+
from kpi.paginators import FastPagination, Paginated
1415
from kpi.permissions import IsAuthenticated
1516
from kpi.tasks import export_task_in_background
1617
from kpi.utils.viewset_mixins import AssetNestedObjectViewsetMixin
@@ -168,6 +169,7 @@ class AuditLogViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
168169
'model_name__icontains',
169170
'metadata__icontains',
170171
]
172+
pagination_class = FastPagination
171173

172174

173175
class AllAccessLogViewSet(AuditLogViewSet):
@@ -274,6 +276,7 @@ class AllAccessLogViewSet(AuditLogViewSet):
274276

275277
queryset = AccessLog.objects.with_submissions_grouped().order_by('-date_created')
276278
serializer_class = AccessLogSerializer
279+
pagination_class = Paginated
277280

278281

279282
class AccessLogViewSet(AuditLogViewSet):
@@ -334,6 +337,7 @@ class AccessLogViewSet(AuditLogViewSet):
334337
permission_classes = (IsAuthenticated,)
335338
filter_backends = (AccessLogPermissionsFilter,)
336339
serializer_class = AccessLogSerializer
340+
pagination_class = Paginated
337341

338342

339343
def generate_ph_view_set_logstring(description, path, example_path, all):

kobo/apps/project_views/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from kpi.mixins.asset import AssetViewSetListMixin
1515
from kpi.mixins.object_permission import ObjectPermissionViewSetMixin
1616
from kpi.models import Asset, ProjectViewExportTask
17-
from kpi.paginators import FastAssetPagination
17+
from kpi.paginators import FastPagination
1818
from kpi.permissions import IsAuthenticated
1919
from kpi.serializers.v2.asset import AssetMetadataListSerializer
2020
from kpi.serializers.v2.user import UserListSerializer
@@ -48,7 +48,7 @@ def get_queryset(self, *args, **kwargs):
4848
detail=True,
4949
methods=['GET'],
5050
filter_backends=[SearchFilter, AssetOrderingFilter],
51-
pagination_class=FastAssetPagination,
51+
pagination_class=FastPagination,
5252
)
5353
def assets(self, request, uid):
5454
if not user_has_view_perms(request.user, uid):

kpi/paginators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class DataPagination(LimitOffsetPagination):
122122
max_limit = settings.SUBMISSION_LIST_LIMIT
123123

124124

125-
class FastAssetPagination(Paginated):
125+
class FastPagination(Paginated):
126126
"""
127127
Pagination class optimized for faster counting for DISTINCT queries on large tables.
128128

0 commit comments

Comments
 (0)