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<connection_time> plugin records the time of a connection between the
-first and the last possible hook in qpsmtpd (I<pre-connection> and 
-I<post-connection>) and writes a C<LOGNOTICE> (default, see below) line to 
+first and the last possible hook in qpsmtpd (I<pre-connection> and
+I<post-connection>) and writes a C<LOGINFO> (default, see below) line to
 the log.
 
 =head1 CONFIG
 
-One optional argument: the name of the log level (e.g. C<LOGNOTICE>,
-C<LOGDEBUG>, ...) the message should be logged with. Defaults to C<LOGNOTICE>.
+=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
-- 
1.7.9.6

Reply via email to