#!/usr/bin/perl -w our ($ng,$staticfiles,@ARGV) = @ARGV; chdir $ng or die $!; use strict (qw(vars)); use IO::Handle; use POSIX; use CGI qw/:standard *table end_* -no_xhtml/; our @lines= (); our @s; our $oddeven = "o"; our ($processline,$needmap); our ($selectmid,$selectnum); sub processlog ($$) { my ($taccat, $fn)= @_; open F, "$taccat $fn |" or die $!; while () { chomp; @s= split /\t/; $s[0]= strftime "%Y-%m-%d %H:%M:%S %Z", localtime $s[0]; &$processline(); $oddeven =~ y/oe/eo/; } } sub processlogs ($) { my ($taccat) = @_; my (@logs) = qw(event.log.0 event.log); @logs= reverse @logs if $taccat eq 'tac'; processlog($taccat, $_) foreach @logs; } sub processline_print () { my @sp= @s; $sp[3] =~ s/\@\w{0,2}/ at .. /; @sp= map { escapeHTML($_) } @sp[0..5]; $sp[3] =~ s/</\
</; $sp[2]=~s/\@/\@<\/span>/; my @spu= map { s/\W/ sprintf "%%%02x", ord $& /ge; $_; } @s; if (length $s[1] && length $s[2]) { my $url= url().'/message/'.$spu[1].'/'.$spu[2]; foreach my $i (qw(1 2)) { $sp[$i]= a({ href=>$url }, $sp[$i]."
" ); } } if (length $s[6]) { $sp[5]= a({ href=>"$staticfiles/nr-$s[6].txt" }, $sp[5] ); } print "$sp[0]"; print "$sp[1] $sp[2]"; print "$sp[3]$sp[4]$sp[5]\n"; } sub processline_print_ifsingle () { return unless $s[1] eq $selectnum or $s[2] eq $selectmid; processline_print(); } our (%done_num,%done_id,%num2id,%id2num); sub processline_queue_prescan () { my ($num,$id,$e) = @s[1..2,5]; if (length $id and length $num) { $id2num{$id}= $num; $num2id{$num}= $id; } return unless $e =~ m/^decide reject discard|^notify reject|^post/; #print STDERR "finishing $e $s[1] $s[2]\n"; $num= $id2num{$id} if !length $num; $id= $num2id{$num} if !length $id; #print STDERR "finishing $e $num $id\n"; $done_num{$num}++ if defined $num; $done_id{$id}++ if defined $id; } sub processline_queue () { return if $done_num{$s[1]}; return if $done_id{$s[2]}; processline_print(); } my $pi= path_info(); our $title; $needmap= 0; $processline= \&processline_print; if ($pi =~ m,^/message/(\d+)/(.*)$,) { ($selectnum, $selectmid) = ($1,$2); $title= "Single message ".escapeHTML($selectmid); $processline= \&processline_print_ifsingle; } elsif ($pi =~ m/^$/) { $title= "Recent activity - $ng"; } elsif ($pi =~ m,^/queue,) { $title= "Activity regarding still-queued messages"; $processline= \&processline_queue_prescan; processlogs('cat'); $processline= \&processline_queue; } my $css=<$title, -style=>{'-code'=>$css}), h1($title), start_table(); print Tr(td([map { strong($_) } (qw( Date Reference/Message-ID From Subject Event ))])); processlogs('tac'); print end_table(); print p(); print a({ href=>url() }, "All recent activity"), '; '; print a({ href=>url().'/queue' }, "Unfinished business"); print end_html();