[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: