calculation of mail traffic
Hi all,
I'd like to calculate mail traffic on a per domain base. Calculation should
include mail sent and mail received. I've been thinking of using the message id
as some sort of "key" for everything since it's supposed to be unique, right ?
I've been searching for a ready made solution and haven't come accross
something, so I started working on a solution.
My current ideas:
- calculate traffic for each day (via cronjob) with traffic in/out per domain
- domains which this calculation should be done for are listed in accounting_domains
I've built a small example program (attached as example.pl) an example log file
is also attached.
My knowledge of Perl is not quite well so I'm looking for help to archive the
goal of doing this calculation. Anybody out there for help ? :-)
Kind Regards,
Markus Welsch
Mar 17 07:11:43 box postfix/pickup[489]: 2C2C7C0A8: uid=1000 from=<markus>
Mar 17 07:11:43 box postfix/cleanup[493]: 2C2C7C0A8: message-id=<20030317061143.GA481@box.example.de>
Mar 17 07:11:43 box postfix/qmgr[451]: 2C2C7C0A8: from=<markus@example.com>, size=435, nrcpt=7 (queue active)
Mar 17 07:11:44 box postfix/smtp[495]: 2C2C7C0A8: to=<recipient1@example.net>, relay=XXX.XXX.net[XXX.XXX.XXX.XXX], delay=1, status=sent (250 2.0.0 h2H72LG00567 Message accepted for delivery)
Mar 17 07:11:44 box postfix/smtp[495]: 2C2C7C0A8: to=<recipient2@example.net>, relay=XXX.XXX.net[XXX.XXX.XXX.XXX], delay=1, status=sent (250 2.0.0 h2H72LG00567 Message accepted for delivery)
Mar 17 07:11:44 box postfix/smtp[494]: 2C2C7C0A8: to=<recipient3@example.net>, relay=XXX.XXX.net[XXX.XXX.XXX.XXX], delay=1, status=sent (250 2.0.0 h2H72LG00566 Message accepted for delivery)
Mar 17 07:11:44 box postfix/smtp[494]: 2C2C7C0A8: to=<recipient4@example.net>, relay=XXX.XXX.net[XXX.XXX.XXX.XXX], delay=1, status=sent (250 2.0.0 h2H72LG00566 Message accepted for delivery)
Mar 17 07:11:44 box postfix/smtp[494]: 2C2C7C0A8: to=<recipient5@example.de>, relay=XXX.XXX.net[XXX.XXX.XXX.XXX], delay=1, status=sent (250 2.0.0 h2H72LG00566 Message accepted for delivery)
Mar 17 07:11:44 box postfix/smtp[494]: 2C2C7C0A8: to=<recipient6@example.de>, relay=XXX.XXX.net[XXX.XXX.XXX.XXX], delay=1, status=sent (250 2.0.0 h2H72LG00566 Message accepted for delivery)
Mar 17 07:11:44 box postfix/smtp[494]: 2C2C7C0A8: to=<recipient7@example.de>, relay=XXX.XXX.net[XXX.XXX.XXX.XXX], delay=1, status=sent (250 2.0.0 h2H72LG00566 Message accepted for delivery)
#!/usr/bin/perl -w
use strict;
# Mar 5 13:47:15 box postfix/smtpd[873]: 8859A1FFB0: client=ns.suk.net[195.126.239.3]
# Mar 5 13:47:15 box postfix/qmgr[741]: 8859A1FFB0: from=<markus.welsch@suk.net>, size=1987, nrcpt=1 (queue
# active)
# Mar 5 13:47:16 box postfix/virtual[879]: 8859A1FFB0: to=<test@box.suk.net>, relay=virtual, delay=1, status=sent
# (maildir)
my $client_ip;
my $mail_from;
my $mail_to;
my $message_id;
my $message_size;
my $message_time;
my $nr_recipient;
my %messages;
open(FILE, "mail.log") or die "Couldn't open mail.log: $!; aborting";
while (<FILE>) {
if ($_ =~ /(\S+ .* \d+:\d+:\d+) .* postfix\/smtpd\[.*\]: (\S+): client=.*\[(\d+\.\d+\.\d+\.\d+)\]$/) {
$message_time = $1;
$message_id = $2;
$client_ip = $3;
print "Message-ID: \t", $message_id,"\n";
print "Message-Time: \t", $message_time,"\n";
print "Client-IP: \t", $client_ip,"\n\n";
} elsif ($_ =~ /.* postfix\/qmgr\[.*\]: (\S+): from=<(\S+)>, size=(\d+), nrcpt=(\d+)/) {
$message_id = $1;
$mail_from = $2;
$message_size = $3;
$nr_recipient = $4;
print "Message-ID: \t", $message_id, "\n";
print "Mail from: \t", $mail_from, "\n";
print "Messagesize: \t", $message_size, "\n";
print "No recipients:\t", $nr_recipient, "\n\n";
} elsif ($_ =~ /.* postfix\/.*: (\S+): to=<(\S+)>/) {
$message_id = $1;
$mail_to = $2;
print "Message-ID: \t", $message_id, "\n";
print "Mail to: \t", $mail_to, "\n\n";
}
}
close(FILE);
Reply to: