Paginated logs page

By default, displaying 10 logs per page
This commit is contained in:
Andrew S. Rightenburg 2024-10-13 16:04:22 +08:00
parent fb305a3010
commit 2d5ee82731
Signed by: rail5
GPG key ID: BD8796E9783D5764
3 changed files with 107 additions and 8 deletions

View file

@ -15,10 +15,22 @@ $autobuild_directory = "/var/autobuild";
$autobuild_repos_directory = "$autobuild_directory/repo";
$autobuild_builds_directory = "$autobuild_directory/builds";
function get_build_logs() {
function get_build_logs($offset = 0, $limit = null) {
global $log_directory;
return array_filter(glob("$log_directory/*.log"), 'file_not_empty');
$log_list = array_filter(glob("$log_directory/*.log"), 'file_not_empty');
$log_list = array_slice($log_list, $offset, $limit);
return $log_list;
}
function get_number_of_build_logs() {
global $log_directory;
$log_list = array_filter(glob("$log_directory/*.log"), 'file_not_empty');
return count($log_list);
}
function get_log_file($log_number) {
global $log_directory;
$log_file = "$log_directory/$log_number.log";

View file

@ -8,16 +8,34 @@
require_once "global.php";
$page = 1;
$logs_per_page = 10;
if (isset($_GET["page"]) && is_numeric($_GET["page"])) {
$page = intval($_GET["page"]);
}
if (isset($_GET["logs-per-page"]) && is_numeric($_GET["logs-per-page"])) {
$logs_per_page = intval($_GET["logs-per-page"]);
}
/* Are we deleting logs? */
if (isset($_GET["delete-all"])) {
if (isset($_GET["delete-all"]) && !isset($_GET["error"])) {
delete_all_logs();
} else if (isset($_GET["delete"])) {
} else if (isset($_GET["delete-all-on-page"]) && !isset($_GET["error"])) {
$build_logs = get_build_logs(($page - 1) * $logs_per_page, $logs_per_page);
foreach ($build_logs as $log_file) {
$log_number = str_replace(".log", "", basename($log_file));
delete_log($log_number);
}
} else if (isset($_GET["delete"]) && !isset($_GET["error"])) {
foreach ($_GET["delete"] as $log_number) {
delete_log($log_number);
}
}
$build_logs = get_build_logs();
$build_logs = get_build_logs(($page - 1) * $logs_per_page, $logs_per_page);
$job_ids = array();
foreach ($build_logs as $log_file) {
@ -47,9 +65,11 @@ display_error_message();
<div style="width: 100%; overflow: hidden;">
<h2>Build Logs</h2>
<form action="logs.php" method="get" style="display: inline-block;">
<button type="submit" class="no-decoration">Delete selected logs</button>
<input type="hidden" name="page" value="<?php echo $page; ?>">
<input type="hidden" name="logs-per-page" value="<?php echo $logs_per_page; ?>">
<button type="submit" class="no-decoration">Delete selected logs</button> &nbsp; <a href="logs.php?delete-all=true" class="button-no-decoration">Delete all logs</a>
<br><br>
<input type="checkbox" class="unhide" name="delete-all" value="true"> Select all
<input type="checkbox" class="unhide" name="delete-all-on-page" value="true"> Select all
<br>
<?php
$all_selected = "";
@ -67,6 +87,53 @@ display_error_message();
</div>".PHP_EOL;
?>
</form>
<!-- List pagination -->
<?php
$logs_count = get_number_of_build_logs();
$pages = ceil($logs_count / $logs_per_page);
$prev_page = $page - 1;
$next_page = $page + 1;
$show_prev = $prev_page >= 1;
$show_next = $next_page <= $pages;
if ($show_prev || $show_next) {
echo "<br><br>Page: ";
if ($show_prev) {
echo "<a href=\"logs.php?page=$prev_page&logs-per-page=$logs_per_page\">&lt;</a> ";
} else {
echo "&lt; ";
}
for ($i = 1; $i <= $pages; $i++) {
if ($i == $page) {
echo "<b>$i</b> ";
} else {
echo "<a href=\"logs.php?page=$i&logs-per-page=$logs_per_page\">$i</a> ";
}
}
if ($show_next) {
echo "<a href=\"logs.php?page=$next_page&logs-per-page=$logs_per_page\">&gt;</a>";
} else {
echo "&gt;";
}
}
?>
<br><br>
<form action="logs.php" method="get" style="display: inline-block;">
<input type="hidden" name="page" value="<?php echo $page; ?>">
Logs per page:
<select name="logs-per-page" id="logs-per-page" class="small">
<?php
for ($i = 10; $i <= 100; $i += 10) {
$selected = $i == $logs_per_page ? " selected" : "";
echo "<option value=\"$i\"$selected>$i</option>";
}
?>
</select>
&nbsp;
<button type="submit" class="no-decoration">Apply</button>
</form>
</div>
</div>
</section>

View file

@ -352,7 +352,27 @@ button.no-decoration {
color: #069;
text-decoration: underline;
cursor: pointer;
}
}
button.no-decoration:hover {
filter: brightness(120%);
}
a.button-no-decoration {
background: none!important;
border: none;
padding: 0!important;
color: #069;
text-decoration: underline;
cursor: pointer;
}
select.small {
width: 25%;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
}
/* Tables */
table {