Use "tac" to reverse files, meaning the logs are now output neatly in
reverse-chronological order.
The existing code tried to read everything in $webstump_home/.. ; we
now only try and open errs files; this involves changing the guard
condition to 0 from undef (since forwards * undef isn't undef).
my $num= sub {
local ($_) = @_;
return $forwards * (
my $num= sub {
local ($_) = @_;
return $forwards * (
- m/^errs$/ ? -1 :
- m/^errs\.(\d+)(?:\.gz$)$/ ? $1 :
- undef
+ m/^errs$/ ? 1 :
+ m/^errs\.(\d+)(?:\.gz$)$/ ? ($1+2) :
+ 0
);
};
foreach my $leaf (
sort { $num->($a) <=> $num->($b) }
);
};
foreach my $leaf (
sort { $num->($a) <=> $num->($b) }
- grep { defined $num->($_) }
readdir LOGSDIR
) {
my $file= "$dir/$leaf";
readdir LOGSDIR
) {
my $file= "$dir/$leaf";
- if ($file =~ m/\.gz$/) {
- open LOGFILE, "zcat $file |" or die "zcat $file $!";
+ if ($file =~ m/\/errs.*\.gz$/) {
+ open LOGFILE, "zcat $file | tac |" or die "zcat $file | tac $!";
+ } elsif ($file =~ /errs/) {
+ open LOGFILE, "tac $file |" or die "tac $file $!";
- open LOGFILE, "< $file" or die "$file $!";
- }
+ die "Unexpected filename in scanlogs: $file";
+ }
while (<LOGFILE>) {
my $tgot= $callback->();
next unless $tgot;
while (<LOGFILE>) {
my $tgot= $callback->();
next unless $tgot;