Skip to content

Commit 3caaee1

Browse files
cpeeljchaffraix
andauthored
Minor usability improvements to job logs page (#1542)
Co-authored-by: Julien Chaffraix <julien.chaffraix@gmail.com>
1 parent 9a4e449 commit 3caaee1

4 files changed

Lines changed: 47 additions & 9 deletions

File tree

pinc/job_log.inc

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,26 @@
11
<?php
22

3-
function insert_job_log_entry($filename, $event, $comments, $succeeded = null)
3+
/** @return string[] */
4+
function get_job_log_filenames(): array
5+
{
6+
$sql = sprintf(
7+
"
8+
SELECT DISTINCT filename
9+
FROM job_logs
10+
WHERE tracetime >= %d
11+
ORDER BY filename
12+
",
13+
time() - (60 * 60 * 24 * 45), // 45 days covers all common jobs
14+
);
15+
$result = DPDatabase::query($sql);
16+
$entries = [];
17+
while ([$filename] = mysqli_fetch_row($result)) {
18+
$entries[] = $filename;
19+
}
20+
return $entries;
21+
}
22+
23+
function insert_job_log_entry(string $filename, string $event, ?string $comments, ?bool $succeeded = null): void
424
{
525
$sql = sprintf(
626
"
@@ -16,17 +36,19 @@ function insert_job_log_entry($filename, $event, $comments, $succeeded = null)
1636
DPDatabase::query($sql);
1737
}
1838

19-
function get_job_log_entries($timestamp, $filename = null, $event = null)
39+
function get_job_log_entries(int $timestamp, ?string $filename = null, ?string $event = null, ?bool $succeeded = null): array
2040
{
2141
$filename_where = $filename ? sprintf("AND filename = '%s'", DPDatabase::escape($filename)) : "";
2242
$event_where = $event ? sprintf("AND event = '%s'", DPDatabase::escape($event)) : "";
43+
$succeeded_where = $succeeded !== null ? sprintf("AND succeeded = %d", $succeeded ? 1 : 0) : "";
2344
$sql = sprintf(
2445
"
2546
SELECT *
2647
FROM job_logs
2748
WHERE tracetime >= %d
2849
$filename_where
2950
$event_where
51+
$succeeded_where
3052
ORDER BY tracetime desc
3153
",
3254
$timestamp
@@ -39,7 +61,7 @@ function get_job_log_entries($timestamp, $filename = null, $event = null)
3961
return $entries;
4062
}
4163

42-
function prune_job_log_entries(int $days_to_keep)
64+
function prune_job_log_entries(int $days_to_keep): void
4365
{
4466
$cutoff = new DateTimeImmutable(sprintf("%d days ago", $days_to_keep));
4567
$sql = sprintf(

pinc/misc.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,8 @@ function get_bool_param(array $arr, string $key, ?bool $default = null, bool $al
464464
return true;
465465
} elseif ($s === "false" || $s === "0") {
466466
return false;
467+
} elseif ($s === "" && $allownull) {
468+
return null;
467469
}
468470

469471
// fall through to handle other strings as an exception

pinc/theme.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ function html_logobar()
247247
$messages[] = sprintf(
248248
_("%d <a href='%s'>background jobs</a> failed in the past day."),
249249
$failed_jobs,
250-
"$code_url/tools/site_admin/show_job_log.php"
250+
"$code_url/tools/site_admin/show_job_log.php?succeeded=0"
251251
);
252252
}
253253
}

tools/site_admin/show_job_log.php

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
$days_ago = get_integer_param($_GET, 'days_ago', 1, 0, 365);
88
$job = $_GET['job'] ?? null;
9-
$event = $_GET['event'] ?? '';
9+
$succeeded = get_bool_param($_GET, 'succeeded', null, true);
1010

1111
$start_timestamp = time() - (60 * 60 * 24 * $days_ago);
1212

@@ -30,11 +30,25 @@
3030
echo "</tr>";
3131
echo "<tr>";
3232
echo " <th>" . _("Job") . "</th>";
33-
echo " <td><input name='job' type='text' value='" . attr_safe($job) . "'></td>";
33+
echo " <td>";
34+
echo " <select name='job'>";
35+
foreach (array_merge([_("All")], get_job_log_filenames()) as $jobname) {
36+
$value = $jobname == _("All") ? "" : attr_safe($jobname);
37+
$selected = $jobname == $job ? "selected" : "";
38+
echo "<option value='$value' $selected>" . html_safe($jobname) . "</option>";
39+
}
40+
echo " </select>";
41+
echo " </td>";
3442
echo "</tr>";
3543
echo "<tr>";
36-
echo " <th>" . _("Event") . "</th>";
37-
echo " <td><input name='event' type='text' value='" . attr_safe($event) . "'></td>";
44+
echo " <th>" . _("Status") . "</th>";
45+
echo " <td>";
46+
echo " <select name='succeeded'>";
47+
foreach ([_("All") => null, _("Succeeded") => 1, _("Failed") => 0] as $name => $value) {
48+
$selected = $succeeded === boolval($value) ? "selected" : "";
49+
echo "<option value='$value' $selected>$name</option>";
50+
}
51+
echo " </td>";
3852
echo "</tr>";
3953
echo "</table>";
4054
echo "<input type='submit' value='" . attr_safe(_("Show")) . "'>";
@@ -50,7 +64,7 @@
5064
echo "<th>" . _("Event") . "</th>";
5165
echo "<th>" . _("Comments") . "</th>";
5266
echo "</tr>";
53-
foreach (get_job_log_entries($start_timestamp, $job, $event) as $row) {
67+
foreach (get_job_log_entries($start_timestamp, $job, /*$event*/ null, $succeeded) as $row) {
5468
if ($row["succeeded"] === null) {
5569
$status = "";
5670
} elseif ($row["succeeded"]) {

0 commit comments

Comments
 (0)