Update data/params after Bugzilla 4.2.11 upgrade
[WebKit-https.git] / Websites / perf.webkit.org / public / admin / test-configurations.php
1 <?php
2
3 require('../include/admin-header.php');
4 require('../include/test-name-resolver.php');
5
6 function add_run($metric_id, $platform_id, $type, $date, $mean) {
7     global $db;
8
9     $db->begin_transaction();
10
11     $config_id = $db->select_or_insert_row('test_configurations', 'config', array('metric' => $metric_id, 'platform' => $platform_id, 'type' => $type));
12     if (!$config_id) {
13         $db->rollback_transaction();
14         return notice("Failed to add the configuration for metric $metric_id and platform $platform_id");
15     }
16
17     $build_id = $db->insert_row('builds', 'build', array('number' => 0, 'time' => $date));
18     if (!$build_id) {
19         $db->rollback_transaction();
20         return notice("Failed to add a build");
21     }
22
23     // FIXME: Should we insert run_iterations?
24     $run_id = $db->insert_row('test_runs', 'run', array('config' => $config_id, 'build' => $build_id, 'iteration_count_cache' => 1, 'mean_cache' => $mean));
25     if (!$run_id) {
26         $db->rollback_transaction();
27         return notice("Failed to add a run");
28     }
29
30     $db->commit_transaction();
31     notice("Added a baseline test run.");
32 }
33
34 function delete_run($run_id, $build_id) {
35     global $db;
36
37     $db->begin_transaction();
38
39     $build_counts = $db->query_and_fetch_all('SELECT COUNT(*) FROM test_runs WHERE run_build = $1', array($build_id));
40     if (!$build_counts) {
41         $db->rollback_transaction();
42         return notice("Failed to obtain the number of runs for the build $build_id");
43     }
44
45     if ($build_counts[0]['count'] != 1) {
46         $db->rollback_transaction();
47         return notice("The build $build_id doesn't have exactly one run. Either the build id is wrong or it's not a synthetic build.");
48     }
49
50     $removed_runs = $db->query_and_fetch_all('DELETE FROM test_runs WHERE run_id = $1 RETURNING run_build', array($run_id));
51     if (!$removed_runs || count($removed_runs) != 1) {
52         $db->rollback_transaction();
53         return notice("Failed to delete the run $run_id.");
54     }
55     $associated_build = $removed_runs[0]['run_build'];
56     if ($associated_build != $build_id) {
57         $db->rollback_transaction();
58         return notice("Failed to delete the run $run_id because it was associated with the build $associated_build instead of the build $build_id");
59     }
60
61     $removed_builds = $db->query_and_get_affected_rows('DELETE FROM builds WHERE build_id = $1', array($build_id));
62     if (!$removed_runs || count($removed_runs) != 1) {
63         $db->rollback_transaction();
64         return notice("Failed to delete the build $build_id.");
65     }
66
67     $db->commit_transaction();
68 }
69
70 if ($db) {
71     date_default_timezone_set('Etc/UTC');
72
73     if ($action == 'add-run' && array_get($_POST, 'metric') && array_get($_POST, 'platform')
74         && array_get($_POST, 'config-type') && array_get($_POST, 'date') && array_get($_POST, 'mean'))
75         add_run(intval($_POST['metric']), intval($_POST['platform']), $_POST['config-type'], $_POST['date'], floatval($_POST['mean']));
76     else if ($action == 'delete-run' && array_get($_POST, 'run') && array_get($_POST, 'build'))
77         delete_run(intval($_POST['run']), intval($_POST['build']));
78     else if ($action)
79         notice("Invalid arguments");
80
81     $metric_id = intval(array_get($_GET, 'metric'));
82
83     $test_name_resolver = new TestNameResolver($db);
84     $full_metric_name = $test_name_resolver->full_name_for_metric($metric_id);
85     echo "<h2>$full_metric_name</h2>";
86
87     $page = new AdministrativePage($db, 'platforms', 'platform', array(
88         'name' => array('label' => 'Platform Name'),
89         'Configurations' => array('subcolumns'=> array('ID', 'Type'), 'custom' => function ($platform_row) {
90             return generate_rows_for_configurations($platform_row['platform_id']);
91         }),
92         'Baseline Test Runs' => array('subcolumns'=> array('Run ID', 'Build ID', 'Time', 'Mean', 'Actions'), 'custom' => function ($platform_row) {
93             return generate_rows_for_test_runs($platform_row['platform_id'], 'baseline');
94         }),
95         'Target Test Runs' => array('subcolumns'=> array('Run ID', 'Build ID', 'Time', 'Mean', 'Actions'), 'custom' => function ($platform_row) {
96             return generate_rows_for_test_runs($platform_row['platform_id'], 'target');
97         }),
98     ));
99
100     function generate_rows_for_configurations($platform_id) {
101         global $test_name_resolver;
102         global $metric_id;
103         $rows = array();
104         if ($configurations = $test_name_resolver->configurations_for_metric_and_platform($metric_id, $platform_id)) {
105             foreach ($configurations as $config)
106                 array_push($rows, array($config['config_id'], $config['config_type']));
107         }
108         return $rows;
109     }
110
111     function generate_rows_for_test_runs($platform_id, $config_type) {
112         global $metric_id;
113         global $db;
114
115         $baseline_runs = $db->query_and_fetch_all('SELECT * FROM test_runs, test_configurations, builds
116             WHERE run_config = config_id AND run_build = build_id
117             AND config_metric = $1 AND config_platform = $2 AND config_type = $3
118             ORDER BY build_time DESC LIMIT 6', array($metric_id, $platform_id, $config_type));
119
120         $rows = array();
121         if ($baseline_runs) {
122             foreach ($baseline_runs as $run) {
123                 $deletion_form = <<< END
124 <form method="POST">
125 <input type="hidden" name="run" value="{$run['run_id']}">
126 <input type="hidden" name="build" value="{$run['run_build']}">
127 <button type="submit" name="action" value="delete-run">Delete</button>
128 </form>
129 END;
130                 array_push($rows, array($run['run_id'], $run['build_id'], $run['build_time'], $run['run_mean_cache'], $deletion_form));
131             }
132
133         }
134
135         $form = <<< END
136 <form method="POST">
137 <input type="hidden" name="metric" value="$metric_id">
138 <input type="hidden" name="platform" value="$platform_id">
139 <input type="hidden" name="config-type" value="$config_type">
140 <label>Date: <input type="text" name="date"></label>
141 <label>Mean: <input type="text" name="mean"></label>
142 <button type="submit" name="action" value="add-run">Add</button>
143 </form>
144 END;
145
146         array_push($rows, $form);
147
148         return $rows;
149     }
150
151     $page->render_table('name');
152 }
153
154 require('../include/admin-footer.php');
155
156 ?>