From 74125300da013b913e32a3c7245a34f6d952601b Mon Sep 17 00:00:00 2001 From: Matt Simerson Date: Sun, 20 May 2012 23:04:36 -0400 Subject: [PATCH] connection_time: had single positional argument for loglevel, switched to named args which inherits the more flexible loglevel shortened logging line before: connection_time: Connection time from 66.118.151.187: 3.046 sec. after: connection_time: 3.046 s. --- plugins/connection_time | 64 ++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/plugins/connection_time b/plugins/connection_time index e569a16..bfac4d2 100644 --- a/plugins/connection_time +++ b/plugins/connection_time @@ -2,58 +2,68 @@ =head1 NAME -connection_time - log the duration of a connection +connection_time - log the duration of a connection =head1 DESCRIPTION The B plugin records the time of a connection between the -first and the last possible hook in qpsmtpd (I and -I) and writes a C (default, see below) line to +first and the last possible hook in qpsmtpd (I and +I) and writes a C (default, see below) line to the log. =head1 CONFIG -One optional argument: the name of the log level (e.g. C, -C, ...) the message should be logged with. Defaults to C. +=head2 loglevel + +Adjust the quantity of logging for this plugin. See docs/logging.pod + + connection_time loglevel +1 (less logging) + + connection_time loglevel -1 (more logging) =cut +use strict; +use warnings; + use Time::HiRes qw(gettimeofday tv_interval); use Qpsmtpd::Constants; sub register { - my ($self, $qp, @args) = @_; - die "too many arguments" - if @args > 1; - $self->{_level} = shift @args; - $self->{_level} = 'LOGNOTICE' - unless defined $self->{_level}; - $self->{_level} = Qpsmtpd::Constants::log_level($self->{_level}); - $self->{_level} = LOGNOTICE - unless defined $self->{_level}; + my ($self, $qp) = shift, shift; + if ( @_ == 1 ) { # backwards compatible + $self->{_args}{loglevel} = shift; + if ( $self->{_args}{loglevel} =~ /\D/ ) { + $self->{_args}{loglevel} = Qpsmtpd::Constants::log_level($self->{_args}{loglevel}); + }; + $self->{_args}{loglevel} ||= 6; + } + elsif ( @_ % 2 ) { + $self->log(LOGERROR, "invalid arguments"); + } + else { + $self->{_args} = { @_ }; # named args, inherits loglevel + } } sub hook_pre_connection { my ($self, @foo) = @_; $self->{_connection_start} = [gettimeofday]; + $self->log(LOGDEBUG, "started at " . $self->{_connection_start} ); return (DECLINED); } sub hook_post_connection { my ($self, @foo) = @_; - if ($self->{_connection_start}) { - my $remote = $self->connection->remote_ip; - my $elapsed = sprintf( - "%.3f", - tv_interval( - $self->{_connection_start}, - [gettimeofday] - ) - ); - $self->log($self->{_level}, - "Connection time from $remote: $elapsed sec."); - } + + if ( ! $self->{_connection_start} ) { + $self->log(LOGERROR, "Start time not set?!"); + return (DECLINED); + }; + + my $elapsed = tv_interval( $self->{_connection_start}, [gettimeofday] ); + + $self->log(LOGINFO, sprintf "%.3f s.", $elapsed ); return (DECLINED); } -# vim: ts=4 sw=4 expandtab syn=perl