OLD | NEW |
---|---|
(Empty) | |
1 // Needed to make filters visible inside sortable-table. | |
ojan
2014/07/22 02:01:26
Copyright
| |
2 PolymerExpressions.prototype.since_string = function(value) { | |
ojan
2014/07/22 02:01:27
Why do you need to do this? Can't you define a sin
| |
3 // Buildbot talks to us in seconds, js expect milliseconds | |
4 date = new Date(value * 1000.0); | |
5 return humanized_time_span(date); | |
6 } | |
7 PolymerExpressions.prototype.falsy_to_empty = function(value) { | |
8 return value ? value : ''; | |
ojan
2014/07/22 02:01:27
Nit: Idiomatic JS for this is:
return value || '';
| |
9 } | |
10 PolymerExpressions.prototype.master_name = function(value) { | |
11 if (!value) | |
12 return 'foo'; | |
ojan
2014/07/22 02:01:26
Log a warning and return something better?
| |
13 var url_parts = value.split('/'); | |
14 var long_name = url_parts[url_parts.length - 1]; | |
15 if (long_name.indexOf('chromium.') == 0) { | |
16 return long_name.slice('chromium.'.length); | |
17 } | |
18 return long_name; | |
19 } | |
20 PolymerExpressions.prototype.builder_url = function(failure) { | |
21 return failure.master_url + '/builders/' + failure.builder_name; | |
22 } | |
23 PolymerExpressions.prototype.build_url = function(failure, build_number) { | |
24 return PolymerExpressions.prototype.builder_url(failure) + '/builds/' + build_ number; | |
25 } | |
26 PolymerExpressions.prototype.step_url = function(failure, build_number) { | |
27 return PolymerExpressions.prototype.build_url(failure, build_number) + '/steps /' + failure.step_name; | |
28 } | |
29 PolymerExpressions.prototype.stdio_url = function(failure, build_number) { | |
30 return PolymerExpressions.prototype.step_url(failure, build_number) + '/logs/s tdio'; | |
31 } | |
32 | |
33 // This map is matches the test-results code: | |
34 // https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit /Tools/TestResultServer/handlers/buildershandler.py&l=40 | |
35 var MASTERS = [ | |
ojan
2014/07/22 02:01:26
This is fine for now, but add a FIXME to use test-
| |
36 {'name': 'ChromiumWin', 'url_name': 'chromium.win', 'groups': ['@ToT Chromiu m']}, | |
37 {'name': 'ChromiumMac', 'url_name': 'chromium.mac', 'groups': ['@ToT Chromiu m']}, | |
38 {'name': 'ChromiumLinux', 'url_name': 'chromium.linux', 'groups': ['@ToT Chr omium']}, | |
39 {'name': 'ChromiumChromiumOS', 'url_name': 'chromium.chromiumos', 'groups': ['@ToT ChromeOS']}, | |
40 {'name': 'ChromiumGPU', 'url_name': 'chromium.gpu', 'groups': ['@ToT Chromiu m']}, | |
41 {'name': 'ChromiumGPUFYI', 'url_name': 'chromium.gpu.fyi', 'groups': ['@ToT Chromium FYI']}, | |
42 {'name': 'ChromiumWebkit', 'url_name': 'chromium.webkit', 'groups': ['@ToT C hromium', '@ToT Blink']}, | |
43 {'name': 'ChromiumFYI', 'url_name': 'chromium.fyi', 'groups': ['@ToT Chromiu m FYI']}, | |
44 {'name': 'GpuTryServer', 'url_name': 'tryserver.chromium.gpu', 'groups': ['T ryServers']}, | |
45 {'name': 'V8', 'url_name': 'client.v8', 'groups': ['@ToT V8']}, | |
46 ]; | |
47 | |
48 function masterNameFromURL(master_url) { | |
49 var parts = master_url.trimRight('/').split('/') | |
50 return parts[parts.length - 1] | |
51 } | |
52 | |
53 // FIXME: test-results supports multiple 'groups' but it's an unused feature. | |
54 // It's not clear that any given waterfall should ever be in more than one 'tree '. | |
55 function groupForMaster(master_url) { | |
56 var name = masterNameFromURL(master_url); | |
57 for (var x = 0; x < MASTERS.length; ++x) { | |
58 var record = MASTERS[x]; | |
59 if (record['url_name'] == name) | |
60 return record['groups'][0]; | |
61 } | |
62 } | |
63 | |
64 PolymerExpressions.prototype.flakiness_dashboard_url = function(test_name, step_ name, master_url) { | |
65 if (!test_name) | |
66 return ''; | |
67 if (step_name.indexOf('test') == -1) | |
68 return ''; | |
69 return "http://test-results.appspot.com/dashboards/flakiness_dashboard.html#" | |
70 + "testType=" + step_name | |
71 + "&tests=" + encodeURIComponent(test_name) | |
72 + "&group=" + groupForMaster(master_url); | |
ojan
2014/07/22 02:01:26
This also needs to be encoded. FWIW, with sugarjs
| |
73 } | |
OLD | NEW |