From 7ddbf1e9ee3e1618ad67c568536c1a9f59e167b0 Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Tue, 23 Jul 2002 00:30:11 +0000 Subject: Allow for inclusion of broken chain reports and same operator/machine lists in stats pages. --- Echolot/Config.pm | 5 ++- Echolot/Stats.pm | 103 ++++++++++++++++++++++++++++++++--------------------- NEWS | 7 ++++ doc/pingd.conf.pod | 29 +++++++++++++++ 4 files changed, 103 insertions(+), 41 deletions(-) diff --git a/Echolot/Config.pm b/Echolot/Config.pm index 4e826c9..d90f304 100644 --- a/Echolot/Config.pm +++ b/Echolot/Config.pm @@ -1,7 +1,7 @@ package Echolot::Config; # (c) 2002 Peter Palfrader -# $Id: Config.pm,v 1.31 2002/07/22 02:18:30 weasel Exp $ +# $Id: Config.pm,v 1.32 2002/07/23 00:30:11 weasel Exp $ # =pod @@ -111,6 +111,9 @@ sub init($) { mixhome => 'mixhome', mixmaster => 'mix', tmpdir => 'tmp', + broken1 => 'broken1.txt', + broken2 => 'broken2.txt', + sameop => 'sameop.txt', commands_file => 'commands.txt', pidfile => 'pingd.pid', diff --git a/Echolot/Stats.pm b/Echolot/Stats.pm index b948546..2f58152 100644 --- a/Echolot/Stats.pm +++ b/Echolot/Stats.pm @@ -1,7 +1,7 @@ package Echolot::Stats; # (c) 2002 Peter Palfrader -# $Id: Stats.pm,v 1.23 2002/07/22 02:18:30 weasel Exp $ +# $Id: Stats.pm,v 1.24 2002/07/23 00:30:11 weasel Exp $ # =pod @@ -256,6 +256,20 @@ sub calculate($$) { }; }; +sub read_file($;$) { + my ($name, $fail_ok) = @_; + + unless (open (F, $name)) { + cluck("Could not open '$name': $!") unless ($fail_ok); + return undef; + }; + local $/ = undef; + my $result = ; + close (F); + + return $result; +}; + sub write_file($$;$) { my ($filebasename, $html_template, $output) = @_; @@ -293,10 +307,14 @@ sub write_file($$;$) { return 1; }; -sub build_mlist1($$;$) { - my ($rems, $filebasename, $html_template) = @_; +sub build_mlist1($$$$$;$) { + my ($rems, $broken1, $broken2, $sameop, $filebasename, $html_template) = @_; my $output = ''; + $output .= sprintf "\nGroups of remailers sharing a machine or operator:\n$sameop\n" if (defined $sameop); + $output .= sprintf "\nBroken type-I remailer chains:\n$broken1\n" if (defined $broken1); + $output .= sprintf "\nBroken type-II remailer chains:\n$broken2\n" if (defined $broken2); + $output .= sprintf "Last update: %s\n", makeDate(); $output .= sprintf "mixmaster history latency uptime\n"; $output .= sprintf "--------------------------------------------\n"; @@ -315,17 +333,17 @@ sub build_mlist1($$;$) { return 1; }; -sub build_rlist1($$;$) { - my ($rems, $filebasename, $html_template) = @_; +sub build_rlist1($$$$$;$) { + my ($rems, $broken1, $broken2, $sameop, $filebasename, $html_template) = @_; my $output = ''; for my $remailer (sort {$a->{'caps'} cmp $b->{'caps'}} @$rems) { $output .= $remailer->{'caps'}."\n" } - #$output .= sprintf "Groups of remailers sharing a machine or operator:\n\n"; - #$output .= sprintf "Broken type-I remailer chains:\n\n"; - #$output .= sprintf "Broken type-II remailer chains:\n\n"; + $output .= sprintf "\nGroups of remailers sharing a machine or operator:\n$sameop\n" if (defined $sameop); + $output .= sprintf "\nBroken type-I remailer chains:\n$broken1\n" if (defined $broken1); + $output .= sprintf "\nBroken type-II remailer chains:\n$broken2\n" if (defined $broken2); $output .= sprintf "\n"; $output .= sprintf "Last update: %s\n", makeDate(); @@ -349,8 +367,8 @@ sub build_rlist1($$;$) { }; -sub build_list2($$;$) { - my ($rems, $filebasename, $html_template) = @_; +sub build_list2($$$$$;$) { + my ($rems, $broken1, $broken2, $sameop, $filebasename, $html_template) = @_; my $output = ''; @@ -369,9 +387,9 @@ sub build_list2($$;$) { build_list2_capsstr($remailer->{'caps'}); }; - #$output .= sprintf "Groups of remailers sharing a machine or operator:\n\n"; - #$output .= sprintf "Broken type-I remailer chains:\n\n"; - #$output .= sprintf "Broken type-II remailer chains:\n\n"; + $output .= sprintf "\nGroups of remailers sharing a machine or operator:\n$sameop\n" if (defined $sameop); + $output .= sprintf "\nBroken type-I remailer chains:\n$broken1\n" if (defined $broken1); + $output .= sprintf "\nBroken type-II remailer chains:\n$broken2\n" if (defined $broken2); $output .= sprintf "\n\n\nRemailer-Capabilities:\n\n"; for my $remailer (sort {$a->{'caps'} cmp $b->{'caps'}} @$rems) { @@ -384,8 +402,8 @@ sub build_list2($$;$) { return 1; }; -sub build_clist($$;$) { - my ($remhash, $filebasename, $html_template) = @_; +sub build_clist($$$$$;$) { + my ($remhash, $broken1, $broken2, $sameop, $filebasename, $html_template) = @_; my $output = ''; @@ -414,9 +432,9 @@ sub build_clist($$;$) { }; }; - #$output .= sprintf "Groups of remailers sharing a machine or operator:\n\n"; - #$output .= sprintf "Broken type-I remailer chains:\n\n"; - #$output .= sprintf "Broken type-II remailer chains:\n\n"; + $output .= sprintf "\nGroups of remailers sharing a machine or operator:\n$sameop\n" if (defined $sameop); + $output .= sprintf "\nBroken type-I remailer chains:\n$broken1\n" if (defined $broken1); + $output .= sprintf "\nBroken type-II remailer chains:\n$broken2\n" if (defined $broken2); $output .= sprintf "\n\n\nRemailer-Capabilities:\n\n"; for my $nick (sort {$a cmp $b} keys %$all) { @@ -474,12 +492,17 @@ sub build_lists() { my $pubclist; my $rems; my $pubrems; + + my $broken1 = read_file( Echolot::Config::get()->{'broken1'}, 1); + my $broken2 = read_file( Echolot::Config::get()->{'broken2'}, 1); + my $sameop = read_file( Echolot::Config::get()->{'sameop'}, 1); + $rems = build_rems(['mix']); @$pubrems = grep { $_->{'showit'} } @$rems; - build_mlist1( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'mlist'); - build_list2( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'mlist2'); - build_mlist1( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'mlist', Echolot::Config::get()->{'templates'}->{'mlist'}); - build_list2( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'mlist2', Echolot::Config::get()->{'templates'}->{'mlist2'}); + build_mlist1( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'mlist'); + build_list2( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'mlist2'); + build_mlist1( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'mlist', Echolot::Config::get()->{'templates'}->{'mlist'}); + build_list2( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'mlist2', Echolot::Config::get()->{'templates'}->{'mlist2'}); if (Echolot::Config::get()->{'combined_list'}) { $clist->{'mix'} = $rems; $pubclist->{'mix'} = $pubrems; $pubrems = undef; @@ -487,10 +510,10 @@ sub build_lists() { $rems = build_rems(['cpunk-rsa', 'cpunk-dsa', 'cpunk-clear']); @$pubrems = grep { $_->{'showit'} } @$rems; - build_rlist1( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist'); - build_list2( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2'); - build_rlist1( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist', Echolot::Config::get()->{'templates'}->{'rlist'}); - build_list2( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2', Echolot::Config::get()->{'templates'}->{'rlist2'}); + build_rlist1( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist'); + build_list2( $rems,$broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2'); + build_rlist1( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist', Echolot::Config::get()->{'templates'}->{'rlist'}); + build_list2( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2', Echolot::Config::get()->{'templates'}->{'rlist2'}); if (Echolot::Config::get()->{'combined_list'} && ! Echolot::Config::get()->{'seperate_rlists'}) { $clist->{'cpunk'} = $rems; $pubclist->{'cpunk'} = $pubrems; $pubrems = undef; @@ -499,10 +522,10 @@ sub build_lists() { if (Echolot::Config::get()->{'seperate_rlists'}) { $rems = build_rems(['cpunk-rsa']); @$pubrems = grep { $_->{'showit'} } @$rems; - build_rlist1( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist-rsa', Echolot::Config::get()->{'templates'}->{'rlist-rsa'}); - build_list2( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2-rsa', Echolot::Config::get()->{'templates'}->{'rlist2-rsa'}); - build_rlist1( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist-rsa', Echolot::Config::get()->{'templates'}->{'rlist-rsa'}); - build_list2( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2-rsa', Echolot::Config::get()->{'templates'}->{'rlist2-rsa'}); + build_rlist1( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist-rsa', Echolot::Config::get()->{'templates'}->{'rlist-rsa'}); + build_list2( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2-rsa', Echolot::Config::get()->{'templates'}->{'rlist2-rsa'}); + build_rlist1( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist-rsa', Echolot::Config::get()->{'templates'}->{'rlist-rsa'}); + build_list2( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2-rsa', Echolot::Config::get()->{'templates'}->{'rlist2-rsa'}); if (Echolot::Config::get()->{'combined_list'}) { $clist->{'cpunk-rsa'} = $rems; $pubclist->{'cpunk-rsa'} = $pubrems; $pubrems = undef; @@ -510,10 +533,10 @@ sub build_lists() { $rems = build_rems(['cpunk-dsa']); @$pubrems = grep { $_->{'showit'} } @$rems; - build_rlist1( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist-dsa', Echolot::Config::get()->{'templates'}->{'rlist-dsa'}); - build_list2( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2-dsa', Echolot::Config::get()->{'templates'}->{'rlist2-dsa'}); - build_rlist1( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist-dsa', Echolot::Config::get()->{'templates'}->{'rlist-dsa'}); - build_list2( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2-dsa', Echolot::Config::get()->{'templates'}->{'rlist2-dsa'}); + build_rlist1( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist-dsa', Echolot::Config::get()->{'templates'}->{'rlist-dsa'}); + build_list2( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2-dsa', Echolot::Config::get()->{'templates'}->{'rlist2-dsa'}); + build_rlist1( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist-dsa', Echolot::Config::get()->{'templates'}->{'rlist-dsa'}); + build_list2( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2-dsa', Echolot::Config::get()->{'templates'}->{'rlist2-dsa'}); if (Echolot::Config::get()->{'combined_list'}) { $clist->{'cpunk-dsa'} = $rems; $pubclist->{'cpunk-dsa'} = $pubrems; $pubrems = undef; @@ -521,18 +544,18 @@ sub build_lists() { $rems = build_rems(['cpunk-clear']); @$pubrems = grep { $_->{'showit'} } @$rems; - build_rlist1( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist-clear', Echolot::Config::get()->{'templates'}->{'rlist-clear'}); - build_list2( $rems, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2-clear', Echolot::Config::get()->{'templates'}->{'rlist2-clear'}); - build_rlist1( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist-clear', Echolot::Config::get()->{'templates'}->{'rlist-clear'}); - build_list2( $pubrems, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2-clear', Echolot::Config::get()->{'templates'}->{'rlist2-clear'}); + build_rlist1( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist-clear', Echolot::Config::get()->{'templates'}->{'rlist-clear'}); + build_list2( $rems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'rlist2-clear', Echolot::Config::get()->{'templates'}->{'rlist2-clear'}); + build_rlist1( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist-clear', Echolot::Config::get()->{'templates'}->{'rlist-clear'}); + build_list2( $pubrems, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'rlist2-clear', Echolot::Config::get()->{'templates'}->{'rlist2-clear'}); if (Echolot::Config::get()->{'combined_list'}) { $clist->{'cpunk-clear'} = $rems; $pubclist->{'cpunk-clear'} = $pubrems; $pubrems = undef; }; }; if (Echolot::Config::get()->{'combined_list'}) { - build_clist( $clist, Echolot::Config::get()->{'private_resultdir'}.'/'.'clist', Echolot::Config::get()->{'templates'}->{'clist'}); - build_clist( $pubclist, Echolot::Config::get()->{'resultdir'}.'/'.'clist', Echolot::Config::get()->{'templates'}->{'clist'}); + build_clist( $clist, $broken1, $broken2, $sameop, Echolot::Config::get()->{'private_resultdir'}.'/'.'clist', Echolot::Config::get()->{'templates'}->{'clist'}); + build_clist( $pubclist, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'clist', Echolot::Config::get()->{'templates'}->{'clist'}); }; }; diff --git a/NEWS b/NEWS index 7b14b72..1a674ea 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,10 @@ +Changes in version + * Allow for inclusion of broken chain reports and same operator/machine + lists in stats pages. Broken chain reports are not generated + automatically; this is planned for a later release. For now you need + to supply this information in the files broken1.txt, broken2.txt, and + sameop.txt. + Changes in version 2.0beta17 - 2002-07-22 * You no longer need an extra Mixmaster installation for your pinger. Echolot can make use of any Mixmaster binary you alread have diff --git a/doc/pingd.conf.pod b/doc/pingd.conf.pod index ea4ac54..296beaa 100644 --- a/doc/pingd.conf.pod +++ b/doc/pingd.conf.pod @@ -434,6 +434,35 @@ As long as it exists pingd refuses to start up in daemon mode. Default: 'pidfile' => 'pingd.pid', +=item B + +File listing broken type I remailer chains. If it does not exist, the part is +skipped in generated stats. Otherwise its content is copied in verbatim. + + Default: 'broken1' => 'broken1.txt', + (havenco cmeclax) + (frog3 nycrem) + +=item B + +File listing broken type II remailer chains. If it does not exist, the part is +skipped in generated stats. Otherwise its content is copied in verbatim. + + Default: 'broken2' => 'broken2.txt', + Example conent: + (freedom lcs) + (* xganon) + +=item B + +File listing remailers that have the same operator or share a machine or other +important infrastructure. If it does not exist, the part is skipped in +generated stats. Otherwise its content is copied in verbatim. + + Default: 'sameop' => 'sameop.txt', + Example conent: + (xganon2 xganon) + (cracker redneck) =back -- cgit v1.2.3