From 3d0599dbb61083014528f86d31d1a95f76daad0c Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <andreas.romeyke@slub-dresden.de> Date: Thu, 10 Nov 2022 13:50:05 +0100 Subject: [PATCH] - added Regexp::Optimizer - added IO::Zlib - fixed loading of config at begin - added scan_log() --- lib/SLUB/LZA/Rosetta/TA.pm | 54 +++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/lib/SLUB/LZA/Rosetta/TA.pm b/lib/SLUB/LZA/Rosetta/TA.pm index d575169..54baa04 100644 --- a/lib/SLUB/LZA/Rosetta/TA.pm +++ b/lib/SLUB/LZA/Rosetta/TA.pm @@ -7,14 +7,20 @@ use YAML qw(LoadFile); use LWP::UserAgent; use Carp qw( croak ); use feature qw(say); +use Regexp::Optimizer; +use IO::Zlib; + our %config; -my $home = path( $ENV{'HOME'} ); -if ($home->is_dir() && !$home->is_rootdir) { - my $config_path = $home->child('.config')->child('ta-tool.rc'); - our $config_file = $config_path; - if ($config_path->is_file) { - %config = YAML::LoadFile($config_path); +BEGIN{ + my $home = path($ENV{'HOME'}); + if ($home->is_dir() && !$home->is_rootdir) { + my $config_path = $home->child('.config')->child('ta-tool.rc'); + our $config_file = $config_path; + if ($config_path->is_file) { + if (1) { say "DEBUG: loading config from '$config_file'"; } + %config = YAML::LoadFile($config_path); + } } } @@ -60,4 +66,40 @@ sub sru_search { } +sub scan_log { + my $date_rx=shift; + my $level_rx=shift; + my $match_rx=shift; + my $output_filter=shift; + # open dir from config{$logdir} + # for all files matching server.log*; do + # read lines + # filter lines + # return + my $directory = path($config{logdir}); + my $search_rxo = Regexp::Optimizer->new->optimize(qr/^$date_rx [^ ]* $level_rx (.*?)$match_rx(.*?)$/); + for ($directory->children( qr/^server.log/ )) { + my $file = $_; + if (!$file->is_file) { next; } + my $fh; + if ($file =~ m/\.gz$/) { + $fh = IO::Zlib->new("$file", "rb"); + } else { + $fh = $file->openr; + } + if (defined $fh) { + while(<$fh>) { + chomp; + if (! m/$search_rxo/) { + #print "no match for '$_'"; + next; + } + my $line = $output_filter->( $_ ); + say $line; + } + } + undef $fh; + } +} + 1; -- GitLab