Introduce the concept of analysis task to perf dashboard
[WebKit-https.git] / Websites / perf.webkit.org / public / privileged-api / create-analysis-task.php
1 <?php
2
3 require_once('../include/json-header.php');
4
5 function main() {
6     $data = ensure_privileged_api_data_and_token();
7
8     $author = remote_user_name();
9     $name = array_get($data, 'name');
10     $start_run_id = array_get($data, 'startRun');
11     $end_run_id = array_get($data, 'endRun');
12
13     if (!$name)
14         exit_with_error('MissingName', array('name' => $name));
15     $range = array('startRunId' => $start_run_id, 'endRunId' => $end_run_id);
16     if (!$start_run_id || !$end_run_id)
17         exit_with_error('MissingRange', $range);
18
19     $db = connect();
20     $start_run = ensure_row_by_id($db, 'test_runs', 'run', $start_run_id, 'InvalidStartRun', $range);
21     $end_run = ensure_row_by_id($db, 'test_runs', 'run', $end_run_id, 'InvalidEndRun', $range);
22
23     $config = ensure_config_from_runs($db, $start_run, $end_run);
24
25     $db->begin_transaction();
26     $duplicate = $db->select_first_row('analysis_tasks', 'task', array('start_run' => $start_run_id, 'end_run' => $end_run_id));
27     if ($duplicate) {
28         $db->rollback_transaction();
29         exit_with_error('DuplicateAnalysisTask', array('duplicate' => $duplicate));
30     }
31
32     $task_id = $db->insert_row('analysis_tasks', 'task', array(
33         'name' => $name,
34         'author' => $author,
35         'platform' => $config['config_platform'],
36         'metric' => $config['config_metric'],
37         'start_run' => $start_run_id,
38         'end_run' => $end_run_id));
39     $db->commit_transaction();
40
41     exit_with_success(array('taskId' => $task_id));
42 }
43
44 function ensure_row_by_id($db, $table, $prefix, $id, $error_name, $error_params) {
45     $row = $db->select_first_row($table, $prefix, array('id' => $id));
46     if (!$row)
47         exit_with_error($error_name, array($error_params));
48     return $row;
49 }
50
51 function ensure_config_from_runs($db, $start_run, $end_run) {
52     $range = array('startRun' => $start_run, 'endRun' => $end_run);
53
54     if ($start_run['run_config'] != $end_run['run_config'])
55         exit_with_error('RunConfigMismatch', $range);
56
57     return ensure_row_by_id($db, 'test_configurations', 'config', $start_run['run_config'], 'ConfigNotFound', $range);
58 }
59
60 main();
61
62 ?>