Merge database-common.js and utility.js into run-tests.js.
[WebKit-https.git] / Websites / perf.webkit.org / public / admin / jobs.php
1 <?php
2
3 require('../include/admin-header.php');
4
5 if ($action == 'delete') {
6     if (array_key_exists('id', $_POST)) {
7         $job_id = intval($_POST['id']);
8         execute_query_and_expect_one_row_to_be_affected('DELETE FROM jobs WHERE job_id = $1', array($job_id),
9             "Deleted job $job_id", "Could not delete job $job_id");
10     } else
11         notice('Invalid ID.');
12 } else if ($action == 'manifest') {
13     execute_query_and_expect_one_row_to_be_affected('INSERT INTO jobs (job_type) VALUES (\'manifest\')', array(),
14         'Requested to regenerate the manifest.', 'Could not add a job');
15 }
16
17 if ($db) {
18
19 ?>
20 <table>
21 <thead>
22     <tr><td>ID</td><td>Type</td><td>Created At</td><td>Started At</td><td>PID</td><td>Attempts</td><td>Payload</td><td>Log</td><td>Actions</td>
23 </thead>
24 <tbody>
25 <?php
26
27     function get_value_with_default($array, $key, $default) {
28         $value = $array[$key];
29         if (!$value)
30             $value = $default;
31         return $value;
32     }
33
34     # FIXME: Add a navigation bar for when there are more than 50 jobs.
35     $uncompleted_jobs = $db->query_and_fetch_all('SELECT * FROM jobs WHERE job_completed_at IS NULL LIMIT 50');
36     if ($uncompleted_jobs) {
37         foreach ($uncompleted_jobs as $job) {
38             $id = $job['job_id'];
39             $started_at = get_value_with_default($job, 'job_started_at', '');
40             $pid = get_value_with_default($job, 'job_started_by_pid', '');
41             echo <<< EOF
42     <tr>
43         <td>$id</td>
44         <td>{$job['job_type']}</td>
45         <td>{$job['job_created_at']}</td>
46         <td>$started_at</td><td>$pid</td>
47         <td>{$job['job_attempts']}</td>
48         <td><pre class="payload">{$job['job_payload']}</pre></td>
49         <td><pre>{$job['job_log']}</pre></td>
50         <td><form method='POST'><button type='submit' name='action' value='delete'>Delete</button><input type='hidden' name='id' value='$id'></form></td>
51     </tr>
52 EOF;
53         }
54     }
55
56 ?></tbody>
57 </table>
58
59 <script>
60
61 var payloadPres = document.querySelectorAll('.payload');
62 for (var i = 0; i < payloadPres.length; ++i) {
63     var pre = payloadPres[i];
64     try {
65         pre.textContent = JSON.stringify(JSON.parse(pre.textContent), null, '  ');
66     } catch (exception) { } // Ignore exceptions.
67 }
68
69 </script>
70
71 <section class="action-field">
72 <h2>New job</h2>
73 <form method='POST'><button type='submit' name='action' value='manifest'>Re-generate manifest</button></form>
74 </section>
75
76 <?php
77
78 }
79
80 include('../include/admin-footer.php');
81
82 ?>