#!/usr/local/cpanel/3rdparty/bin/perl # gniza WHM Plugin — Activity Logs # View backup and cron log files (read-only) use strict; use warnings; use lib '/usr/local/cpanel/whostmgr/docroot/cgi/gniza-whm/lib'; use Whostmgr::HTMLInterface (); use Cpanel::Form (); use GnizaWHM::Config; use GnizaWHM::UI; my $form = Cpanel::Form::parseform(); # Determine log directory from config my $log_dir = '/var/log/gniza'; my $main_conf = '/etc/gniza/gniza.conf'; if (-f $main_conf) { my $cfg = GnizaWHM::Config::parse($main_conf, 'main'); $log_dir = $cfg->{LOG_DIR} if $cfg->{LOG_DIR} && $cfg->{LOG_DIR} ne ''; } my $file = $form->{'file'} // ''; if ($file ne '') { show_file($file); } else { show_list(); } exit; # ── File List View ──────────────────────────────────────────── sub show_list { print "Content-Type: text/html\r\n\r\n"; Whostmgr::HTMLInterface::defheader('gniza — Logs'); print GnizaWHM::UI::page_header('gniza Backup Manager'); print GnizaWHM::UI::render_nav('logs.cgi'); print GnizaWHM::UI::render_flash(); unless (-d $log_dir) { print qq{
}
. GnizaWHM::UI::esc($log_dir)
. qq{.| Filename | Type | Date | Size | |
|---|---|---|---|---|
$esc_name | \n};
print qq{ $f->{type} | \n}; print qq{$date | \n}; print qq{$size | \n}; print qq{View | \n}; print qq{
$esc_name\n};
print qq{ Size: $file_size\n};
print qq{ Lines: $total_lines\n};
print qq{ Date: $file_date\n};
print qq{};
for my $line (@display_lines) {
my $esc = GnizaWHM::UI::esc($line);
if ($line =~ /\[ERROR\]/) {
print qq{$esc\n};
} elsif ($line =~ /\[WARN\]/) {
print qq{$esc\n};
} elsif ($line =~ /\[DEBUG\]/) {
print qq{$esc\n};
} else {
print "$esc\n";
}
}
print qq{\n};
}
print GnizaWHM::UI::page_footer();
}
# ── Helpers ───────────────────────────────────────────────────
sub _valid_log_filename {
my ($name) = @_;
return 0 unless defined $name && $name ne '';
return 1 if $name =~ /^gniza-\d{8}-\d{6}\.log$/;
return 1 if $name =~ /^cron-[a-zA-Z0-9_-]+\.log$/;
return 0;
}
sub _uri_escape {
my $str = shift // '';
$str =~ s/([^A-Za-z0-9\-._~])/sprintf("%%%02X", ord($1))/ge;
return $str;
}
sub _format_time {
my ($epoch) = @_;
return '' unless $epoch;
my @t = localtime($epoch);
return sprintf('%04d-%02d-%02d %02d:%02d', $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1]);
}
sub _human_size {
my ($bytes) = @_;
return '0 B' unless $bytes;
my @units = ('B', 'KB', 'MB', 'GB');
my $i = 0;
my $size = $bytes;
while ($size >= 1024 && $i < $#units) {
$size /= 1024;
$i++;
}
return ($i == 0) ? "$size B" : sprintf('%.1f %s', $size, $units[$i]);
}
1;