New flakiness dashboard should generate JSON in the background process
[WebKit-https.git] / Websites / test-results / public / include / test-results.php
index 5d71f20..5100603 100644 (file)
@@ -15,8 +15,8 @@ function add_builder($db, $master, $builder_name) {
     return $db->select_or_insert_row('builders', NULL, array('master' => $master, 'name' => $builder_name));
 }
 
-function add_build($db, $builder_id, $build_number) {
-    return $db->select_or_insert_row('builds', NULL, array('builder' => $builder_id, 'number' => $build_number));
+function add_build($db, $builder_id, $build_number, $slave_id) {
+    return $db->select_or_insert_row('builds', NULL, array('builder' => $builder_id, 'number' => $build_number, 'slave' => $slave_id));
 }
 
 function add_slave($db, $name) {
@@ -34,15 +34,15 @@ function fetch_and_parse_test_results_json($url, $jsonp = FALSE) {
     return json_decode($json_contents, true);
 }
 
-function store_test_results($db, $test_results, $build_id, $start_time, $end_time, $slave_id) {
+function store_test_results($db, $test_results, $build_id, $start_time, $end_time) {
     $db->begin_transaction();
 
     try {
         recursively_add_test_results($db, $build_id, $test_results['tests'], '');
 
         $db->query_and_get_affected_rows(
-            'UPDATE builds SET (start_time, end_time, slave) = (least($1, start_time), greatest($2, end_time), $3) WHERE id = $4',
-            array($start_time->format('Y-m-d H:i:s.u'), $end_time->format('Y-m-d H:i:s.u'), $slave_id, $build_id));
+            'UPDATE builds SET (start_time, end_time, is_processed) = (least($1, start_time), greatest($2, end_time), FALSE) WHERE id = $3',
+            array($start_time->format('Y-m-d H:i:s.u'), $end_time->format('Y-m-d H:i:s.u'), $build_id));
         $db->commit_transaction();
     } catch (Exception $e) {
         $db->rollback_transaction();
@@ -171,7 +171,7 @@ class ResultsJSONGenerator {
         }
 
         if (!$test_rows)
-            return FALSE;
+            return TRUE;
 
         $comma_separated_test_ids = '';
         foreach ($test_rows as $row) {
@@ -182,13 +182,12 @@ class ResultsJSONGenerator {
 
         $all_results = $this->db->query(
         "SELECT results.*, builds.* FROM results
-            JOIN (SELECT builds.*, array_agg((build_revisions.repository, build_revisions.value, build_revisions.time)) AS revisions,
-                    max(build_revisions.time) AS latest_revision_time
+            JOIN (SELECT builds.*, array_agg((build_revisions.repository, build_revisions.value, build_revisions.time)) AS revisions
                     FROM builds, build_revisions
                     WHERE build_revisions.build = builds.id AND builds.builder = $1
                     GROUP BY builds.id LIMIT 500) as builds ON results.build = builds.id
             WHERE results.test in ($comma_separated_test_ids)
-            ORDER BY results.test, latest_revision_time DESC", array($this->builder_id));
+            ORDER BY results.test DESC", array($this->builder_id));
         if (!$all_results)
             return FALSE;
 
@@ -246,7 +245,9 @@ function update_flakiness_for_build($db, $preceeding_build, $current_build, $suc
         SET is_flaky = preceeding_results.actual = succeeding_results.actual AND preceeding_results.actual != results.actual
         FROM results preceeding_results, results succeeding_results
         WHERE preceeding_results.build = $1 AND results.build = $2 AND succeeding_results.build = $3
-            AND preceeding_results.test = results.test AND succeeding_results.test = results.test",
+            AND preceeding_results.test = results.test AND succeeding_results.test = results.test
+            AND (results.is_flaky IS NULL OR results.is_flaky !=
+                    (preceeding_results.actual = succeeding_results.actual AND preceeding_results.actual != results.actual))",
             array($preceeding_build['id'], $current_build['id'], $succeeding_build['id']));
 }