Fix JSON generations on new flakiness dashboard
[WebKit-https.git] / Websites / test-results / ChangeLog
1 2013-11-04  Ryosuke Niwa  <rniwa@webkit.org>
2
3         Fix JSON generations on new flakiness dashboard
4         https://bugs.webkit.org/show_bug.cgi?id=123723
5
6         Reviewed by Andreas Kling.
7
8         Add is_flaky column on results table so that this column can be used to find flaky tests on a given builder
9         efficiently without having to through results for all tests in PHP. This column is updated in report.php
10         when a new build is added. Because is_flaky depends on the preceding and succeeding results, we must update
11         is_flaky flag on results for builds immediately before and after the new build as well.
12
13         To see why, suppose we had two consecutive results [PASS] [PASS]. If we were to insert [FAIL] result between
14         the two, those two results may also turn into flaky results if they were surrounded by [FAIL]. Similarly,
15         if we had [PASS] [FAIL] and the second result was marked flaky, inserting new [FAIL] must unmark it.
16
17
18         * init-database.sql: Added is_flaky column to results table with an index. Also added an index on
19         build_revisions.time as many queries filter results by this quantity. Also set the work_mem to 50MB avoid
20         disk thrashing while sorting results in various queries.
21
22         * public/api/failing-tests.php: Handle builder ids as well as names. Call generate() with failure types.
23         No longer generates *-failing.json since it's a subset of *-wrongexpectations.json to save time.
24
25         * public/api/report.php: Rewritten. Calls update_flakiness_after_inserting_build to update is_flaky flags
26         on the newly added results.
27         (store_results): Added.
28         (main): Added.
29
30         * public/include/test-results.php:
31         (ResultsJSONWriter):
32         (ResultsJSONWriter::add_results_for_test): Renamed from add_results_for_test_if_matches.
33         (ResultsJSONGenerator::generate): Takes the failure type. Instead of generating JSONs for all failure types
34         at once, generate one JSON for the specified type. We generate the list of test ids based on the failure type
35         and query results based on that. This dramatically cuts down the time spent in PHP.
36         (ResultsJSONGenerator::latest_build): Added.
37         (ResultsJSONGenerator::write_jsons): Takes single writer now.
38         (update_flakiness_for_build): Added.
39         (update_flakiness_after_inserting_build): Added.
40
41         * public/index.html:
42         (TestResultsView._populateBuilderPane): Emulate *-failing.json upon *-wrongexpectations.json.
43         (TestResultsView.fetchFailingTestsForBuilder): Ditto.
44
45         * public/main.css: Minor style tweaks.
46         (.testResults): Extend the border that wraps the test results as needed.
47         (.tooltip): Don't wrap text inside tooltips.
48
49 2013-10-26  Ryosuke Niwa  <rniwa@webkit.org>
50
51         Make new bug link in flakiness dashboard configurable
52         https://bugs.webkit.org/show_bug.cgi?id=123386
53
54         Reviewed by Alexey Proskuryakov.
55
56         * config.json: Added Bugzilla as the default destination for new bugs.
57         * public/api/manifest.php: Include newBugLinks in the manifest.
58         * public/index.html:
59         (TestResultsView): Initialize _newBugLinks.
60         (TestResultsView.setNewBugLinks): Added.
61         (TestResultsView._populateTestPane):
62         (TestResultsView._createTestResultRow): Replaced the hard-coded Bugzilla URL by the code
63         to generate hyper-links based on _newBugLinks. Also added a nullity check while formatting
64         revision checks so that we don't blow up when some build doesn't contain all revision info.
65         (TestResultsView._populateBuilderPane):
66
67 2013-10-26  Ryosuke Niwa  <rniwa@webkit.org>
68
69         New flakiness dashboard should support substring matching
70         https://bugs.webkit.org/show_bug.cgi?id=123393
71
72         Reviewed by Alexey Proskuryakov.
73
74         Addressed the use cases by
75         1. Always showing the candidate even when there is exactly one test matching the current value.
76         2. Adding all tests that match the current value upon the user pressing enter key.
77
78         * public/index.html:
79         (fetchManifest): Add all tests that match the current value. Confirm whether the user really
80         want to add all the tests when there are more than 15 tests to add.
81         * public/js/autocompleter.js:
82         (Autocompleter.prototype.filterCandidates): Extracted from _updateCandidates.
83         (Autocompleter.prototype._updateCandidates): Show the candidate window even when there is
84         exactly one test that matches the criteria so that the user can select this test.
85
86 2013-10-26  Ryosuke Niwa  <rniwa@webkit.org>
87
88         New flakiness dashboard shouldn't treat tests with right expectations as failing
89         https://bugs.webkit.org/show_bug.cgi?id=123385
90
91         Reviewed by Alexey Proskuryakov.
92
93         We define failing tests to be tests with wrong expectations whose actual results are not PASS
94         since tests with TEXT, IMAGE, etc... failures do not turn the bots red as long as the expectation
95         of the same type is specified in TestExpectation files.
96
97         * public/include/test-results.php:
98         (FailingResultsJSONWriter): Inherit from WrongExpectationsResultsJSONWriter.
99
100 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
101
102         Build fix. The query results weren't sorted by the latest commit time,
103         yielding wrong set of tests to be listed in the builder pane.
104
105         * public/include/test-results.php:
106
107 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
108
109         Links in new flakiness dashboard could benefit from tooltips
110         https://bugs.webkit.org/show_bug.cgi?id=123381
111
112         Reviewed by Alexey Proskuryakov.
113
114         Add title content attribute on each hyperlink in the builder pane.
115
116         * public/index.html:
117         (TestResultsView._populateBuilderPane):
118
119 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
120
121         Commit the right change.
122
123         * public/index.html:
124
125 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
126
127         The new flakiness dashboard should sort builder and test names
128         https://bugs.webkit.org/show_bug.cgi?id=123363
129
130         Reviewed by Simon Fraser.
131
132         Sort the forgotten builders in the menu.
133
134         * public/index.html:
135
136 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
137
138         The new flakiness dashboard should sort builder and test names
139         https://bugs.webkit.org/show_bug.cgi?id=123363
140
141         Reviewed by Simon Fraser.
142
143         Sort builders and tests by their name in each pane.
144
145         * public/index.html:
146         (TestResultsView._populateTestPane): Lexicologically sort builders by their name.
147         (TestResultsView._sortObjectsByName): Added.
148         (TestResultsView._populateBuilderPane): Lexicologically sort builders by their name.
149
150 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
151
152         Merge revision columns in flakiness dashboard
153         https://bugs.webkit.org/show_bug.cgi?id=123360
154
155         Reviewed by Simon Fraser.
156
157         Merge revision numbers into one cell separated by /, and clearly label them as "latest revisions".
158         Also add colors for missing & audio failures so that they won't be an empty cell.
159
160         * public/index.html:
161         (TestResultsView._createTestResultHeader): Create a single th for the list of repository names.
162         (TestResultsView._createTestResultRow): Use single td for all revision numbers.
163         * public/js/build.js:
164         (.this.formattedRevision): Don't prefix revision numbers with '@' when we're not in the tooltip.
165         * public/main.css:
166         (.resultsTable .AUDIO a): Added.
167         (.resultsTable .MISSING a): Added.
168
169 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
170
171         One more build fix. Put each latest revision information in an actual td.
172
173         * public/index.html:
174
175 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
176
177         Yet another set of build fixes.
178
179         1. Manually strip / from revisions JSON if there is any.
180         2. Suppress warnings from ob_end_flush.
181         3. Allow "+" in actual and expected results as used in "TEXT+IMAGE".
182
183         * public/api/report.php:
184         * public/include/test-results.php:
185
186 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
187
188         Another build fix. Move .htaccess to public.
189
190         * .htaccess: Removed.
191         * public/.htaccess: Copied from .htaccess.
192
193 2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>
194
195         It turns out that the current instruction only works on Mountain Lion.
196
197         Also fixed some typos.
198
199         * Install.md:
200
201 2013-10-24  Ryosuke Niwa  <rniwa@webkit.org>
202
203         Add an instruction on how to setup test-results app
204         https://bugs.webkit.org/show_bug.cgi?id=123321
205
206         Rubber-stamped by Stephanie Lewis.
207
208         Added Install.md and updated config.json accordingly.
209
210         Also moved init-database.sql out of public/include since it doesn't need to be accessible via httpd.
211
212         * Install.md: Added.
213         * config.json:
214         * init-database.sql: Moved from public/include/init-database.sql.
215
216 2013-10-24  Ryosuke Niwa  <rniwa@webkit.org>
217
218         Move everything except ChangeLog and config.json into public directory.
219         https://bugs.webkit.org/show_bug.cgi?id=123319
220
221         Rubber-stamped by Stephanie Lewis.
222
223         * admin: Removed.
224         * admin/admin.css: Removed.
225         * admin/builders.php: Removed.
226         * admin/index.php: Removed.
227         * admin/repositories.php: Removed.
228         * api: Removed.
229         * api/failing-tests.php: Removed.
230         * api/manifest.php: Removed.
231         * api/report.php: Removed.
232         * api/results.php: Removed.
233         * common.css: Removed.
234         * config.json: Copied from include/config.json.
235         * include: Removed.
236         * include/admin-footer.php: Removed.
237         * include/admin-header.php: Removed.
238         * include/config.json: Removed.
239         * include/db.php: Removed.
240         * include/init-database.sql: Removed.
241         * include/json-shared.php: Removed.
242         * include/test-results.php: Removed.
243         * index.html: Removed.
244         * js: Removed.
245         * js/autocompleter.js: Removed.
246         * js/build.js: Removed.
247         * js/dom.js: Removed.
248         * main.css: Removed.
249         * public: Added.
250         * public/admin: Copied from admin.
251         * public/api: Copied from api.
252         * public/common.css: Copied from common.css.
253         * public/include: Copied from include.
254         * public/include/config.json: Removed.
255         * public/include/db.php:
256         * public/index.html: Copied from index.html.
257         * public/js: Copied from js.
258         * public/main.css: Copied from main.css.
259
260 2013-10-24  Ryosuke Niwa  <rniwa@webkit.org>
261
262         Showing lists of flaky tests for a builder takes too long
263         https://bugs.webkit.org/show_bug.cgi?id=123311
264
265         Reviewed by Sam Weinig.
266
267         Generate JSONs for tests failing, flaky, or with wrong expectation at the time a builder reports results
268         instead when the frontend requests to those those results since it takes multiple seconds or minutes to
269         generate those JSON files.
270
271         * api/failing-tests.php: Moved and renamed to manually generate all JSON files for a given builder.
272         (main):
273
274         * api/report.php: Manually flush and end the request (to avoid blocking run-webkit-tests on the other side
275         for minutes), then generate JSONs for tests that are failing, are flaky, and have wrong expectations.
276
277         * api/results.php: Merge format_result_rows here since it's not used anywhere else.
278
279         * include/config.json: Added the path to the data directory into which JSON files are generated.
280
281         * include/db.php:
282         (configPath): Takes a relative path value from config.json, and resolves it.
283
284         * include/json-shared.php:
285         (echo_success): Extracted from exit_with_success.
286         (exit_with_success):
287
288         * include/test-results.php:
289         (add_builder): Extracted from add_build.
290         (add_build):
291         (ResultsJSONWriter): Extracted from api/failing-tests.php.
292         (ResultsJSONWriter.__construct):
293         (ResultsJSONWriter.start):
294         (ResultsJSONWriter.end):
295         (ResultsJSONWriter.add_results_for_test_if_matches):
296         (ResultsJSONWriter.pass_for_failure_type):
297         (FailingResultsJSONWriter): Extracted from index.html's TestResultsView._matchesFailureType.
298         (FailingResultsJSONWriter.__construct):
299         (FailingResultsJSONWriter.pass_for_failure_type):
300         (FlakyResultsJSONWriter): Ditto.
301         (FlakyResultsJSONWriter.__construct):
302         (FlakyResultsJSONWriter.pass_for_failure_type):
303         (WrongExpectationsResultsJSONWriter): Ditto.
304         (WrongExpectationsResultsJSONWriter.__construct):
305         (WrongExpectationsResultsJSONWriter.pass_for_failure_type):
306         (ResultsJSONGenerator): Ditto.
307         (ResultsJSONGenerator.__construct):
308         (ResultsJSONGenerator.generate):
309         (ResultsJSONGenerator.open_json_for_failure_type):
310         (ResultsJSONGenerator.write_jsons):
311
312         * index.html:
313         (TestResultsView):
314         (TestResultsView.setBuilders):
315         (TestResultsView._createResultCell): Add a hyperlink to results.html in the tooltip.
316         (TestResultsView.fetchFailingTestsForBuilder): Fetch the generated JSON files.
317
318 2013-10-23  Ryosuke Niwa  <rniwa@webkit.org>
319
320         Reverted erroneously committed changes from the previous commit.
321
322         * index.html:
323
324 2013-10-23  Ryosuke Niwa  <rniwa@webkit.org>
325
326         Clicking on a test name on the new flakiness dashboard should add a new test pane
327         https://bugs.webkit.org/show_bug.cgi?id=123194
328
329         Reviewed by Simon Fraser.
330
331         Added a new click handler on each test name inside the builder test view add a new test pane.
332         Moved the old trac link to a right-arrow inline SVG icon.
333
334         Also tweaked the style so that the builder test view looks different from other test panes.
335
336         * index.html:
337         (TestResultsView._urlFromTest): Extracted from TestResultsView._linkifiedTestName.
338         (TestResultsView._populateBuilderPane): Fetch the test when its name is clicked.
339         Added a circled right arrow for the old trac link.
340         * main.css: Tweaked the style to move the rounded border around the builder test view to be
341         around the form controls to clearly differentiate it from a regular test pane.
342
343 2013-10-22  Ryosuke Niwa  <rniwa@webkit.org>
344
345         New flakiness dashboard's test pane should show the latest WebKit revision for each builder
346         https://bugs.webkit.org/show_bug.cgi?id=123189
347
348         Reviewed by Simon Fraser.
349
350         * index.html:
351         (TestResultsView._populateTestPane): Call _createTestResultHeader and _createTestResultRow with
352         a list of repository information.
353         (TestResultsView._createTestResultHeader): Optionally creates headers for a list of repositories.
354         (TestResultsView._createTestResultRow): Add a hyperlinked revision information for each builder.
355         Also add a hyperlink to file a Bugzilla bug when there is no bug associated with the test already.
356         * js/build.js:
357         (Build.formattedRevision): Extracted from Build.formattedRevisions.
358         (Build.formattedRevisions):
359
360 2013-10-22  Ryosuke Niwa  <rniwa@webkit.org>
361
362         Make tables on the new flakiness dashboard sortable
363         https://bugs.webkit.org/show_bug.cgi?id=123141
364
365         Reviewed by Simon Fraser.
366
367         Use jquery.tablesorter.js to make test and builder tables sortable. The jquery plugin is already used by run-perf-tests.
368
369         * index.html:
370         (TestResultsView._populateTestPane): Add tablesorter to the class name and wrap tr's inside a tbody so that tablesorter
371         could sort them.
372         (TestResultsView._populateBuilderPane): Ditto.
373         * main.css:
374         (.resultsTable thead): Use cursor: pointer to signify the fact it's clickable.
375         (.resultsTable th): Don't repeat arrows.
376         (.resultsTable th.headerSortUp): Inline SVG up arrow.
377         (.resultsTable th.headerSortDown): Inline SVG down arrow.
378
379 2013-10-21  Ryosuke Niwa  <rniwa@webkit.org>
380
381         New flakiness dashboard should hyperlink test names, WebKit revisions, and bubbles
382         https://bugs.webkit.org/show_bug.cgi?id=123134
383
384         Reviewed by Stephanie Lewis.
385
386         Copied admin.css, admin-header.php, admin-footer.php, builders.php, repositories.php from WebKit Perf Monitor.
387         (Unfortunately WebKit Perf Monitor hasn't been committed into WebKit repository just yet.)
388
389         Updated various parts of index.html to linkify test names, build numbers, and bubbles (to results page).
390
391         * admin/admin.css: Added.
392         * admin/builders.php: Added.
393         * admin/index.php: Removed the duplicated code now that it uses admin-header.php.
394         * admin/repositories.php: Added.
395         * api/manifest.php: Use camelCase for blame_url and build_url to be consistent with other JSON properties.
396         Also exported testCategories from config so that we can linkify test names in the dashboard.
397         * include/admin-footer.php: Added.
398         * include/admin-header.php: Added.
399         * include/config.json: Added test categories. This avoids hard-coding the URL to trac in php/js.
400         * include/init-database.sql: Added name and build_url to builders table and category to tests.
401         * include/test-results.php: Assume the test category to be LayoutTest for now.
402
403         * index.html:
404         (TestResultsView): Initialize _builders, _slaves, _repositories, _testCategories as dictionaries as intended.
405         (TestResultsView.setTestCategories): Added.
406         (TestResultsView._createResultCell): Dynamically resolve URLs of results page and and build page.
407         (TestResultsView._populateTestPane): Linkify the test name. Unfortunately we don't have a test object anywhere.
408         We need to figure out a way to find the test object here eventually. For now, hard-coding "LayoutTest" works.
409         (TestResultsView._linkifiedTestName): Added.
410         (TestResultsView._createBuildsAndComputeSlownessOfResults): Takes builderId to set "builder" property on each
411         result object as it's used by Build class.
412         (TestResultsView._populateBuilderPane):
413         (fetchManigest):
414
415         * js/build.js:
416         (Build.buildUrl): Support $builderName so that we don't have to keep repeating builder names in the database.
417         (Build.revision): Don't access [0] if revisions[repositoryId] was undefined.
418
419 2013-10-21  Ryosuke Niwa  <rniwa@webkit.org>
420
421         New flakiness dashboard should align results by revision numbers
422         https://bugs.webkit.org/show_bug.cgi?id=123129
423
424         Reviewed by Tim Horton.
425
426         * include/config.json: Specify the default cache time to be 10 minutes.
427         * include/json-shared.php: Added Expires and Cache-Control headers. It's configurable via config.json.
428         * index.html:
429         (TestResultsView._createResultCell): Don't put '-' in a result cell without time.
430         (TestResultsView._populateTestPane): Create an array of build times ordered from the newest to the oldest.
431         Not that build.time() is the newest commit time among all repository for each result. e.g. if we had
432         both WebKit and Safari repository information in a given result, the newer of the two will be used.
433         (TestResultsView._createTestResultHeader): Added.
434         (TestResultsView._createBuildsAndComputeSlownessOfResults): Extracted from _createTestResultRow so
435         that _populateTestPane could use Build object before calling _createTestResultRow.
436         (TestResultsView._createTestResultRow): Takes buildTimes. Insert an empty cell for a build time if
437         the current row doesn't contain that a result for that build time.
438         (TestResultsView._populateBuilderPane):
439         * main.css: Tweaked the style so that bubbles are aligned vertically without '-'.
440         (.resultsTable):
441         (.resultsTable thead th):
442         (.resultsTable .resultCell):
443         (.resultsTable a):
444         (.resultsTable span a):
445
446 2013-10-21  Ryosuke Niwa  <rniwa@webkit.org>
447
448         New flakiness dashboard show test time, modifiers, and flaky tests
449         https://bugs.webkit.org/show_bug.cgi?id=123119
450
451         Reviewed by Tim Horton.
452
453         * api/failing-tests.php: Manually serialize each row in the results to avoid hitting the memory limit.
454         * include/db.php:
455         (Database::query): Added.
456         (Database::fetch_next_row): Added.
457         * include/init-database.sql: Added modifiers and time columns to results table.
458         * include/test-results.php:
459         (store_test_results): Update start_time and end_time to the union of the new interval and the existing interval.
460         (recursively_add_test_results): Handle empty $full_name to eliminate the loop over tests in store_test_results.
461         Also verify that each test name, expected and actual results conform to the specific format to prevent XSS.
462         Also use insert_row instead of select_or_insert_row to avoid issuing an unnecessary SQL query.
463         (format_result): Extracted from format_result_rows. Used in failing-tests.php.
464         * index.html:
465         (TestResultsView): Added _currentBuilderFailureType and _currentBuilderDays.
466         (TestResultsView._createResultCell): Show the test time and the expected result.
467         (TestResultsView._createTestResultRow): Compute the slowest run and also round time to tenth of second for time
468         less than 10s or second if it's more than 10s so that the test time will always be shown in two digits.
469         Also show the bug number and the latest expected result on the left columns after linkifying the bug numbers. 
470         (TestResultsView._matchesFailureType): Added. Determines whether results is of a particular failure type.
471         (TestResultsView._populateBuilderPane):
472         (TestResultsView.fetchFailingTestsForBuilder): Store the failure type such as flaky, wrongtestexpectations.
473         (TestResultsView.updateLocationHash):
474         (TestResultsView.loadTestsFromLocationHash):
475         (fetchManifest):
476         * js/dom.js:
477         (element): appendChild if an item is a Node. Otherwise, e.g. integer, create a text node out of toString() call.
478         * main.css: Updated styles.
479
480 2013-10-18  Ryosuke Niwa  <rniwa@webkit.org>
481
482         New flakiness dashboard should support showing the failing tests per builder
483         https://bugs.webkit.org/show_bug.cgi?id=123011
484
485         Reviewed by Timothy Hatcher.
486
487         Added the feature. Also did some refactoring to add this feature.
488
489         * ChangeLog: Added.
490         * api/failing-tests.php: Added.
491         * api/manifest.php: Removed the code to make maps by id. The work is now done in index.html.
492         * api/results.php:
493         * common.css: Added. Extracted from index.html.
494         * include/test-results.php: Extracted parse_revisions_array and format_result_rows from results.php.
495         * index.html:
496         * main.css: Added.
497         (TestResultsView.setAvailableTests): Added.
498         (TestResultsView.showTooltip): Fixed the code to compute x and y coordinates of the tooltip to take
499         scrolled positions into account.
500         (TestResultsView._createTestResultRow): Extracted from _populateTestPane.
501         (TestResultsView.fetchTest): Added the code to show "Loading..." in the pane while loading the JSON.
502         (TestResultsView.fetchTests): Respect the doNotUpdateHash flag.
503         (TestResultsView._populateBuilderPane): Added.
504         (TestResultsView.fetchFailingTestsForBuilder): Added.
505         (TestResultsView.updateLocationHash): Serialize builder & builderDays.
506         (TestResultsView.locationHashChanged): Don't delete existing test panes since that's now done in
507         loadTestsFromLocationHash.
508         (TestResultsView.loadTestsFromLocationHash): Take care of both 'tests' and 'builder' components.
509         (fetchManifest): Setup the UI to select a builder.
510