3 our ($ng,@ARGV) = @ARGV;
9 use CGI qw/:standard *table end_*/;
14 our ($processline,$needmap);
15 our ($selectmid,$selectnum);
18 my ($taccat, $fn)= @_;
19 open F, "$taccat $fn |" or die $!;
23 $s[0]= strftime "%Y-%m-%d %H:%M:%S %Z", localtime $s[0];
29 my (@logs) = qw(event.log.0 event.log);
30 @logs= reverse @logs if $taccat eq 'tac';
31 processlog($taccat, $_) foreach @logs;
34 sub processline_print () {
36 $sp[3] =~ s/\@\w{0,2}/ at .. /;
37 my @sp= map { escapeHTML($_) } @sp;
39 s/\W/ sprintf "%%%02x", ord $& /ge;
42 if (length $s[1] && length $s[2]) {
43 my $url= url().'/message/'.$spu[1].'/'.$spu[2];
44 foreach my $i (qw(1 2)) {
45 $sp[$i]= a({ href=>$url }, $sp[$i] );
48 #print STDERR join('|',@sp),"\n";
52 sub processline_print_ifsingle () {
53 return unless $s[1] eq $selectnum
54 or $s[2] eq $selectmid;
58 our (%done_num,%done_id,%num2id,%id2num);
59 sub processline_queue_prescan () {
60 my ($num,$id,$e) = @s[1..2,5];
61 if (length $id and length $num) {
65 return unless $e =~ m/^decide reject discard|^notify reject|^post/;
66 #print STDERR "finishing $e $s[1] $s[2]\n";
67 $num= $id2num{$id} if !length $num;
68 $id= $num2id{$num} if !length $id;
69 #print STDERR "finishing $e $num $id\n";
70 $done_num{$num}++ if defined $num;
71 $done_id{$id}++ if defined $id;
73 sub processline_queue () {
74 return if $done_num{$s[1]};
75 return if $done_id{$s[2]};
83 $processline= \&processline_print;
85 if ($pi =~ m,^/message/(\d+)/(.*)$,) {
86 ($selectnum, $selectmid) = ($1,$2);
87 $title= "Single message ".escapeHTML($selectmid);
88 $processline= \&processline_print_ifsingle;
89 } elsif ($pi =~ m/^$/) {
90 $title= "Recent activity";
91 } elsif ($pi =~ m,^/queue,) {
92 $title= "Activity regarding still-queued messages";
93 $processline= \&processline_queue_prescan;
95 $processline= \&processline_queue;
98 print header(), start_html($title), h1($title), table();
100 print Tr(td([map { strong($_) } (qw(
114 print a({ href=>url() }, "All recent activity"), '; ';
115 print a({ href=>url().'/queue' }, "Unfinished business");