Skip to content

Commit 49af16f

Browse files
author
Alex Finder
committed
Add filtering by all sheriffed frameworks in Alerts View
1 parent 36a0f62 commit 49af16f

File tree

5 files changed

+72
-9
lines changed

5 files changed

+72
-9
lines changed

tests/webapp/api/test_performance_alertsummary_api.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
from tests.conftest import create_perf_alert
88
from treeherder.model.models import Push
9-
from treeherder.perf.models import PerformanceAlert, PerformanceAlertSummary
9+
from treeherder.perf.models import (
10+
PerformanceAlert,
11+
PerformanceAlertSummary,
12+
PerformanceFramework,
13+
)
1014

1115
pytestmark = pytest.mark.perf
1216

@@ -153,6 +157,35 @@ def test_alert_summaries_get_multiple_alerts(
153157
assert len(set([result["id"] for result in data["results"]])) == 2
154158

155159

160+
def test_alert_summaries_sheriffed_frameworks(
161+
client, test_perf_alert_summary, test_perf_alert_summary_2, test_perf_framework
162+
):
163+
# verify that we return only the sheriffed framework alerts if show_sheriffed_frameworks is True
164+
sheriffed_framework = PerformanceFramework.objects.create(name="browsertime", enabled=True)
165+
non_sheriffed_framework = PerformanceFramework.objects.create(
166+
name="platform_microbench", enabled=True
167+
)
168+
test_perf_alert_summary.framework = sheriffed_framework
169+
test_perf_alert_summary.save()
170+
test_perf_alert_summary_2.framework = non_sheriffed_framework
171+
test_perf_alert_summary_2.save()
172+
resp = client.get(
173+
reverse("performance-alert-summaries-list"), {"show_sheriffed_frameworks": True}
174+
)
175+
assert resp.status_code == 200
176+
# Should only include the sheriffed alert (browsertime)
177+
assert len(resp.json()["results"]) == 1
178+
assert resp.json()["results"][0]["framework"] == sheriffed_framework.id
179+
test_perf_alert_summary.framework = test_perf_framework
180+
test_perf_alert_summary.save()
181+
resp = client.get(
182+
reverse("performance-alert-summaries-list"), {"show_sheriffed_frameworks": True}
183+
)
184+
assert resp.status_code == 200
185+
# Should return no results, since test_talos is not a sheriffed framework
186+
assert len(resp.json()["results"]) == 0
187+
188+
156189
def test_alert_summaries_get_onhold(
157190
client,
158191
test_perf_alert_summary,

treeherder/webapp/api/performance_data.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
TestSuiteHealthParamsSerializer,
4848
TestSuiteHealthSerializer,
4949
)
50-
from .utils import GroupConcat, get_profile_artifact_url
50+
from .utils import SHERIFFED_FRAMEWORKS, GroupConcat, get_profile_artifact_url
5151

5252

5353
class PerformanceSignatureViewSet(viewsets.ViewSet):
@@ -347,6 +347,7 @@ class PerformanceAlertSummaryFilter(django_filters.FilterSet):
347347
hide_related_and_invalid = django_filters.BooleanFilter(method="_hide_related_and_invalid")
348348
with_assignee = django_filters.CharFilter(method="_with_assignee")
349349
timerange = django_filters.NumberFilter(method="_timerange")
350+
show_sheriffed_frameworks = django_filters.BooleanFilter(method="_show_sheriffed_frameworks")
350351

351352
def _filter_text(self, queryset, name, value):
352353
sep = Value(" ")
@@ -418,6 +419,9 @@ def _timerange(self, queryset, name, value):
418419
push__time__gt=datetime.datetime.utcfromtimestamp(int(time.time() - int(value)))
419420
)
420421

422+
def _show_sheriffed_frameworks(self, queryset, name, value):
423+
return queryset.filter(framework__name__in=SHERIFFED_FRAMEWORKS)
424+
421425
class Meta:
422426
model = PerformanceAlertSummary
423427
fields = [

treeherder/webapp/api/utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@
2020

2121
FIVE_DAYS = 432000
2222

23+
# Constant used to check for sheriffed frameworks
24+
SHERIFFED_FRAMEWORKS = [
25+
"awsy",
26+
"browsertime",
27+
"build_metrics",
28+
"devtools",
29+
"js-bench",
30+
"mozperftest",
31+
"talos",
32+
]
33+
2334

2435
class GroupConcat(Aggregate):
2536
function = "GROUP_CONCAT"

ui/perfherder/alerts/AlertsView.jsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,11 @@ class AlertsView extends React.Component {
150150
const frameworkOptions = cloneDeep(frameworks);
151151
const ignoreFrameworks = { id: -1, name: 'all frameworks' };
152152
frameworkOptions.unshift(ignoreFrameworks);
153+
const allSheriffedFrameworks = {
154+
id: -2,
155+
name: 'all sheriffed frameworks',
156+
};
157+
frameworkOptions.unshift(allSheriffedFrameworks);
153158
return frameworkOptions;
154159
};
155160

@@ -201,13 +206,21 @@ class AlertsView extends React.Component {
201206

202207
// -1 ('all') is created for UI purposes but is not a valid API parameter
203208
const doNotFilter = -1;
209+
// -2 ('all sheriffed') Constant created for UI purposes but is not a valid API parameter
210+
const allSheriffedFrameworksID = -2;
204211
const listMode = !id;
205212

206213
if (listMode && params.status === doNotFilter) {
207214
delete params.status;
208215
}
209-
if (listMode && params.framework === doNotFilter) {
210-
delete params.framework;
216+
217+
if (listMode) {
218+
if (params.framework === allSheriffedFrameworksID) {
219+
params.show_sheriffed_frameworks = true;
220+
}
221+
if ([doNotFilter, allSheriffedFrameworksID].includes(params.framework)) {
222+
delete params.framework;
223+
}
211224
}
212225

213226
return params;

ui/perfherder/alerts/AlertsViewControls.jsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,16 @@ export default class AlertsViewControls extends React.Component {
138138

139139
let sortedFrameworks = sortData(frameworkOptions, 'name', false);
140140
const allFrameworks = 'all frameworks';
141-
const mozperftest = 'mozperftest';
141+
const allSheriffedFrameworks = 'all sheriffed frameworks';
142142
const platformMicrobench = 'platform_microbench';
143+
const telemetry = 'telemetry';
143144

144145
sortedFrameworks = sortedFrameworks.filter(
145146
(framework) =>
146-
framework.name !== mozperftest &&
147147
framework.name !== platformMicrobench &&
148-
framework.name !== allFrameworks,
148+
framework.name !== telemetry &&
149+
framework.name !== allFrameworks &&
150+
framework.name !== allSheriffedFrameworks,
149151
);
150152

151153
const frameworkNames =
@@ -165,8 +167,8 @@ export default class AlertsViewControls extends React.Component {
165167
selectedItem: framework.name,
166168
updateData: this.updateFramework,
167169
namespace: 'framework',
168-
pinned: [allFrameworks],
169-
otherPinned: [mozperftest, platformMicrobench],
170+
pinned: [allFrameworks, allSheriffedFrameworks],
171+
otherPinned: [platformMicrobench, telemetry],
170172
},
171173
];
172174

0 commit comments

Comments
 (0)