diff --git a/lib/SLUB/LZA/Rosetta/TA.pm b/lib/SLUB/LZA/Rosetta/TA.pm index 5e6b01838403f7f7caa3e0e2fd41050e0295352d..7227ccbbb4737f9880a627901471f5e9cbf26860 100644 --- a/lib/SLUB/LZA/Rosetta/TA.pm +++ b/lib/SLUB/LZA/Rosetta/TA.pm @@ -9,6 +9,8 @@ use Carp qw( croak ); use feature qw(say); use Regexp::Optimizer; use IO::Zlib; +use Text::CSV_PP; + # ABSTRACT: main module for ta-tool our %config; @@ -64,6 +66,87 @@ sub sru_search { } } +{ + my $bred = "\e[1;31m"; + my $red = "\e[31m"; + my $green = "\e[32m"; + my $blue = "\e[34m"; + my $bblue = "\e[1;34m"; + my $gray = "\e[90m]"; + my $reversed = "\e[7m"; + my $reset = "\e[0m"; + my $back_yellow = "\e[103m"; + my $back_cyan = "\e[45m"; + my $back_green = "\e[43m"; + my $datetime_rx=qr/\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d/; + sub colorize { + my $line = shift; + my $opt = shift; + my $match_rx = shift; + # patterns in common interest: + $line =~ s/^($datetime_rx)/${blue}$1${reset}/; + if ($opt->{match} ne ".*") { + $line =~ s/( (DEBUG|INFO|WARN|ERROR) .*?)($match_rx)/$1${reversed}$3${reset}/; # order important! + } + $line =~ s/ (DEBUG) / ${gray}$1${reset} / + || $line =~ s/ (INFO) / ${green}$1${reset} / + || $line =~ s/ (WARN) / ${red}$1${reset} / + || $line =~ s/ (ERROR) / ${bred}$1${reset} /; + $line =~ s/(SIP ?\d+)/${back_yellow}$1${reset}/g; + $line =~ s/(IE ?\d+)/${back_yellow}$1${reset}/g; + $line =~ s/(dc.identifier)/${back_cyan}$1${reset}/g; + return $line; + } + sub colorize_trace { + my $line = shift; + my $deposit_dir = shift; + my $deposit_id = shift; + my $sip_id = shift; + my $ie_pid = shift; + my $rep_id = shift; + # patterns in common interest: + $line =~ s/^($datetime_rx)/${blue}$1${reset}/; + $line =~ s/ (DEBUG) / ${gray}$1${reset} / + || $line =~ s/ (INFO) / ${green}$1${reset} / + || $line =~ s/ (WARN) / ${red}$1${reset} / + || $line =~ s/ (ERROR) / ${bred}$1${reset} /; + if (defined $deposit_dir) {$line =~ s/($deposit_dir)/${back_green}$1${reset}/g;} + if (defined $deposit_id ) {$line =~ s/(dep_|Deposit Activity ID=|depositId=)($deposit_id)/$1${back_green}$2${reset}/g;} + if (defined $sip_id ) {$line =~ s/((sipId|SIP|PID|pid)[ =]?)($sip_id)/$1${back_green}$2${reset}/g;} + if (defined $ie_pid ) {$line =~ s/(IE ?)($ie_pid)/$1${back_green}$2${reset}/g;} + if (defined $rep_id ) {$line =~ s/(Representation )($rep_id)/$1${back_green}$2${reset}/g;} + return $line; + } +} + +{ + my $csv; + sub csv { + my $line = shift; + my $opt = shift; + my $match_rx = shift; + my $ret; + if (!defined $csv) { + $csv = Text::CSV_PP->new( + { + sep_char => ";", + + } + ); + $ret=join(";", qw(date time level where msg))."\n"; + } + my $date_rx=qr/\d\d\d\d-\d\d-\d\d/; + my $time_rx=qr/\d\d:\d\d:\d\d,\d\d\d/; + my $level_rx=qr/DEBUG|INFO|WARN|ERROR/; + my $where_rx=qr/\[.*?\]/; + my $msg_rx=qr/.*$/; + $line =~ m/^($date_rx) ($time_rx) ($level_rx) ($where_rx) ($msg_rx)/; + $csv->combine($1, $2, $3, $4, $5); + $ret.= $csv->string; + } +} + + sub helper_scan_log { my $directory = shift; my $fh_processing = shift; @@ -86,6 +169,8 @@ sub helper_scan_log { sub trace_log { my $with_trace=shift; + my $with_color=shift; + my $output_filter=shift; my $directory = path($config{logdir}); my $deposit_id; my $deposit_dir; @@ -101,10 +186,23 @@ sub trace_log { # 3. ... SIP 13156, Deposit Activity ID=17589Properties my $sip_rx = qr/(SIP |sipId=)/; - my $pre_rx = qr/\d{4}-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d INFO .*/; - my $line_rx1= Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(originalDirName=|depositId=|$sip_rx)$searchid}); - my $line_rx2= Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(SIP |Deposit Activity ID=)$searchid}); - my $line_rx3= Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: .*$searchid}); + my $date_rx = qr/\d{4}-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d/; + my $pre_rx = qr/$date_rx INFO .*/; + my $line_rx1 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(originalDirName=|depositId=|$sip_rx)$searchid}); + my $line_rx2 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*(SIP |Deposit Activity ID=)$searchid}); + my $line_rx3 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: .*$searchid}); + my $line_rx4 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*((Representation $searchid IE \d+)|(Representation \d+ IE $searchid)) Copy ID: \d+}); + if ($with_trace =~ m/^SIP/) { # search specific sip + $line_rx1 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*($sip_rx)$searchid}); + $line_rx2 = $line_rx1; + } elsif ($with_trace =~ m/^IE/) { # search specific IE + $line_rx3 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: REP\d+ \(IE$searchid\)}); + $line_rx4 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Representation \d+ IE $searchid Copy ID: \d+}); + } elsif ($with_trace =~ m/^REP/) { + $line_rx3 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Loaded \d+ files for: REP$searchid \(IE\d+\)}); + $line_rx4 = Regexp::Optimizer->new->optimize(qr{^$pre_rx.*Representation $searchid IE \d+ Copy ID: \d+}); + } + # my $search_rxo = Regexp::Optimizer->new->optimize(qr/^$date_rx [^ ]* $level_rx (.*?)$match_rx(.*?)$/); my $fh_processing_stage1 = sub { my $fh = shift; @@ -117,25 +215,58 @@ sub trace_log { if (! m/$searchid/) {next;} chomp; if ( m/$line_rx1/ ) { - if (!defined $deposit_dir and m/originalDirName=([^,]*),/) { $deposit_dir = $1; } if (!defined $sip_id and m/$sip_rx(\d{6}),/) { $sip_id = "SIP" . $2; } + if (!defined $deposit_dir and m/originalDirName=([^,]*),/) { $deposit_dir = $1; } if (!defined $deposit_id and m/depositId=(\d{6}),/) { $deposit_id = $1;} } elsif (m/$line_rx2/) { - if (!defined $deposit_id and m/Deposit Activity ID=(\d{6})/) { $deposit_id = $1;} if (!defined $sip_id and m/SIP (\d{6})/) { $sip_id = $1;} + if (!defined $deposit_id and m/Deposit Activity ID=(\d{6})/) { $deposit_id = $1;} } elsif (m/$line_rx3/) { - if (!defined $rep_id and m/Loaded \d+ files for: (REP\d+)/) { $rep_id = $1;} if (!defined $ie_pid and m/Loaded \d+ files for: REP\d+ \((IE\d+)/) { $ie_pid = $1;} + if (!defined $rep_id and m/Loaded \d+ files for: (REP\d+)/) { $rep_id = $1;} + } elsif (m/$line_rx4/) { + my $rx = qr/Representation (\d{6}) IE (\d{6})/; + if (!defined $ie_pid and m/$rx/) { $ie_pid = $2;} + if (!defined $rep_id and m/$rx/) { $rep_id = $1;} } } return 1; }; helper_scan_log($directory, $fh_processing_stage1); + no warnings; my $match= "found: DIR=$deposit_dir, DEPOSITID=$deposit_id, SIPID=$sip_id, IEPID=$ie_pid, REPID=$rep_id"; + use warnings; say "$match"; say "-"x(length($match)); # now call scan_log and use own colorizer + if ($with_color) { + $output_filter = sub {colorize_trace($_[0], $deposit_dir, $deposit_id, $sip_id, $ie_pid, $rep_id)}; + } my $fh_processing_stage2 = sub { + my $fh = shift; + no warnings; + my $nextline_rx1= Regexp::Optimizer->new->optimize(qr{originalDirName=$deposit_dir|(depositID|Deposit Activity ID)[= ]$deposit_id|(sipId|SIP[= ]?)$sip_id}); + my $nextline_rx2=Regexp::Optimizer->new->optimize(qr{IE[ ]?$ie_pid|REP[ ]?$rep_id}); + use warnings; + while(<$fh>) { + if ( + ( + defined $deposit_dir + and defined $deposit_id + and defined $sip_id + and !m/$nextline_rx1/ + ) or ( + defined $ie_pid + and defined $rep_id + and !m/$nextline_rx2/ + ) + ) { + next; + } + chomp; + my $line = $output_filter->( $_ ); + say $line; + } }; helper_scan_log($directory, $fh_processing_stage2); } @@ -155,11 +286,11 @@ sub scan_log { my $fh_processing = sub { my $fh = shift; while(<$fh>) { - chomp; if (! m/$search_rxo/) { #print "no match for '$_'"; next; } + chomp; my $line = $output_filter->( $_ ); say $line; } diff --git a/lib/SLUB/LZA/Rosetta/TA/Command/log.pm b/lib/SLUB/LZA/Rosetta/TA/Command/log.pm index de41f940d0f7b206c042ae789abf9970df67ab03..1b19cb12fadea150b41d624629285cf58b83fa8e 100644 --- a/lib/SLUB/LZA/Rosetta/TA/Command/log.pm +++ b/lib/SLUB/LZA/Rosetta/TA/Command/log.pm @@ -5,7 +5,6 @@ use feature qw(say); use Regexp::Optimizer; use DateTime; use DateTime::Format::DateParse; -use Text::CSV_PP; use SLUB::LZA::Rosetta::TA -command; @@ -100,64 +99,6 @@ sub create_regex_from_to { my $rxo = Regexp::Optimizer->new->optimize(qr/$date_rx_string/); return $rxo; } -{ - my $bred = "\e[1;31m"; - my $red = "\e[31m"; - my $green = "\e[32m"; - my $blue = "\e[34m"; - my $bblue = "\e[1;34m"; - my $gray = "\e[90m]"; - my $reversed = "\e[7m"; - my $reset = "\e[0m"; - my $back_yellow = "\e[103m"; - my $back_cyan = "\e[45m"; - my $datetime_rx=qr/\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d/; - sub colorize { - my $line = shift; - my $opt = shift; - my $match_rx = shift; - # patterns in common interest: - $line =~ s/^($datetime_rx)/${blue}$1${reset}/; - if ($opt->{match} ne ".*") { - $line =~ s/( (DEBUG|INFO|WARN|ERROR) .*?)($match_rx)/$1${reversed}$3${reset}/; # order important! - } - $line =~ s/ (DEBUG) / ${gray}$1${reset} / - || $line =~ s/ (INFO) / ${green}$1${reset} / - || $line =~ s/ (WARN) / ${red}$1${reset} / - || $line =~ s/ (ERROR) / ${bred}$1${reset} /; - $line =~ s/(SIP ?\d+)/${back_yellow}$1${reset}/g; - $line =~ s/(IE ?\d+)/${back_yellow}$1${reset}/g; - $line =~ s/(dc.identifier)/${back_cyan}$1${reset}/g; - return $line; - } -} - -{ - my $csv; - sub csv { - my $line = shift; - my $opt = shift; - my $match_rx = shift; - my $ret; - if (!defined $csv) { - $csv = Text::CSV_PP->new( - { - sep_char => ";", - - } - ); - $ret=join(";", qw(date time level where msg))."\n"; - } - my $date_rx=qr/\d\d\d\d-\d\d-\d\d/; - my $time_rx=qr/\d\d:\d\d:\d\d,\d\d\d/; - my $level_rx=qr/DEBUG|INFO|WARN|ERROR/; - my $where_rx=qr/\[.*?\]/; - my $msg_rx=qr/.*$/; - $line =~ m/^($date_rx) ($time_rx) ($level_rx) ($where_rx) ($msg_rx)/; - $csv->combine($1, $2, $3, $4, $5); - $ret.= $csv->string; - } -} sub execute { my ($self, $opt, $args) = @_; @@ -186,9 +127,14 @@ sub execute { my $with_trace; if (defined $opt->trace_sip) { $with_trace = $opt->trace_sip; - SLUB::LZA::Rosetta::TA::trace_log($with_trace); + if (defined $opt->colorize) { + $output_filter = sub { colorize($_[0], $opt, $match_rx); }; + } else { + $output_filter=sub { $_[0]; }; + } + SLUB::LZA::Rosetta::TA::trace_log($with_trace, $opt->colorize, $output_filter); } else { - SLUB::LZA::Rosetta::TA::scan_log($date_rx, $level_rx, $match_rx, $output_filter, $with_trace); + SLUB::LZA::Rosetta::TA::scan_log($date_rx, $level_rx, $match_rx, $output_filter); } }