diff --git a/whm/gniza-whm/index.cgi b/whm/gniza-whm/index.cgi
index c66518b..613c015 100644
--- a/whm/gniza-whm/index.cgi
+++ b/whm/gniza-whm/index.cgi
@@ -59,12 +59,14 @@ print qq{
\n<
print qq{
Active Cron Schedules
\n};
if (keys %$schedules) {
print qq{
\n};
- print qq{| Schedule | Timing |
\n};
+ print qq{| Schedule | Timing | Remote Destination |
\n};
print qq{\n};
for my $name (sort keys %$schedules) {
my $esc_name = GnizaWHM::UI::esc($name);
- my $human = GnizaWHM::UI::esc(GnizaWHM::Cron::cron_to_human($schedules->{$name}));
- print qq{| $esc_name | $human |
\n};
+ my ($timing, $remotes) = GnizaWHM::Cron::cron_to_human($schedules->{$name});
+ my $esc_timing = GnizaWHM::UI::esc($timing);
+ my $esc_remotes = GnizaWHM::UI::esc($remotes);
+ print qq{| $esc_name | $esc_timing | $esc_remotes |
\n};
}
print qq{\n
\n};
} else {
diff --git a/whm/gniza-whm/lib/GnizaWHM/Cron.pm b/whm/gniza-whm/lib/GnizaWHM/Cron.pm
index 55ae8f7..75b0101 100644
--- a/whm/gniza-whm/lib/GnizaWHM/Cron.pm
+++ b/whm/gniza-whm/lib/GnizaWHM/Cron.pm
@@ -111,14 +111,15 @@ sub remove_schedule {
}
# cron_to_human($cron_line)
-# Converts a gniza cron line to a human-readable description.
-# e.g. "0 * * * * /usr/local/bin/gniza backup --remote=rasp ..." => "Every hour, to rasp"
+# Converts a gniza cron line to human-readable timing and remotes.
+# Returns ($timing, $remotes) in list context.
+# e.g. "0 * * * * /usr/local/bin/gniza backup --remote=rasp ..." => ("Every hour", "rasp")
sub cron_to_human {
my ($cron_line) = @_;
# Extract the 5 cron fields
my @parts = split /\s+/, $cron_line, 6;
- return $cron_line if @parts < 6;
+ return ($cron_line, '') if @parts < 6;
my ($min, $hour, $dom, $mon, $dow) = @parts[0..4];
# Build timing description
@@ -126,20 +127,16 @@ sub cron_to_human {
my @dow_names = qw(Sunday Monday Tuesday Wednesday Thursday Friday Saturday);
if ($hour eq '*' && $dom eq '*' && $mon eq '*' && $dow eq '*') {
- # Hourly
$timing = 'Every hour';
}
elsif ($dom eq '*' && $mon eq '*' && $dow eq '*') {
- # Daily
$timing = sprintf('Daily at %02d:%02d', $hour, $min);
}
elsif ($dom eq '*' && $mon eq '*' && $dow =~ /^[0-6]$/) {
- # Weekly
my $day_name = $dow_names[$dow] // "day $dow";
$timing = sprintf('Every %s at %02d:%02d', $day_name, $hour, $min);
}
elsif ($mon eq '*' && $dow eq '*' && $dom =~ /^\d+$/) {
- # Monthly
my $suffix = ($dom == 1 || $dom == 21 || $dom == 31) ? 'st'
: ($dom == 2 || $dom == 22) ? 'nd'
: ($dom == 3 || $dom == 23) ? 'rd'
@@ -151,15 +148,12 @@ sub cron_to_human {
}
# Extract target remotes from --remote= flag
- my $remotes = '';
+ my $remotes = 'All';
if ($cron_line =~ /--remote=(\S+)/) {
$remotes = $1;
}
- if ($remotes ne '') {
- return "$timing, to $remotes";
- }
- return "$timing, all remotes";
+ return ($timing, $remotes);
}
# -- Private --