#!/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 register { my ($self) = @_; $self->register_hook('deny', 'increment_deny'); $self->register_hook('queue', 'increment_mails'); } 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 increment_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 increment_mails { 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()); }