158 lines
5.9 KiB
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');
|
|
|
|
?>
|