haikuwebkit/Websites/perf.webkit.org/public/admin/tests.php

158 lines
5.9 KiB
PHP

<?php
require_once('../include/admin-header.php');
require_once('../include/test-name-resolver.php');
if ($action == 'update') {
if (!update_field('tests', 'test', 'url'))
notice('Invalid parameters');
} else if ($action == 'add') {
if (array_key_exists('test_id', $_POST) && array_key_exists('metric_name', $_POST)) {
$id = intval($_POST['test_id']);
$aggregator = intval($_POST['metric_aggregator']);
if (!$aggregator)
notice('Invalid aggregator. You must specify one.');
else {
$metric_id = $db->insert_row('test_metrics', 'metric',
array('test' => $id, 'name' => $_POST['metric_name'], 'aggregator' => $aggregator));
if (!$metric_id)
notice("Could not insert the new metric for test $id");
else
notice("Inserted the metric for test $id. Aggregation for $metric_id is needed.");
}
} else if (array_key_exists('metric_id', $_POST))
regenerate_manifest();
else
notice('Invalid parameters');
}
if ($db) {
$aggregators = array();
if ($aggregators_table = $db->fetch_table('aggregators')) {
foreach ($aggregators_table as $aggregator_row)
$aggregators[$aggregator_row['aggregator_id']] = $aggregator_row['aggregator_name'];
}
$triggerables = array();
if ($triggerable_table = $db->fetch_table('build_triggerables', 'triggerable_name')) {
foreach ($triggerable_table as $triggerable_row)
$triggerables[$triggerable_row['triggerable_id']] = $triggerable_row;
}
$test_name_resolver = new TestNameResolver($db);
if ($test_name_resolver->tests()) {
$name_to_platform = array();
foreach ($db->fetch_table('platforms') as $platform)
$name_to_platform[$platform['platform_name']] = $platform;
$platform_names = array_keys($name_to_platform);
asort($platform_names);
$odd = false;
$selected_parent_full_name = trim(array_get($_SERVER, 'PATH_INFO', ''), '/');
$selected_parent = $test_name_resolver->test_id_for_full_name($selected_parent_full_name);
if ($selected_parent)
echo '<h2>' . htmlspecialchars($selected_parent_full_name) . '</h2>';
?>
<table>
<thead>
<tr><td>Test ID</td><td>Full Name</td><td>Parent ID</td><td>URL</td><td>Triggerables</td>
<td>Metric ID</td><td>Metric Name</td><td>Aggregator</td>
</thead>
<tbody>
<?php
foreach ($test_name_resolver->tests() as $test) {
if ($selected_parent && $test['test_parent'] != $selected_parent['test_id'])
continue;
$test_id = $test['test_id'];
$test_metrics = $test_name_resolver->metrics_for_test_id($test_id);
$row_count = count($test_metrics);
$child_metrics = $test_name_resolver->child_metrics_for_test_id($test_id);
$linked_test_name = htmlspecialchars($test['full_name']);
if ($child_metrics)
$linked_test_name = '<a href="/admin/tests/' . htmlspecialchars($test['full_name']) . '">' . $linked_test_name . '</a>';
$tbody_class = $odd ? 'odd' : 'even';
$odd = !$odd;
$test_url = htmlspecialchars($test['test_url']);
$triggerable_platform_list = '';
$triggerable_platforms = $db->query_and_fetch_all('SELECT * FROM platforms JOIN triggerable_configurations
ON trigconfig_platform = platform_id AND trigconfig_test = $1 ORDER BY trigconfig_triggerable', array($test_id));
$previous_triggerable = null;
foreach ($triggerable_platforms as $row) {
if ($previous_triggerable != $row['trigconfig_triggerable']) {
$previous_triggerable = $row['trigconfig_triggerable'];
if ($triggerable_platform_list)
$triggerable_platform_list .= '<br>';
$name = $triggerables[$previous_triggerable]['triggerable_name'];
$triggerable_platform_list .= "<strong>$name:</strong> ";
} else
$triggerable_platform_list .= ', ';
$triggerable_platform_list .= $row['platform_name'];
}
echo <<<EOF
<tbody class="$tbody_class">
<tr>
<td rowspan="$row_count">$test_id</td>
<td rowspan="$row_count">$linked_test_name</td>
<td rowspan="$row_count">{$test['test_parent']}</td>
<td rowspan="$row_count">
<form method="POST"><input type="hidden" name="id" value="$test_id">
<input type="hidden" name="action" value="update">
<input type="url" name="url" value="$test_url" size="30"></form></td>
<td rowspan="$row_count">$triggerable_platform_list</td>
EOF;
if ($test_metrics) {
$has_tr = true;
foreach ($test_metrics as $metric) {
$aggregator_name = array_get($aggregators, $metric['metric_aggregator'], '');
if ($aggregator_name) {
$aggregator_action = '<form method="POST"><input type="hidden" name="metric_id" value="'. $metric['metric_id']
. '"><button type="submit" name="action" value="add">Regenerate</button></form>';
} else
$aggregator_action = '';
if (!$has_tr)
echo <<<EOF
<tr>
EOF;
$has_tr = false;
$metric_id = $metric['metric_id'];
echo <<<EOF
<td><a href="/admin/test-configurations?metric=$metric_id">$metric_id</a></td>
<td>{$metric['metric_name']}</td>
<td>$aggregator_name $aggregator_action</td>
</tr>
EOF;
}
} else
echo '<td colspan="3"></td>';
echo <<<EOF
</tbody>
EOF;
}
?></tbody>
</table>
<?php
}
}
include('../include/admin-footer.php');
?>