summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildmaster/build-slaves.php230
1 files changed, 176 insertions, 54 deletions
diff --git a/buildmaster/build-slaves.php b/buildmaster/build-slaves.php
index 978e99c..c5a3ddc 100644
--- a/buildmaster/build-slaves.php
+++ b/buildmaster/build-slaves.php
@@ -1,65 +1,187 @@
<?php
require_once "../init.php";
+require_once BASE . "/lib/style.php";
require_once BASE . "/lib/mysql.php";
- $result = mysql_run_query(
- "SELECT" .
- " `build_slaves`.`name`," .
- "`persons`.`name` AS `operator`," .
- "`package_sources`.`pkgbase`," .
- "MAX(`ssh_log`.`date`" .
- ") AS `lc`," .
- "MAX(IF(`ssh_log`.`action`=\"get-assignment\",`ssh_log`.`date`,NULL)" .
- ") AS `bs`," .
- "`build_slaves`.`logged_lines`," .
- "`build_slaves`.`trials`," .
- "`build_slaves`.`last_action`" .
- " FROM `build_slaves`" .
- " LEFT JOIN `ssh_log` ON" .
- " `ssh_log`.`build_slave`=`build_slaves`.`id`" .
- " JOIN `ssh_keys` ON" .
- " `build_slaves`.`ssh_key`=`ssh_keys`.`id`" .
- " JOIN `persons` ON" .
- " `ssh_keys`.`owner`=`persons`.`id`" .
- " LEFT JOIN `build_assignments` ON" .
- " `build_slaves`.`currently_building`=`build_assignments`.`id`" .
- " LEFT JOIN `package_sources` ON" .
- " `build_assignments`.`package_source`=`package_sources`.`id`" .
+$columns = array(
+ "name" => array(
+ "label" => "name",
+ "mysql_name" => "name",
+ "mysql_query" => "`build_slaves`.`name`",
+ "sort" => "name",
+ "title" => "name"
+ ),
+ "operator" => array(
+ "label" => "operator",
+ "mysql_name" => "operator",
+ "mysql_query" => "`persons`.`name`",
+ "sort" => "operator",
+ "title" => "operator"
+ ),
+ "currently_building" => array(
+ "label" => "currently building",
+ "mysql_name" => "cb",
+ "mysql_query" => "`package_sources`.`pkgbase`",
+ "sort" => "currently_building",
+ "title" => "pkgbase of currently building package"
+ ),
+ "last_connection" => array(
+ "label" => "last connection",
+ "mysql_name" => "lc",
+ "mysql_query" => "MAX(`ssh_log`.`date`)",
+ "sort" => "last_connection",
+ "title" => "time of last connection"
+ ),
+ "building_since" => array(
+ "label" => "building since",
+ "mysql_name" => "bs",
+ "mysql_query" => "MAX(IF(`ssh_log`.`action`=\"get-assignment\",`ssh_log`.`date`,NULL))",
+ "sort" => "building_since",
+ "title" => "start of build"
+ ),
+ "trials" => array(
+ "label" => "trials",
+ "mysql_name" => "trials",
+ "mysql_query" => "`build_slaves`.`trials`",
+ "sort" => "trials",
+ "title" => "number of trials"
+ ),
+ "logged_lines" => array(
+ "label" => "logged lines",
+ "mysql_name" => "ll",
+ "mysql_query" => "`build_slaves`.`logged_lines`",
+ "sort" => "logged_lines",
+ "title" => "number of logged lines so far"
+ ),
+ "last_action" => array(
+ "label" => "last action",
+ "mysql_name" => "la",
+ "mysql_query" => "`build_slaves`.`last_action`",
+ "sort" => "last_action",
+ "title" => "last action"
+ )
+);
+
+if (!isset($_GET["sort"]))
+ $_GET["sort"]="-last_connection";
+
+if (substr($_GET["sort"],0,1) == "-") {
+ $direction = " DESC";
+ $sort = substr($_GET["sort"],1);
+} else {
+ $direction = " ASC";
+ $sort = $_GET["sort"];
+}
+
+if (isset($columns[$sort]))
+ $order = "IFNULL(`sub_query`.`" . $columns[$sort]["mysql_name"] . "`,0) " . $direction . ",";
+else
+ $order = "";
+
+function combine_fields($cln) {
+ return $cln["mysql_query"] . " AS `" . $cln["mysql_name"] . "`";
+}
+
+$result = mysql_run_query(
+ "SELECT `sub_query`.* FROM (" .
+ "SELECT " .
+ implode(",",array_map("combine_fields",$columns)) .
+ " FROM `build_assignments`" .
+ " JOIN `package_sources`" .
+ " ON `build_assignments`.`package_source`=`package_sources`.`id`" .
+
+ " RIGHT JOIN `build_slaves`" .
+ " ON `build_slaves`.`currently_building`=`build_assignments`.`id`" .
+ " JOIN `ssh_keys`" .
+ " ON `build_slaves`.`ssh_key`=`ssh_keys`.`id`" .
+ " JOIN `persons`" .
+ " ON `ssh_keys`.`owner`=`persons`.`id`" .
+
+ " LEFT JOIN `ssh_log`" .
+ " ON `ssh_log`.`build_slave`=`build_slaves`.`id`" .
" GROUP BY `build_slaves`.`id`" .
- " ORDER BY `lc`"
- );
+ ") AS `sub_query`" .
+ " ORDER BY " . $order . "`sub_query`.`name`"
+);
+
+$count = 0;
+
+while($row = $result->fetch_assoc()) {
+
+ foreach ($row as $name => $value) {
+ if (!isset($row[$name]))
+ $rows[$count][$name] = "&nbsp;";
+ else
+ $rows[$count][$name] = $value;
+ }
+ $rows[$count]["name"] =
+ "<a href=\"/buildmaster/log.php?show=ssh&slave=" .
+ $row["name"] .
+ "\">" .
+ $row["name"] .
+ "</a>";
+
+ $count++;
+}
+
+print_header("List of Build Slaves");
+
+if ($count > 0) {
+
+?>
+ <div id="buildslaveslist-results" class="box">
+ <table class="results">
+ <thead>
+ <tr>
+<?php
+
+foreach ($columns as $column) {
+
+ print " <th>\n";
+ print " <a href=\"?sort=";
+ if ($column["sort"] == $_GET["sort"])
+ print "-";
+ print $column["sort"] . "\" ";
+ print "title=\"Sort build assignments by " . $column["title"] . "\">\n";
+ print " " . $column["label"] . "\n";
+ print " </a>\n";
+ print " </th>\n";
+
+}
?>
-<html>
- <head>
- <title>list of build slaves</title>
- </head>
- <body>
+ </tr>
+ </thead>
+ <tbody>
<?php
-show_warning_on_offline_slave();
-
- print "<table border=1>\n";
- if ($result->num_rows > 0) {
- print "<tr><th>name</th><th>operator</th><th>currently building</th><th>last connection</th><th>building since</th><th>trials</th><th>logged lines</th><th>last action</th></tr>\n";
- while ($row = $result -> fetch_assoc()) {
- foreach ($row as $key => $value) {
- if ($value=="") {
- $row[$key]="&nbsp;";
- }
- }
- print "<tr>";
- print "<td><a href=\"/buildmaster/log.php?show=ssh&slave=".$row["name"]."\">".$row["name"]."</a></td>";
- print "<td>".$row["operator"]."</td>";
- print "<td>".$row["pkgbase"]."</td>";
- print "<td>".$row["lc"]."</td>";
- print "<td>".$row["bs"]."</td>";
- print "<td>".$row["trials"]."</td>";
- print "<td>".$row["logged_lines"]."</td>";
- print "<td>".$row["last_action"]."</td>";
- print "</tr>\n";
- }
+
+$oddity = "odd";
+
+foreach($rows as $row) {
+
+ print " <tr class=\"" . $oddity . "\">\n";
+
+ foreach ($columns as $column) {
+
+ print " <td>\n";
+ print " " . $row[$column["mysql_name"]] . "\n";
+ print " </td>\n";
+
}
- print "</table>\n";
+ print " </tr>\n";
+
+ if ($oddity == "odd" )
+ $oddity = "even";
+ else
+ $oddity = "odd";
+
+}
?>
-</body></html>
+ </tbody>
+ </table>
+ </div>
+<?php
+}
+
+print_footer();