private function fetch_roots_for_set_if_needed($root_set_id, $resolve_ids) { if (array_key_exists($root_set_id, $this->root_sets_by_id)) { return; } $root_rows = $this->db->query_and_fetch_all('SELECT * FROM roots, commits LEFT OUTER JOIN repositories ON commit_repository = repository_id WHERE root_commit = commit_id AND root_set = $1', array($root_set_id)); $root_ids = array(); foreach ($root_rows as $row) { $repository = $row['repository_id']; $revision = $row['commit_revision']; $commit_time = $row['commit_time']; $root_id = $root_set_id . '-' . $repository; array_push($root_ids, $root_id); $repository_id = $resolve_ids ? $row['repository_name'] : $row['repository_id']; array_push($this->roots, array('id' => $root_id, 'repository' => $repository_id, 'revision' => $revision, 'time' => Database::to_js_time($commit_time))); } $this->root_sets_by_id[$root_set_id] = TRUE; array_push($this->root_sets, array('id' => $root_set_id, 'roots' => $root_ids)); }
private static function parse_revisions_array($postgres_array) { // e.g. {"(WebKit,131456,\"2012-10-16 14:53:00\")","(Chromium,162004,)"} $outer_array = json_decode('[' . trim($postgres_array, '{}') . ']'); $revisions = array(); foreach ($outer_array as $item) { $name_and_revision = explode(',', trim($item, '()')); if (!$name_and_revision[0]) { continue; } $time = Database::to_js_time(trim($name_and_revision[2], '"')); $revisions[trim($name_and_revision[0], '"')] = array(trim($name_and_revision[1], '"'), $time); } return $revisions; }
function format_commit($commit_row, $committer_row) { return array('id' => $commit_row['commit_id'], 'revision' => $commit_row['commit_revision'], 'parent' => $commit_row['commit_parent'], 'time' => Database::to_js_time($commit_row['commit_time']), 'authorName' => $committer_row ? $committer_row['committer_name'] : null, 'authorEmail' => $committer_row ? $committer_row['committer_account'] : null, 'message' => $commit_row['commit_message']); }
function format_measurement($row) { $build_id = $row['build_id']; return array(intval($row['run_id']), floatval($row['run_mean_cache']), intval($row['run_iteration_count_cache']), floatval($row['run_sum_cache']), floatval($row['run_square_sum_cache']), $this->build_to_commits[$build_id], intval($build_id), Database::to_js_time($row['build_time']), $row['build_number'], intval($row['build_builder']), intval($row['config_metric']), $row['config_type']); }
function format_task($task_row) { return array('id' => $task_row['task_id'], 'name' => $task_row['task_name'], 'author' => $task_row['task_author'], 'segmentationStrategy' => $task_row['task_segmentation'], 'testRangeStragegy' => $task_row['task_test_range'], 'createdAt' => strtotime($task_row['task_created_at']) * 1000, 'platform' => $task_row['task_platform'], 'metric' => $task_row['task_metric'], 'startRun' => $task_row['task_start_run'], 'startRunTime' => Database::to_js_time($task_row['task_start_run_time']), 'endRun' => $task_row['task_end_run'], 'endRunTime' => Database::to_js_time($task_row['task_end_run_time']), 'result' => $task_row['task_result'], 'needed' => $task_row['task_needed'] ? Database::is_true($task_row['task_needed']) : null, 'bugs' => array(), 'causes' => array(), 'fixes' => array()); }
function format_task($task_row) { $category = 'unconfirmed'; $result = $task_row['task_result']; if ($result == 'unchanged' || $result == 'inconclusive') { $category = 'closed'; } else { if ($result) { $category = 'bisecting'; } } return array('id' => $task_row['task_id'], 'name' => $task_row['task_name'], 'author' => $task_row['task_author'], 'segmentationStrategy' => $task_row['task_segmentation'], 'testRangeStragegy' => $task_row['task_test_range'], 'createdAt' => strtotime($task_row['task_created_at']) * 1000, 'platform' => $task_row['task_platform'], 'metric' => $task_row['task_metric'], 'startRun' => $task_row['task_start_run'], 'startRunTime' => Database::to_js_time($task_row['task_start_run_time']), 'endRun' => $task_row['task_end_run'], 'endRunTime' => Database::to_js_time($task_row['task_end_run_time']), 'category' => $category, 'result' => $result, 'needed' => $task_row['task_needed'] ? Database::is_true($task_row['task_needed']) : null, 'bugs' => array()); }
function fetch_and_push_bugs_to_tasks($db, &$tasks) { $task_ids = array(); $task_by_id = array(); foreach ($tasks as &$task) { array_push($task_ids, $task['id']); $task_by_id[$task['id']] =& $task; } $bugs = $db->query_and_fetch_all('SELECT bug_id AS "id", bug_task AS "task", bug_tracker AS "bugTracker", bug_number AS "number" FROM bugs WHERE bug_task = ANY ($1)', array('{' . implode(', ', $task_ids) . '}')); if (!is_array($bugs)) { exit_with_error('FailedToFetchBugs'); } foreach ($bugs as $bug) { $associated_task =& $task_by_id[$bug['task']]; array_push($associated_task['bugs'], $bug['id']); } $task_build_counts = $db->query_and_fetch_all('SELECT testgroup_task AS "task", count(testgroup_id) as "total", sum(case when request_status = \'failed\' or request_status = \'completed\' then 1 else 0 end) as "finished" FROM analysis_test_groups, build_requests WHERE request_group = testgroup_id AND testgroup_task = ANY($1) GROUP BY testgroup_task', array('{' . implode(', ', $task_ids) . '}')); if (!is_array($task_build_counts)) { exit_with_error('FailedToFetchTestGroups'); } foreach ($task_build_counts as $build_count) { $task =& $task_by_id[$build_count['task']]; $task['buildRequestCount'] = $build_count['total']; $task['finishedBuildRequestCount'] = $build_count['finished']; } $run_ids = array(); $task_by_run = array(); foreach ($tasks as &$task) { if ($task['startRun']) { array_push($run_ids, $task['startRun']); $task_by_run[$task['startRun']] =& $task; } if ($task['endRun']) { array_push($run_ids, $task['endRun']); $task_by_run[$task['endRun']] =& $task; } } // FIXME: This query is quite expensive. We may need to store this directly in analysis_tasks table instead. $build_revision_times = $db->query_and_fetch_all('SELECT run_id, build_time, max(commit_time) AS revision_time FROM builds LEFT OUTER JOIN build_commits ON commit_build = build_id LEFT OUTER JOIN commits ON build_commit = commit_id, test_runs WHERE run_build = build_id AND run_id = ANY($1) GROUP BY build_id, run_id', array('{' . implode(', ', $run_ids) . '}')); foreach ($build_revision_times as &$row) { $time = $row['revision_time'] or $row['build_time']; $id = $row['run_id']; if ($task_by_run[$id]['startRun'] == $id) { $task_by_run[$id]['startRunTime'] = Database::to_js_time($time); } if ($task_by_run[$id]['endRun'] == $id) { $task_by_run[$id]['endRunTime'] = Database::to_js_time($time); } } return $bugs; }