sourcecode
Limbic~Region
<b>THIS IS UNPOLISHED CODE</b>
<p>
One of my many hats I wear at work is Email administrator. One of the toughest jobs I have is identifying mail loops that are eating up system resources. I found a great program [http://www.klake.org/sma/|here] that did way more than I wanted, but it was written in C (powers that be wouldn't go for it). I also found [http://www.cpan.org/authors/id/J/JN/JNOLAN/countmail-1.01|this] on CPAN, but it didn't do what I wanted. After performing a [Super Search] here, I decided to write my own. It is VERY unpolished. Ideas that someone else could use to make this a much better program are:
<p>
<li> Provide ability to specify location of mail log
<li> Clean up output (trailing commas, <>, etc)
<li> Keep track of message size between pairs
<li> Parse status messages (deffered, user unknown, etc)
<p>
If anyone finds this useful and decides to implement any of those suggestions, let me know. For now, it is functional, but it can always be better.
<p>
<CODE>
#!/usr/bin/perl -w
use strict;
open(SENDMAIL, "/var/adm/syslog/mail.log");
my %pairs;
my %from;
while (my $line = <SENDMAIL>) {
chomp $line;
my @fields = split(" ", $line);
next if ( $fields[6] !~ /to=/ && $fields[6] !~ /from=/ );
if ( $fields[6] =~ /from=/ ) {
$from{$fields[5]} = "\L$fields[6]";
}
else {
$pairs{"$from{$fields[5]} \L$fields[6]"}++;
}
}
close(SENDMAIL);
foreach my $key (sort {$pairs{$b} <=> $pairs{$a}} (keys(%pairs))) {
print "$pairs{$key} $key\n";
}
</CODE>
<p>
Thanks,
<p>
[Limbic~Region]
Builds a hash whose index is a "from" "to" pair, and then increments it every time the pair is encountered. Finally, the information is sorted displaying the highest pairs first. Tested on HPUX 11.0 running Sendmail 8.9.3.
[E-Mail Programs] or [Text Processing]
[Limbic~Region]