From 92c3428f897fb5a16402d2a32d195c1bdf8b9e6a Mon Sep 17 00:00:00 2001 From: shuki Date: Wed, 4 Mar 2026 05:08:45 +0200 Subject: [PATCH] Add Remote Destination column to Active Cron Schedules table Split cron_to_human() to return timing and remotes separately. Co-Authored-By: Claude Opus 4.6 --- whm/gniza-whm/index.cgi | 8 +++++--- whm/gniza-whm/lib/GnizaWHM/Cron.pm | 18 ++++++------------ 2 files changed, 11 insertions(+), 15 deletions(-) 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{\n}; + print qq{\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{\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{\n}; } print qq{\n
ScheduleTiming
ScheduleTimingRemote Destination
$esc_name$human
$esc_name$esc_timing$esc_remotes
\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 --