New perf dashboard should provide UI to create a new analysis task
[WebKit-https.git] / Websites / perf.webkit.org / public / api / analysis-tasks.php
index abf0117..82c9cda 100644 (file)
@@ -17,13 +17,47 @@ function main($path) {
             exit_with_error('TaskNotFound', array('id' => $task_id));
         $tasks = array($task);
     } else {
-        // FIXME: Limit the number of tasks we fetch.
-        $tasks = array_reverse($db->fetch_table('analysis_tasks', 'task_created_at'));
+        $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');
     }
 
-    exit_with_success(array('analysisTasks' => array_map("format_task", $tasks)));
+    $tasks = array_map("format_task", $tasks);
+    $bugs = fetch_and_push_bugs_to_tasks($db, $tasks);
+
+    exit_with_success(array('analysisTasks' => $tasks, 'bugs' => $bugs));
+}
+
+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']);
+    }
+
+    return $bugs;
 }
 
 date_default_timezone_set('UTC');
@@ -37,6 +71,7 @@ function format_task($task_row) {
         'metric' => $task_row['task_metric'],
         'startRun' => $task_row['task_start_run'],
         'endRun' => $task_row['task_end_run'],
+        'bugs' => array(),
     );
 }