2013-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        Make new bug link in flakiness dashboard configurable
        https://bugs.webkit.org/show_bug.cgi?id=123386

        Reviewed by Alexey Proskuryakov.

        * config.json: Added Bugzilla as the default destination for new bugs.
        * public/api/manifest.php: Include newBugLinks in the manifest.
        * public/index.html:
        (TestResultsView): Initialize _newBugLinks.
        (TestResultsView.setNewBugLinks): Added.
        (TestResultsView._populateTestPane):
        (TestResultsView._createTestResultRow): Replaced the hard-coded Bugzilla URL by the code
        to generate hyper-links based on _newBugLinks. Also added a nullity check while formatting
        revision checks so that we don't blow up when some build doesn't contain all revision info.
        (TestResultsView._populateBuilderPane):

2013-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        New flakiness dashboard should support substring matching
        https://bugs.webkit.org/show_bug.cgi?id=123393

        Reviewed by Alexey Proskuryakov.

        Addressed the use cases by
        1. Always showing the candidate even when there is exactly one test matching the current value.
        2. Adding all tests that match the current value upon the user pressing enter key.

        * public/index.html:
        (fetchManifest): Add all tests that match the current value. Confirm whether the user really
        want to add all the tests when there are more than 15 tests to add.
        * public/js/autocompleter.js:
        (Autocompleter.prototype.filterCandidates): Extracted from _updateCandidates.
        (Autocompleter.prototype._updateCandidates): Show the candidate window even when there is
        exactly one test that matches the criteria so that the user can select this test.

2013-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        New flakiness dashboard shouldn't treat tests with right expectations as failing
        https://bugs.webkit.org/show_bug.cgi?id=123385

        Reviewed by Alexey Proskuryakov.

        We define failing tests to be tests with wrong expectations whose actual results are not PASS
        since tests with TEXT, IMAGE, etc... failures do not turn the bots red as long as the expectation
        of the same type is specified in TestExpectation files.

        * public/include/test-results.php:
        (FailingResultsJSONWriter): Inherit from WrongExpectationsResultsJSONWriter.

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. The query results weren't sorted by the latest commit time,
        yielding wrong set of tests to be listed in the builder pane.

        * public/include/test-results.php:

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Links in new flakiness dashboard could benefit from tooltips
        https://bugs.webkit.org/show_bug.cgi?id=123381

        Reviewed by Alexey Proskuryakov.

        Add title content attribute on each hyperlink in the builder pane.

        * public/index.html:
        (TestResultsView._populateBuilderPane):

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Commit the right change.

        * public/index.html:

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        The new flakiness dashboard should sort builder and test names
        https://bugs.webkit.org/show_bug.cgi?id=123363

        Reviewed by Simon Fraser.

        Sort the forgotten builders in the menu.

        * public/index.html:

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        The new flakiness dashboard should sort builder and test names
        https://bugs.webkit.org/show_bug.cgi?id=123363

        Reviewed by Simon Fraser.

        Sort builders and tests by their name in each pane.

        * public/index.html:
        (TestResultsView._populateTestPane): Lexicologically sort builders by their name.
        (TestResultsView._sortObjectsByName): Added.
        (TestResultsView._populateBuilderPane): Lexicologically sort builders by their name.

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Merge revision columns in flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=123360

        Reviewed by Simon Fraser.

        Merge revision numbers into one cell separated by /, and clearly label them as "latest revisions".
        Also add colors for missing & audio failures so that they won't be an empty cell.

        * public/index.html:
        (TestResultsView._createTestResultHeader): Create a single th for the list of repository names.
        (TestResultsView._createTestResultRow): Use single td for all revision numbers.
        * public/js/build.js:
        (.this.formattedRevision): Don't prefix revision numbers with '@' when we're not in the tooltip.
        * public/main.css:
        (.resultsTable .AUDIO a): Added.
        (.resultsTable .MISSING a): Added.

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        One more build fix. Put each latest revision information in an actual td.

        * public/index.html:

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another set of build fixes.

        1. Manually strip / from revisions JSON if there is any.
        2. Suppress warnings from ob_end_flush.
        3. Allow "+" in actual and expected results as used in "TEXT+IMAGE".

        * public/api/report.php:
        * public/include/test-results.php:

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix. Move .htaccess to public.

        * .htaccess: Removed.
        * public/.htaccess: Copied from .htaccess.

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        It turns out that the current instruction only works on Mountain Lion.

        Also fixed some typos.

        * Install.md:

2013-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Add an instruction on how to setup test-results app
        https://bugs.webkit.org/show_bug.cgi?id=123321

        Rubber-stamped by Stephanie Lewis.

        Added Install.md and updated config.json accordingly.

        Also moved init-database.sql out of public/include since it doesn't need to be accessible via httpd.

        * Install.md: Added.
        * config.json:
        * init-database.sql: Moved from public/include/init-database.sql.

2013-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Move everything except ChangeLog and config.json into public directory.
        https://bugs.webkit.org/show_bug.cgi?id=123319

        Rubber-stamped by Stephanie Lewis.

        * admin: Removed.
        * admin/admin.css: Removed.
        * admin/builders.php: Removed.
        * admin/index.php: Removed.
        * admin/repositories.php: Removed.
        * api: Removed.
        * api/failing-tests.php: Removed.
        * api/manifest.php: Removed.
        * api/report.php: Removed.
        * api/results.php: Removed.
        * common.css: Removed.
        * config.json: Copied from include/config.json.
        * include: Removed.
        * include/admin-footer.php: Removed.
        * include/admin-header.php: Removed.
        * include/config.json: Removed.
        * include/db.php: Removed.
        * include/init-database.sql: Removed.
        * include/json-shared.php: Removed.
        * include/test-results.php: Removed.
        * index.html: Removed.
        * js: Removed.
        * js/autocompleter.js: Removed.
        * js/build.js: Removed.
        * js/dom.js: Removed.
        * main.css: Removed.
        * public: Added.
        * public/admin: Copied from admin.
        * public/api: Copied from api.
        * public/common.css: Copied from common.css.
        * public/include: Copied from include.
        * public/include/config.json: Removed.
        * public/include/db.php:
        * public/index.html: Copied from index.html.
        * public/js: Copied from js.
        * public/main.css: Copied from main.css.

2013-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        Showing lists of flaky tests for a builder takes too long
        https://bugs.webkit.org/show_bug.cgi?id=123311

        Reviewed by Sam Weinig.

        Generate JSONs for tests failing, flaky, or with wrong expectation at the time a builder reports results
        instead when the frontend requests to those those results since it takes multiple seconds or minutes to
        generate those JSON files.

        * api/failing-tests.php: Moved and renamed to manually generate all JSON files for a given builder.
        (main):

        * api/report.php: Manually flush and end the request (to avoid blocking run-webkit-tests on the other side
        for minutes), then generate JSONs for tests that are failing, are flaky, and have wrong expectations.

        * api/results.php: Merge format_result_rows here since it's not used anywhere else.

        * include/config.json: Added the path to the data directory into which JSON files are generated.

        * include/db.php:
        (configPath): Takes a relative path value from config.json, and resolves it.

        * include/json-shared.php:
        (echo_success): Extracted from exit_with_success.
        (exit_with_success):

        * include/test-results.php:
        (add_builder): Extracted from add_build.
        (add_build):
        (ResultsJSONWriter): Extracted from api/failing-tests.php.
        (ResultsJSONWriter.__construct):
        (ResultsJSONWriter.start):
        (ResultsJSONWriter.end):
        (ResultsJSONWriter.add_results_for_test_if_matches):
        (ResultsJSONWriter.pass_for_failure_type):
        (FailingResultsJSONWriter): Extracted from index.html's TestResultsView._matchesFailureType.
        (FailingResultsJSONWriter.__construct):
        (FailingResultsJSONWriter.pass_for_failure_type):
        (FlakyResultsJSONWriter): Ditto.
        (FlakyResultsJSONWriter.__construct):
        (FlakyResultsJSONWriter.pass_for_failure_type):
        (WrongExpectationsResultsJSONWriter): Ditto.
        (WrongExpectationsResultsJSONWriter.__construct):
        (WrongExpectationsResultsJSONWriter.pass_for_failure_type):
        (ResultsJSONGenerator): Ditto.
        (ResultsJSONGenerator.__construct):
        (ResultsJSONGenerator.generate):
        (ResultsJSONGenerator.open_json_for_failure_type):
        (ResultsJSONGenerator.write_jsons):

        * index.html:
        (TestResultsView):
        (TestResultsView.setBuilders):
        (TestResultsView._createResultCell): Add a hyperlink to results.html in the tooltip.
        (TestResultsView.fetchFailingTestsForBuilder): Fetch the generated JSON files.

2013-10-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reverted erroneously committed changes from the previous commit.

        * index.html:

2013-10-23  Ryosuke Niwa  <rniwa@webkit.org>

        Clicking on a test name on the new flakiness dashboard should add a new test pane
        https://bugs.webkit.org/show_bug.cgi?id=123194

        Reviewed by Simon Fraser.

        Added a new click handler on each test name inside the builder test view add a new test pane.
        Moved the old trac link to a right-arrow inline SVG icon.

        Also tweaked the style so that the builder test view looks different from other test panes.

        * index.html:
        (TestResultsView._urlFromTest): Extracted from TestResultsView._linkifiedTestName.
        (TestResultsView._populateBuilderPane): Fetch the test when its name is clicked.
        Added a circled right arrow for the old trac link.
        * main.css: Tweaked the style to move the rounded border around the builder test view to be
        around the form controls to clearly differentiate it from a regular test pane.

2013-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        New flakiness dashboard's test pane should show the latest WebKit revision for each builder
        https://bugs.webkit.org/show_bug.cgi?id=123189

        Reviewed by Simon Fraser.

        * index.html:
        (TestResultsView._populateTestPane): Call _createTestResultHeader and _createTestResultRow with
        a list of repository information.
        (TestResultsView._createTestResultHeader): Optionally creates headers for a list of repositories.
        (TestResultsView._createTestResultRow): Add a hyperlinked revision information for each builder.
        Also add a hyperlink to file a Bugzilla bug when there is no bug associated with the test already.
        * js/build.js:
        (Build.formattedRevision): Extracted from Build.formattedRevisions.
        (Build.formattedRevisions):

2013-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        Make tables on the new flakiness dashboard sortable
        https://bugs.webkit.org/show_bug.cgi?id=123141

        Reviewed by Simon Fraser.

        Use jquery.tablesorter.js to make test and builder tables sortable. The jquery plugin is already used by run-perf-tests.

        * index.html:
        (TestResultsView._populateTestPane): Add tablesorter to the class name and wrap tr's inside a tbody so that tablesorter
        could sort them.
        (TestResultsView._populateBuilderPane): Ditto.
        * main.css:
        (.resultsTable thead): Use cursor: pointer to signify the fact it's clickable.
        (.resultsTable th): Don't repeat arrows.
        (.resultsTable th.headerSortUp): Inline SVG up arrow.
        (.resultsTable th.headerSortDown): Inline SVG down arrow.

2013-10-21  Ryosuke Niwa  <rniwa@webkit.org>

        New flakiness dashboard should hyperlink test names, WebKit revisions, and bubbles
        https://bugs.webkit.org/show_bug.cgi?id=123134

        Reviewed by Stephanie Lewis.

        Copied admin.css, admin-header.php, admin-footer.php, builders.php, repositories.php from WebKit Perf Monitor.
        (Unfortunately WebKit Perf Monitor hasn't been committed into WebKit repository just yet.)

        Updated various parts of index.html to linkify test names, build numbers, and bubbles (to results page).

        * admin/admin.css: Added.
        * admin/builders.php: Added.
        * admin/index.php: Removed the duplicated code now that it uses admin-header.php.
        * admin/repositories.php: Added.
        * api/manifest.php: Use camelCase for blame_url and build_url to be consistent with other JSON properties.
        Also exported testCategories from config so that we can linkify test names in the dashboard.
        * include/admin-footer.php: Added.
        * include/admin-header.php: Added.
        * include/config.json: Added test categories. This avoids hard-coding the URL to trac in php/js.
        * include/init-database.sql: Added name and build_url to builders table and category to tests.
        * include/test-results.php: Assume the test category to be LayoutTest for now.

        * index.html:
        (TestResultsView): Initialize _builders, _slaves, _repositories, _testCategories as dictionaries as intended.
        (TestResultsView.setTestCategories): Added.
        (TestResultsView._createResultCell): Dynamically resolve URLs of results page and and build page.
        (TestResultsView._populateTestPane): Linkify the test name. Unfortunately we don't have a test object anywhere.
        We need to figure out a way to find the test object here eventually. For now, hard-coding "LayoutTest" works.
        (TestResultsView._linkifiedTestName): Added.
        (TestResultsView._createBuildsAndComputeSlownessOfResults): Takes builderId to set "builder" property on each
        result object as it's used by Build class.
        (TestResultsView._populateBuilderPane):
        (fetchManigest):

        * js/build.js:
        (Build.buildUrl): Support $builderName so that we don't have to keep repeating builder names in the database.
        (Build.revision): Don't access [0] if revisions[repositoryId] was undefined.

2013-10-21  Ryosuke Niwa  <rniwa@webkit.org>

        New flakiness dashboard should align results by revision numbers
        https://bugs.webkit.org/show_bug.cgi?id=123129

        Reviewed by Tim Horton.

        * include/config.json: Specify the default cache time to be 10 minutes.
        * include/json-shared.php: Added Expires and Cache-Control headers. It's configurable via config.json.
        * index.html:
        (TestResultsView._createResultCell): Don't put '-' in a result cell without time.
        (TestResultsView._populateTestPane): Create an array of build times ordered from the newest to the oldest.
        Not that build.time() is the newest commit time among all repository for each result. e.g. if we had
        both WebKit and Safari repository information in a given result, the newer of the two will be used.
        (TestResultsView._createTestResultHeader): Added.
        (TestResultsView._createBuildsAndComputeSlownessOfResults): Extracted from _createTestResultRow so
        that _populateTestPane could use Build object before calling _createTestResultRow.
        (TestResultsView._createTestResultRow): Takes buildTimes. Insert an empty cell for a build time if
        the current row doesn't contain that a result for that build time.
        (TestResultsView._populateBuilderPane):
        * main.css: Tweaked the style so that bubbles are aligned vertically without '-'.
        (.resultsTable):
        (.resultsTable thead th):
        (.resultsTable .resultCell):
        (.resultsTable a):
        (.resultsTable span a):

2013-10-21  Ryosuke Niwa  <rniwa@webkit.org>

        New flakiness dashboard show test time, modifiers, and flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=123119

        Reviewed by Tim Horton.

        * api/failing-tests.php: Manually serialize each row in the results to avoid hitting the memory limit.
        * include/db.php:
        (Database::query): Added.
        (Database::fetch_next_row): Added.
        * include/init-database.sql: Added modifiers and time columns to results table.
        * include/test-results.php:
        (store_test_results): Update start_time and end_time to the union of the new interval and the existing interval.
        (recursively_add_test_results): Handle empty $full_name to eliminate the loop over tests in store_test_results.
        Also verify that each test name, expected and actual results conform to the specific format to prevent XSS.
        Also use insert_row instead of select_or_insert_row to avoid issuing an unnecessary SQL query.
        (format_result): Extracted from format_result_rows. Used in failing-tests.php.
        * index.html:
        (TestResultsView): Added _currentBuilderFailureType and _currentBuilderDays.
        (TestResultsView._createResultCell): Show the test time and the expected result.
        (TestResultsView._createTestResultRow): Compute the slowest run and also round time to tenth of second for time
        less than 10s or second if it's more than 10s so that the test time will always be shown in two digits.
        Also show the bug number and the latest expected result on the left columns after linkifying the bug numbers. 
        (TestResultsView._matchesFailureType): Added. Determines whether results is of a particular failure type.
        (TestResultsView._populateBuilderPane):
        (TestResultsView.fetchFailingTestsForBuilder): Store the failure type such as flaky, wrongtestexpectations.
        (TestResultsView.updateLocationHash):
        (TestResultsView.loadTestsFromLocationHash):
        (fetchManifest):
        * js/dom.js:
        (element): appendChild if an item is a Node. Otherwise, e.g. integer, create a text node out of toString() call.
        * main.css: Updated styles.

2013-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        New flakiness dashboard should support showing the failing tests per builder
        https://bugs.webkit.org/show_bug.cgi?id=123011

        Reviewed by Timothy Hatcher.

        Added the feature. Also did some refactoring to add this feature.

        * ChangeLog: Added.
        * api/failing-tests.php: Added.
        * api/manifest.php: Removed the code to make maps by id. The work is now done in index.html.
        * api/results.php:
        * common.css: Added. Extracted from index.html.
        * include/test-results.php: Extracted parse_revisions_array and format_result_rows from results.php.
        * index.html:
        * main.css: Added.
        (TestResultsView.setAvailableTests): Added.
        (TestResultsView.showTooltip): Fixed the code to compute x and y coordinates of the tooltip to take
        scrolled positions into account.
        (TestResultsView._createTestResultRow): Extracted from _populateTestPane.
        (TestResultsView.fetchTest): Added the code to show "Loading..." in the pane while loading the JSON.
        (TestResultsView.fetchTests): Respect the doNotUpdateHash flag.
        (TestResultsView._populateBuilderPane): Added.
        (TestResultsView.fetchFailingTestsForBuilder): Added.
        (TestResultsView.updateLocationHash): Serialize builder & builderDays.
        (TestResultsView.locationHashChanged): Don't delete existing test panes since that's now done in
        loadTestsFromLocationHash.
        (TestResultsView.loadTestsFromLocationHash): Take care of both 'tests' and 'builder' components.
        (fetchManifest): Setup the UI to select a builder.

