0dd6a27ac0bfbc6e8273f9e9c163c55dc664d046
[WebKit-https.git] / Websites / test-results / api / results.php
1 <?php
2
3 require_once('../include/json-shared.php');
4
5 $db = connect();
6
7 require_existence_of($_GET, array('test' => '/[A-Za-z0-9\._\- ]+/'));
8
9 $test = $db->select_first_row('tests', NULL, array('name' => $_GET['test']));
10 if (!$test)
11     exit_with_error('TestNotFound');
12
13 $result_rows = $db->query_and_fetch_all(
14 'SELECT results.*, builds.*, array_agg((build_revisions.repository, build_revisions.value, build_revisions.time)) AS revisions
15     FROM results, builds, build_revisions
16     WHERE build_revisions.build = builds.id AND results.test = $1 AND results.build = builds.id
17     GROUP BY results.id, builds.id', array($test['id']));
18 if (!$result_rows)
19     exit_with_error('ResultsNotFound');
20
21 date_default_timezone_set('UTC');
22 function parse_revisions_array($postgres_array) {
23     // e.g. {"(WebKit,131456,\"2012-10-16 14:53:00\")","(Safari,162004,)"}
24     $outer_array = json_decode('[' . trim($postgres_array, '{}') . ']');
25     $revisions = array();
26     foreach ($outer_array as $item) {
27         $name_and_revision = explode(',', trim($item, '()'));
28         $time = strtotime(trim($name_and_revision[2], '"')) * 1000;
29         $revisions[trim($name_and_revision[0], '"')] = array(trim($name_and_revision[1], '"'), $time);
30     }
31     return $revisions;
32 }
33
34 $builders = array();
35 foreach ($result_rows as $result) {
36     array_push(array_ensure_item_has_array($builders, $result['builder']),
37         array('buildTime' => strtotime($result['start_time']) * 1000,
38         'revisions' => parse_revisions_array($result['revisions']),
39         'builder' => $result['builder'],
40         'slave' => $result['slave'],
41         'buildNumber' => $result['number'],
42         'actual' => $result['actual'],
43         'expected' => $result['expected']));
44 }
45
46 exit_with_success(array('builders' => $builders));
47
48 ?>