New perf dashboard should provide UI to create a new analysis task
[WebKit-https.git] / Websites / perf.webkit.org / public / api / analysis-tasks.php
1 <?php
2
3 require('../include/json-header.php');
4
5 function main($path) {
6     $db = new Database;
7     if (!$db->connect())
8         exit_with_error('DatabaseConnectionFailure');
9
10     if (count($path) > 1)
11         exit_with_error('InvalidRequest');
12
13     if (count($path) > 0 && $path[0]) {
14         $task_id = intval($path[0]);
15         $task = $db->select_first_row('analysis_tasks', 'task', array('id' => $task_id));
16         if (!$task)
17             exit_with_error('TaskNotFound', array('id' => $task_id));
18         $tasks = array($task);
19     } else {
20         $metric_id = array_get($_GET, 'metric');
21         $platform_id = array_get($_GET, 'platform');
22         if (!!$metric_id != !!$platform_id)
23             exit_with_error('InvalidArguments', array('metricId' => $metric_id, 'platformId' => $platform_id));
24
25         if ($metric_id)
26             $tasks = $db->select_rows('analysis_tasks', 'task', array('platform' => $platform_id, 'metric' => $metric_id));
27         else {
28             // FIXME: Limit the number of tasks we fetch.
29             $tasks = array_reverse($db->fetch_table('analysis_tasks', 'task_created_at'));
30         }
31
32         if (!is_array($tasks))
33             exit_with_error('FailedToFetchTasks');
34     }
35
36     $tasks = array_map("format_task", $tasks);
37     $bugs = fetch_and_push_bugs_to_tasks($db, $tasks);
38
39     exit_with_success(array('analysisTasks' => $tasks, 'bugs' => $bugs));
40 }
41
42 function fetch_and_push_bugs_to_tasks($db, &$tasks) {
43     $task_ids = array();
44     $task_by_id = array();
45     foreach ($tasks as &$task) {
46         array_push($task_ids, $task['id']);
47         $task_by_id[$task['id']] = &$task;
48     }
49
50     $bugs = $db->query_and_fetch_all('SELECT bug_id AS "id", bug_task AS "task", bug_tracker AS "bugTracker", bug_number AS "number"
51         FROM bugs WHERE bug_task = ANY ($1)', array('{' . implode(', ', $task_ids) . '}'));
52     if (!is_array($bugs))
53         exit_with_error('FailedToFetchBugs');
54
55     foreach ($bugs as $bug) {
56         $associated_task = &$task_by_id[$bug['task']];
57         array_push($associated_task['bugs'], $bug['id']);
58     }
59
60     return $bugs;
61 }
62
63 date_default_timezone_set('UTC');
64 function format_task($task_row) {
65     return array(
66         'id' => $task_row['task_id'],
67         'name' => $task_row['task_name'],
68         'author' => $task_row['task_author'],
69         'createdAt' => strtotime($task_row['task_created_at']) * 1000,
70         'platform' => $task_row['task_platform'],
71         'metric' => $task_row['task_metric'],
72         'startRun' => $task_row['task_start_run'],
73         'endRun' => $task_row['task_end_run'],
74         'bugs' => array(),
75     );
76 }
77
78 main(array_key_exists('PATH_INFO', $_SERVER) ? explode('/', trim($_SERVER['PATH_INFO'], '/')) : array());
79
80 ?>