diff --git a/tools/bulkdetect b/tools/bulkdetect index f86d13ca4728c342a9d27fc92ad8432c7b355cc2..536f361aa93c00ca1ff4d9b912fae20a5636a48c 100755 --- a/tools/bulkdetect +++ b/tools/bulkdetect @@ -3,9 +3,27 @@ # taggart 2019-06 $log='/var/log/sympa/wwsympa.log'; +$close = 5000; +$warn = 1000; + +# if -c flag, run as a cronjob otherwise report only +if ( $ARGV[0] eq '-c' ) { + $cron = 1; +} open(LOG, "$log") or die "cannot open log\n"; +# load list status into hash +$sql=qq(mysql -N --batch --database=sympa --execute "select name_list, status_list from list_table;"); + +open(SQL, "$sql|") or die "cannot get dump of bouncers\n"; + +while (<SQL>) { + chomp; + ($name,$status) = split(/\t/); + $lists{$name} = $status; +} + while (<LOG>) { chomp; if ( m/.*\[user (.*)\] \[list (.*)\] main::do_add\(\) do_add:(.+)/ ) { @@ -16,23 +34,44 @@ while (<LOG>) { } format Foo = -@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>> -$owner, $list $count +@>>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +$count, $list, $status,$owner . # set output format $~= 'Foo'; # print header -$owner = 'Owner adding'; -$list = 'List'; $count = 'Add'; -write; +$list = 'List'; +$status = 'Status'; +$owner = 'Owner adding'; + +if (! $cron ) { + write; +} foreach $key ( sort { $result{$b} <=> $result{$a} } keys %result) { ($owner,$list) = split /:/,$key; $count = $result{$key}; - write; + $status = $lists{$list}; + + if ( $cron ) { + if ( $status eq 'open' ) { + if ( $result{$key} > $close ) { + # close + print "$list is $count, autoclosing\n"; + `sympa.pl --close_list=$list\@lists.riseup.net` or die "cannot close $list\n"; + } elsif ($result{$key} > $warn ) { + # warn + print "$list is $count, send them a warning\n"; + } else { + last; + } + } + } else { + write; + } } ## Notes