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));
 }
Example #2
0
 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;
 }
Example #3
0
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());
}
Example #7
0
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;
}