function main($path) { if (count($path) != 1) { exit_with_error('InvalidRequest'); } $parts = explode('-', $path[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 * FROM test_configurations WHERE config_metric = $1 AND config_platform = $2', array($metric_id, $platform_id)); if (!$config_rows) { exit_with_error('ConfigurationNotFound'); } $test_group_id = array_get($_GET, 'testGroup'); $should_cache = array_get($_GET, 'cache'); if ($test_group_id) { $test_group_id = intval($test_group_id); } else { if ($should_cache) { // Only v1 UI needs caching. $maxage = config('jsonCacheMaxAge'); header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $maxage) . ' GMT'); header("Cache-Control: maxage={$maxage}"); } } $generator = new RunsGenerator($config_rows); foreach ($config_rows as $config) { if ($test_group_id) { $raw_runs = fetch_runs_for_config_and_test_group($db, $config, $test_group_id); } else { $raw_runs = fetch_runs_for_config($db, $config); } $generator->add_runs($config['config_type'], $raw_runs); } $content = success_json($generator->results()); if (!$test_group_id) { generate_data_file("{$platform_id}-{$metric_id}.json", $content); } echo $content; }
} return $formatted_runs; } date_default_timezone_set('UTC'); function parse_revisions_array($postgres_array) { global $repository_id_to_name; // 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 = strtotime(trim($name_and_revision[2], '"')) * 1000; $revisions[$repository_id_to_name[trim($name_and_revision[0], '"')]] = array(trim($name_and_revision[1], '"'), $time); } return $revisions; } function format_run($run) { return array('mean' => floatval($run['run_mean_cache']), 'iterationCount' => intval($run['run_iteration_count_cache']), 'sum' => floatval($run['run_sum_cache']), 'squareSum' => floatval($run['run_square_sum_cache']), 'revisions' => parse_revisions_array($run['revisions']), 'buildTime' => strtotime($run['build_time']) * 1000, 'buildNumber' => intval($run['build_number']), 'builder' => $run['build_builder']); } $results = array(); foreach ($config_rows as $config) { if ($runs = fetch_runs_for_config($db, $config)) { $results[$config['config_type']] = $runs; } } exit_with_success($results);