Build fixes. In particular, we were missing the code to generate JSONs in report...
[WebKit-https.git] / Websites / test-results / public / api / report.php
1 <?php
2
3 require_once('../include/json-shared.php');
4 require_once('../include/test-results.php');
5
6 function store_results($db, $master, $builder_name, $build_number, $start_time, $end_time, $revisions, $json_path) {
7     $test_results = fetch_and_parse_test_results_json($json_path);
8     if (!$test_results)
9         exit_with_error('InvalidResultsJSON');
10
11     $builder_id = add_builder($db, $master, $builder_name);
12     if (!$builder_id)
13         exit_with_error('FailedToInsertBuilder', array('master' => $master, 'builderName' => $builder_name));
14
15     $build_id = add_build($db, $builder_id, $build_number);
16     if (!$build_id)
17         exit_with_error('FailedToInsertBuild', array('builderId' => $builder_id, 'buildNumber' => $build_number));
18
19     foreach ($revisions as $repository_name => $revision_data) {
20         $repository_id = $db->select_or_insert_row('repositories', NULL, array('name' => $repository_name));
21         if (!$repository_id)
22             exit_with_error('FailedToInsertRepository', array('name' => $repository_name));
23
24         $revision_data = array(
25             'repository' => $repository_id,
26             'build' => $build_id,
27             'value' => $revision_data['revision'],
28             'time' => array_get($revision_data, 'timestamp'));
29         $db->select_or_insert_row('build_revisions', NULL, array('repository' => $repository_id, 'build' => $build_id), $revision_data, 'value')
30             or exit_with_error('FailedToInsertRevision', array('name' => $repository_name, 'data' => $revision_data));
31     }
32
33     $slave_id = add_slave($db, $_POST['build_slave']);
34     if (!store_test_results($db, $test_results, $build_id, $start_time, $end_time, $slave_id))
35         exit_with_error('FailedToStoreResults', array('buildId' => $build_id));
36
37     return array('build_id' => $build_id, 'builder_id' => $builder_id);
38 }
39
40 function main() {
41     require_existence_of($_POST, array(
42         'master' => '/[A-Za-z0-9\.]+/',
43         'builder_name' => '/^[A-Za-z0-9 \(\)\-_]+$/',
44         'build_number' => '/^[0-9]+?$/',
45         'build_slave' => '/^[A-Za-z0-9\-_]+$/',
46         'revisions' => '/^.+?$/',
47         'start_time' => '/^[0-9]+(\.[0-9]+)?$/',
48         'end_time' => '/^[0-9]+(\.[0-9]+)?$/'));
49     $master = $_POST['master'];
50     $builder_name = $_POST['builder_name'];
51     $build_number = intval($_POST['build_number']);
52     $start_time = float_to_time($_POST['start_time']);
53     $end_time = float_to_time($_POST['end_time']);
54
55     $revisions = json_decode(str_replace('\\', '', $_POST['revisions']), TRUE);
56     foreach ($revisions as $repository_name => $revision_data) {
57         require_format('repository_name', $repository_name, '/^\w+$/');
58         require_existence_of($revision_data, array(
59             'revision' => '/^[a-z0-9]+$/',
60             'timestamp' => '/^[a-z0-9\-\.:TZ]+$/',
61         ), 'revision');
62     }
63
64     if (!array_key_exists('file', $_FILES) or !array_key_exists('tmp_name', $_FILES['file']) or count($_FILES['file']['tmp_name']) <= 0)
65         exit_with_error('ResultsJSONNotIncluded');
66     $json_path = $_FILES['file']['tmp_name'];
67
68     $db = connect();
69     $builder_and_build = store_results($db, $master, $builder_name, $build_number, $start_time, $end_time, $revisions, $json_path);
70     @ob_end_clean();
71     ignore_user_abort();
72     ob_start();
73
74     echo_success();
75
76     header('Connection: close');
77     header('Content-Length: ' . ob_get_length());
78
79     @ob_end_flush();
80     flush();
81     if (function_exists('fastcgi_finish_request'))
82         fastcgi_finish_request();
83
84     update_flakiness_after_inserting_build($db, $builder_and_build['build_id']);
85
86     $generator = new ResultsJSONGenerator($db, $builder_and_build['builder_id']);
87     $generator->generate('wrongexpectations');
88     $generator->generate('flaky');
89 }
90
91 main();
92
93 ?>