1
1
from datetime import timedelta
2
2
3
3
from django .conf import settings
4
- from django .contrib import admin
4
+ from django .contrib import admin , messages
5
5
from django .db .models import Count
6
6
from django .http import HttpResponse
7
7
8
+ from rest_framework .test import APIClient
9
+
8
10
from drf_api_logger .utils import database_log_enabled
9
11
12
+
10
13
if database_log_enabled ():
11
14
from drf_api_logger .models import APILogsModel
12
15
from django .utils .translation import gettext_lazy as _
@@ -77,7 +80,7 @@ def queryset(self, request, queryset):
77
80
78
81
class APILogsAdmin (admin .ModelAdmin , ExportCsvMixin ):
79
82
80
- actions = ["export_as_csv" ]
83
+ actions = ["retry" , " export_as_csv" ]
81
84
82
85
def __init__ (self , model , admin_site ):
83
86
super ().__init__ (model , admin_site )
@@ -96,12 +99,13 @@ def added_on_time(self, obj):
96
99
added_on_time .short_description = 'Added on'
97
100
98
101
list_per_page = 20
99
- list_display = ('id' , 'api' , 'method' , 'status_code ' , 'execution_time' , 'added_on_time' ,)
100
- list_filter = ('added_on' , 'status_code ' , 'method' ,)
102
+ list_display = ('id' , 'api' , 'method' , 'result_code' , 'request_user ' , 'execution_time' , 'added_on_time' ,)
103
+ list_filter = ('added_on' , 'result_code ' , 'method' ,)
101
104
search_fields = ('body' , 'response' , 'headers' , 'api' ,)
102
105
readonly_fields = (
103
106
'execution_time' , 'client_ip_address' , 'api' ,
104
- 'headers' , 'body' , 'method' , 'response' , 'status_code' , 'added_on_time' ,
107
+ 'headers' , 'body' , 'method' , 'response' ,
108
+ 'result_code' , 'request_user' , 'added_on_time' ,
105
109
)
106
110
exclude = ('added_on' ,)
107
111
@@ -116,12 +120,12 @@ def changelist_view(self, request, extra_context=None):
116
120
except :
117
121
return response
118
122
analytics_model = filtered_query_set .values ('added_on__date' ).annotate (total = Count ('id' )).order_by ('total' )
119
- status_code_count_mode = filtered_query_set .values ('id' ).values ('status_code ' ).annotate (
120
- total = Count ('id' )).order_by ('status_code ' )
123
+ status_code_count_mode = filtered_query_set .values ('id' ).values ('result_code ' ).annotate (
124
+ total = Count ('id' )).order_by ('result_code ' )
121
125
status_code_count_keys = list ()
122
126
status_code_count_values = list ()
123
127
for item in status_code_count_mode :
124
- status_code_count_keys .append (item .get ('status_code ' ))
128
+ status_code_count_keys .append (item .get ('result_code ' ))
125
129
status_code_count_values .append (item .get ('total' ))
126
130
extra_context = dict (
127
131
analytics = analytics_model ,
@@ -152,5 +156,31 @@ def has_add_permission(self, request, obj=None):
152
156
def has_change_permission (self , request , obj = None ):
153
157
return False
154
158
159
+ def retry (self , request , queryset ):
160
+ """
161
+ Perform retry
162
+ """
163
+ if hasattr (settings , "DRF_API_LOGGER_RETRY_AUTH_TOKEN" ):
164
+ self .message_user (
165
+ request ,
166
+ "You must set 'DRF_API_LOGGER_RETRY_AUTH_TOKEN' in django settings before making a retry request." ,
167
+ level = messages .ERROR
168
+ )
169
+ return
170
+
171
+ if len (queryset ) > 1 :
172
+ self .message_user (request , "You cannot retry in batch!" , level = messages .ERROR )
173
+ return
174
+
175
+ api_log = queryset [0 ]
176
+ client = APIClient ()
177
+ client .force_authenticate (token = settings .DRF_API_LOGGER_RETRY_AUTH_TOKEN )
178
+ client .request (
179
+ api_log .method ,
180
+ api_log .api ,
181
+ data = self .body ,
182
+ format = 'json' ,
183
+ )
184
+
155
185
156
186
admin .site .register (APILogsModel , APILogsAdmin )
0 commit comments