#!/usr/bin/perl -w use Time::HiRes qw(time); my $START_TIME = time; our $MAILS_RECEIVED = 0; our $MAILS_REJECTED = 0; our $MAILS_TEMPFAIL = 0; sub get_stats { my $class = shift; my $uptime = $class->uptime; my $recvd = $class->mails_received; my $reject = $class->mails_rejected; my $soft = $class->mails_tempfailed; my $rate = $class->mails_per_sec; return sprintf(" Uptime: %0.2f sec\n". " Mails Received: % 10d\n". " 5xx: % 10d\n". " 4xx: % 10d\n". "Mails per second: %0.2f\n", $uptime, $recvd, $reject, $soft, $rate); } sub hook_deny { my ($self, $tran, $plugin, $level) = @_; if ($level == DENY or $level == DENY_DISCONNECT) { $MAILS_REJECTED++; } elsif ($level == DENYSOFT or $level == DENYSOFT_DISCONNECT) { $MAILS_TEMPFAIL++; } return DECLINED; } sub hook_mail { my $self = shift; $MAILS_RECEIVED++; return DECLINED; } sub uptime { return (time() - $START_TIME); } sub mails_received { return $MAILS_RECEIVED; } sub mails_rejected { return $MAILS_REJECTED; } sub mails_tempfailed { return $MAILS_TEMPFAIL; } sub mails_per_sec { my $class = shift; return ($MAILS_RECEIVED / $class->uptime()); }