Skip to content

Commit c2bc39a

Browse files
committed
Use proper filter params for all URLS
1 parent b9db17a commit c2bc39a

File tree

10 files changed

+169
-179
lines changed

10 files changed

+169
-179
lines changed

Diff for: dashboard/core/bots/reports/serializers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from dashboard.core.tests.serializers import TestListListSerializer
99

1010

11-
class TestPathListSerializer(serializers.Serializer):
11+
class TestPathsListSerializer(serializers.Serializer):
1212
test_path = serializers.CharField()
1313
root_test = serializers.CharField()
1414
aggregation = serializers.CharField()

Diff for: dashboard/core/bots/reports/views.py

+85-79
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from dashboard.core.cpus.models import CPUArchitecture
2525
from dashboard.core.gpus.models import GPUType
2626

27-
from dashboard.core.bots.reports.serializers import TestPathListSerializer, \
27+
from dashboard.core.bots.reports.serializers import TestPathsListSerializer, \
2828
TestsForBrowserBotListSerializer, ResultsForSubtestListSerializer, \
2929
BotReportDataSerializer
3030

@@ -39,7 +39,7 @@
3939
db_character_separator = '\\'
4040

4141

42-
class ReportDataBaseListViewSerializer(ListAPIView):
42+
class BaseReportDataListViewSerializer(ListAPIView):
4343
serializer_class = BotReportDataSerializer
4444

4545
def build_filters(self, is_improvement=True) -> dict:
@@ -83,7 +83,7 @@ def build_filters(self, is_improvement=True) -> dict:
8383
}
8484

8585

86-
class BotDataReportImprovementListView(ReportDataBaseListViewSerializer):
86+
class BotDataReportImprovementListView(BaseReportDataListViewSerializer):
8787
model = BotReportData
8888
queryset = BotReportData.objects.filter(aggregation='None')
8989

@@ -95,7 +95,7 @@ def get_queryset(self):
9595
prev_result__isnull=True).order_by('-delta')[:limit]
9696

9797

98-
class BotDataReportRegressionListView(ReportDataBaseListViewSerializer):
98+
class BotDataReportRegressionListView(BaseReportDataListViewSerializer):
9999
model = BotReportData
100100
queryset = BotReportData.objects.filter(aggregation='None')
101101

@@ -107,60 +107,62 @@ def get_queryset(self):
107107
prev_result__isnull=True).order_by('-delta')[:limit]
108108

109109

110-
class TestPathList(ListAPIView):
111-
serializer_class = TestPathListSerializer
110+
class TestPathsList(ListAPIView):
111+
serializer_class = TestPathsListSerializer
112112

113113
def get_queryset(self):
114-
if self.kwargs.get('browser') == 'all':
115-
browser_obj = Browser.objects.all()
116-
else:
117-
browser_obj = Browser.objects.filter(pk=self.kwargs.get('browser'))
114+
browser_filter = self.request.query_params.get('browser', None)
115+
browser_filter_by = {'pk': browser_filter} if browser_filter else {}
116+
browsers = Browser.objects.filter(**browser_filter_by)
117+
118+
root_test_filter = self.request.query_params.get('root_test', None)
119+
root_test_filter_by = {'pk': root_test_filter} if root_test_filter \
120+
else {}
121+
root_test = Test.objects.filter(**root_test_filter_by)
118122

119123
return BotReportData.objects.filter(
120-
browser__in=browser_obj,
121-
root_test=Test.objects.filter(pk=self.kwargs.get('test'))
124+
browser__in=browsers, root_test__in=root_test
122125
).distinct('test_path')
123126

124127

125128
class TestsForBrowserBotList(ListAPIView):
126129
serializer_class = TestsForBrowserBotListSerializer
127130

128131
def get_queryset(self):
129-
if self.kwargs.get('browser') == 'all':
130-
browser_obj = Browser.objects.all()
131-
else:
132-
browser_obj = Browser.objects.filter(pk=self.kwargs.get('browser'))
133-
try:
134-
bot = Bot.objects.get(pk=self.kwargs.get('bot'))
135-
return BotReportData.objects.filter(
136-
browser__in=browser_obj, bot=bot
137-
).distinct('root_test')
138-
except Bot.DoesNotExist:
139-
return BotReportData.objects.filter(
140-
browser__in=browser_obj
141-
).distinct('root_test')
132+
browser_filter = self.request.query_params.get('browser', None)
133+
browser_filter_by = {'pk': browser_filter} if browser_filter else {}
134+
browsers = Browser.objects.filter(**browser_filter_by)
142135

136+
bot_filter = self.request.query_params.get('bot', None)
137+
bot_filter_by = {'pk': bot_filter} if bot_filter else {}
138+
bots = Bot.objects.filter(**bot_filter_by)
139+
140+
return BotReportData.objects.filter(
141+
browser__in=browsers, bot__in=bots
142+
).distinct('root_test')
143143

144-
class ResultsForSubtestList(ListAPIView):
144+
145+
class ResultsForSubTestList(ListAPIView):
145146
serializer_class = ResultsForSubtestListSerializer
146147

147148
def get_queryset(self):
148-
if self.kwargs.get('browser') == 'all':
149-
browser_obj = Browser.objects.all()
150-
else:
151-
browser_obj = Browser.objects.filter(pk=self.kwargs.get('browser'))
152-
test = Test.objects.get(pk=self.kwargs.get('test'))
153-
test_path = urllib.parse.unquote(self.kwargs.get('subtest'))
154-
if self.kwargs.get('bot') == 'all':
155-
return BotReportData.objects.filter(
156-
browser__in=browser_obj, root_test=test, test_path=test_path
157-
).order_by('timestamp')
158-
else:
159-
bot = Bot.objects.get(pk=self.kwargs.get('bot'))
160-
return BotReportData.objects.filter(
161-
browser__in=browser_obj, root_test=test, test_path=test_path,
162-
bot=bot
163-
).order_by('timestamp')
149+
browser_filter = self.request.query_params.get('browser', None)
150+
browser_filter_by = {'pk': browser_filter} if browser_filter else {}
151+
browsers = Browser.objects.filter(**browser_filter_by)
152+
153+
test = Test.objects.get(pk=self.request.query_params.get('test'))
154+
test_path = urllib.parse.unquote(
155+
self.request.query_params.get('subtest')
156+
)
157+
158+
bot_filter = self.request.query_params.get('bot', None)
159+
bot_filter_by = {'pk': bot_filter} if bot_filter else {}
160+
bots = Bot.objects.filter(**bot_filter_by)
161+
162+
return BotReportData.objects.filter(
163+
browser__in=browsers, root_test=test, test_path=test_path,
164+
bot__in=bots
165+
).order_by('timestamp')
164166

165167

166168
class BotReportView(APIView):
@@ -248,12 +250,13 @@ def post(self, request, format=None):
248250
bot_id = self.request.POST.get('bot_id')
249251
json_data = self.request.POST.get('test_data')
250252
except AttributeError:
251-
log.error("Got invalid params from the bot: %s" % request.auth)
253+
log.error(
254+
'Got invalid params from the bot: {0}'.format(request.auth))
252255
return HttpResponseBadRequest(
253-
"Some params are missing in the request"
256+
'Some params are missing in the request'
254257
)
255258

256-
log.info("Started processing data from bot %s" % (bot_id))
259+
log.info('Started processing data from bot {0}'.format(bot_id))
257260
# The timestamp may/may not be there - hence not checking
258261
timestamp = None
259262
if self.request.POST.get('timestamp'):
@@ -264,33 +267,35 @@ def post(self, request, format=None):
264267
test_data = json.loads(json_data)
265268
except AttributeError:
266269
return HttpResponseBadRequest(
267-
"Error parsing JSON file from bot: %s " % request.auth
270+
'Error parsing JSON file from bot: {0}'.format(request.auth)
268271
)
269272

270273
bot = Bot.objects.get(pk=bot_id)
271274

272275
if not bot.enabled:
273-
log.error("Got data from disabled bot: %s" % bot_id)
274-
return HttpResponseBadRequest("The bot %s is not enabled" % bot_id)
276+
log.error('Got data from disabled bot: {0}'.format(bot_id))
277+
return HttpResponseBadRequest(
278+
'The bot {0} is not enabled'.format(bot_id))
275279

276280
try:
277281
browser = Browser.objects.get(pk=browser_id)
278282
except Browser.DoesNotExist:
279283
log.error(
280-
"Got invalid browser %s from bot: %s" % (browser_id, bot_id)
284+
'Got invalid browser {0} from bot: {1}'.format(
285+
browser_id, bot_id)
281286
)
282-
return HttpResponseBadRequest("The browser does not exist")
287+
return HttpResponseBadRequest('The browser does not exist')
283288

284289
try:
285290
root_test = Test.objects.get(pk=test_id)
286291
except Test.DoesNotExist:
287292
log.error(
288-
"Got invalid root test: %s from bot: %s for browser: %s, "
289-
"browser_version: %s" % (
290-
test_id, bot_id, browser_id, browser_version
291-
))
293+
'Got invalid root test: {0} from bot: {1} for browser: {2}, '
294+
'browser_version: {3}'.format(
295+
test_id, bot_id, browser_id, browser_version)
296+
)
292297
return HttpResponseBadRequest(
293-
"The test %s does not exist" % test_id
298+
'The test {0} does not exist'.format(test_id)
294299
)
295300

296301
test_data_results = BenchmarkResults(test_data)
@@ -318,27 +323,28 @@ def post(self, request, format=None):
318323
" " + current_metric.unit
319324
except MetricUnit.DoesNotExist:
320325
log.error(
321-
"Got wrong Metric %s for bot: %s, browser: %s, "
322-
"browser_version: %s, root_test: %s, test_description: "
323-
"%s" % (metric_name, bot_id, browser_id, browser_version,
324-
test_id, raw_path
325-
)
326+
'Got wrong Metric {0} for bot: {1}, browser: {2}, '
327+
'browser_version: {3}, root_test: {4}, test_description: '
328+
'{5}'.format(
329+
metric_name, bot_id, browser_id, browser_version,
330+
test_id, raw_path)
326331
)
327332
return HttpResponseBadRequest(
328-
"The Metric Unit %s does not exist" % metric_name
333+
'The Metric Unit {0} does not exist'.format(metric_name)
329334
)
330335

331336
if current_metric.unit != unit:
332-
log.error("Got wrong unit %s for metric unit %s data for "
333-
"bot: %s, browser: %s, browser_version: %s, "
334-
"root_test: %s, test_description: %s" %
335-
(unit, metric_name, bot_id, browser_id,
336-
browser_version, test_id, raw_path)
337-
)
338-
return HttpResponseBadRequest("The received unit: %s field of "
339-
"Metric Unit %s does not match"
340-
% (unit, metric_name)
341-
)
337+
log.error(
338+
'Got wrong unit {0} for metric unit {1} data for bot: '
339+
'{2}, browser: {3}, browser_version: {4}, root_test: {5}, '
340+
'test_description: {6}'.format(
341+
unit, metric_name, bot_id, browser_id,
342+
browser_version, test_id, raw_path
343+
)
344+
)
345+
return HttpResponseBadRequest(
346+
'The received unit: {0} field of Metric Unit {1} does not '
347+
'match'.format(unit, metric_name))
342348

343349
if self.is_aggregated(metric=result['metric']):
344350
aggregation = self.extract_aggregation(metric=result['metric'])
@@ -365,13 +371,13 @@ def post(self, request, format=None):
365371
)
366372
except Exception as e:
367373
log.error(
368-
"Failed inserting data for bot: %s, browser: %s, "
369-
"browser_version: %s, root_test: %s, test_description: %s"
370-
" and Exception %s" %
371-
(bot_id, browser_id, browser_version, test_id, raw_path,
372-
str(e))
374+
'Failed inserting data for bot: {0}, browser: {1}, '
375+
'browser_version: {2}, root_test: {3}, test_description: '
376+
'{4} and Exception {5}'.format(
377+
bot_id, browser_id, browser_version, test_id,
378+
raw_path, e)
373379
)
374-
return HttpResponseBadRequest("Exception inserting the data "
375-
"into the DB: %s" % str(e))
380+
return HttpResponseBadRequest(
381+
'Exception while inserting the data: {0}'.format(e))
376382

377-
return HttpResponse("The POST went through")
383+
return HttpResponse('The POST went through')

Diff for: dashboard/core/bots/serializers.py

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ class Meta:
1313

1414

1515
class BotsFullDetailsForResultsExistListSerializer(serializers.ModelSerializer):
16-
name = serializers.CharField()
1716
platform = PlatformListSerializer()
1817
cpuArchitecture = CPUArchitectureListSerializer()
1918
gpuType = GPUTypeListSerializer()

Diff for: dashboard/core/bots/views.py

+9-28
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,24 @@
99
from rest_framework.generics import ListAPIView
1010

1111

12-
class BotsForResultsExistList(ListAPIView):
13-
"""Fetch just the botname for the plot pages"""
12+
class BaseBotResultsView(ListAPIView):
1413
model = Bot
15-
serializer_class = BotsForResultsExistListSerializer
1614

1715
def get_queryset(self):
18-
if self.kwargs.get('browser') == 'all':
19-
browser_obj = Browser.objects.all()
20-
else:
21-
browser_obj = Browser.objects.filter(
22-
pk=self.kwargs.get('browser')
23-
)
16+
browser_filter = self.request.query_params.get('browser', None)
17+
browser_filter_by = {'pk': browser_filter} if browser_filter else {}
18+
browsers = Browser.objects.filter(**browser_filter_by)
2419
return Bot.objects.filter(
2520
name__in=BotReportData.objects.filter(
26-
browser__in=browser_obj
21+
browser__in=browsers
2722
).distinct('bot').values('bot'),
2823
enabled=True
2924
)
3025

3126

32-
class BotsFullDetailsForResultsExistList(ListAPIView):
33-
"""Fetch detailed bot fields for the home page"""
34-
model = Bot
35-
serializer_class = BotsFullDetailsForResultsExistListSerializer
36-
37-
def get_queryset(self):
38-
if self.kwargs.get('browser') == 'all':
39-
browser_obj = Browser.objects.all()
40-
else:
41-
browser_obj = Browser.objects.filter(
42-
pk=self.kwargs.get('browser')
43-
)
44-
return Bot.objects.filter(
45-
name__in=BotReportData.objects.filter(
46-
browser__in=browser_obj
47-
).distinct('bot').values('bot'),
48-
enabled=True
49-
)
27+
class BotsForResultsExistList(BaseBotResultsView):
28+
serializer_class = BotsForResultsExistListSerializer
5029

5130

31+
class BotsFullDetailsForResultsExistList(BaseBotResultsView):
32+
serializer_class = BotsFullDetailsForResultsExistListSerializer

Diff for: dashboard/static/js/app_controllers/dashboard/dashboard.module.js

+15-12
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ app.controller(
2222
$sce, $filter
2323
) {
2424
$scope.browsers = browserFactory.query();
25-
$scope.bots = botFullDetailsForResultsExistFactory.query({
26-
browser: 'all'
27-
});
25+
$scope.bots = botFullDetailsForResultsExistFactory.query({});
2826
$scope.platforms = platformFactory.query();
2927
$scope.gpus = gpuFactory.query();
3028
$scope.cpus = cpuArchFactory.query();
31-
$scope.tests = testsForBrowserAndBotFactory.query({
32-
browser: !$scope.selectedBrowser ? 'all' : $scope.selectedBrowser.id,
33-
bot: !$scope.selectedBot ? null : $scope.selectedBot.name,
29+
30+
$scope.tests_query = angular.extend({}, {
31+
browser: !$scope.selectedBrowser ? undefined : $scope.selectedBrowser.id,
32+
bot: !$scope.selectedBot ? undefined : $scope.selectedBot.name,
3433
});
34+
$scope.tests = testsForBrowserAndBotFactory.query($scope.tests_query);
3535
$scope.botDetailsPopover = {
3636
templateUrl: 'bot-template.html'
3737
};
@@ -46,13 +46,16 @@ app.controller(
4646
};
4747
$scope.updateOthersOnBrowserChange = function () {
4848
//There can be chance of test change
49-
$scope.tests = testsForBrowserAndBotFactory.query({
50-
browser: !$scope.selectedBrowser ? 'all' : $scope.selectedBrowser.id,
51-
bot: !$scope.selectedBot ? null : $scope.selectedBot.name,
52-
}, function () {
53-
$scope.bots = botFullDetailsForResultsExistFactory.query({
54-
browser: !$scope.selectedBrowser ? 'all' : $scope.selectedBrowser.id
49+
$scope.tests_query_on_browser = angular.extend({}, {
50+
browser: !$scope.selectedBrowser ? undefined : $scope.selectedBrowser.id,
51+
bot: !$scope.selectedBot ? undefined : $scope.selectedBot.name,
52+
});
53+
$scope.tests = testsForBrowserAndBotFactory.query(
54+
$scope.tests_query_on_browser, function () {
55+
$scope.bot_query = angular.extend({}, {
56+
'browser': !$scope.selectedBrowser ? undefined : $scope.selectedBrowser.id
5557
});
58+
$scope.bots = botFullDetailsForResultsExistFactory.query($scope.bot_query);
5659
$scope.reload();
5760
});
5861
};

0 commit comments

Comments
 (0)