function main($path)
{
    $db = new Database();
    if (!$db->connect()) {
        exit_with_error('DatabaseConnectionFailure');
    }
    if (count($path) > 1) {
        exit_with_error('InvalidRequest');
    }
    $build_request_id = array_get($_GET, 'buildRequest');
    $task_id = count($path) > 0 && $path[0] ? $path[0] : array_get($_GET, 'id');
    if ($build_request_id) {
        $tasks = $db->query_and_fetch_all('SELECT analysis_tasks.* FROM build_requests, analysis_test_groups, analysis_tasks
            WHERE request_id = $1 AND request_group = testgroup_id AND testgroup_task = task_id', array(intval($build_request_id)));
        if (!$tasks) {
            exit_with_error('TaskNotFound', array('buildRequest' => $build_request_id));
        }
    } else {
        if ($task_id) {
            $task_id = intval($task_id);
            $task = $db->select_first_row('analysis_tasks', 'task', array('id' => $task_id));
            if (!$task) {
                exit_with_error('TaskNotFound', array('id' => $task_id));
            }
            $tasks = array($task);
        } else {
            $metric_id = array_get($_GET, 'metric');
            $platform_id = array_get($_GET, 'platform');
            if (!!$metric_id != !!$platform_id) {
                exit_with_error('InvalidArguments', array('metricId' => $metric_id, 'platformId' => $platform_id));
            }
            if ($metric_id) {
                $tasks = $db->select_rows('analysis_tasks', 'task', array('platform' => $platform_id, 'metric' => $metric_id));
            } else {
                // FIXME: Limit the number of tasks we fetch.
                $tasks = array_reverse($db->fetch_table('analysis_tasks', 'task_created_at'));
            }
            if (!is_array($tasks)) {
                exit_with_error('FailedToFetchTasks');
            }
        }
    }
    $tasks = array_map("format_task", $tasks);
    $bugs = fetch_and_push_bugs_to_tasks($db, $tasks);
    exit_with_success(array('analysisTasks' => $tasks, 'bugs' => $bugs));
}
Example #2
0
if (count($parts) != 2) {
    exit_with_error('InvalidRequest');
}
$db = new Database();
if (!$db->connect()) {
    exit_with_error('DatabaseConnectionFailure');
}
$platform_id = intval($parts[0]);
$metric_id = intval($parts[1]);
$config_rows = $db->query_and_fetch_all('SELECT config_id, config_type, config_platform, config_metric
    FROM test_configurations WHERE config_metric = $1 AND config_platform = $2', array($metric_id, $platform_id));
if (!$config_rows) {
    exit_with_error('ConfigurationNotFound');
}
$repository_id_to_name = array();
if ($repository_table = $db->fetch_table('repositories')) {
    foreach ($repository_table as $repository) {
        $repository_id_to_name[$repository['repository_id']] = $repository['repository_name'];
    }
}
function fetch_runs_for_config($db, $config)
{
    $raw_runs = $db->query_and_fetch_all('
    SELECT test_runs.*, builds.*, array_agg((revision_repository, revision_value, revision_time)) AS revisions
        FROM builds LEFT OUTER JOIN build_revisions ON revision_build = build_id, test_runs
        WHERE run_build = build_id AND run_config = $1
        GROUP BY build_id, build_builder, build_number, build_time, build_latest_revision,
            run_id, run_config, run_build, run_iteration_count_cache,
            run_mean_cache, run_sum_cache, run_square_sum_cache
        ORDER BY build_latest_revision, build_time', array($config['config_id']));
    $formatted_runs = array();