| version 1.10, 2004/12/09 18:09:53 |
version 1.11, 2005/12/04 21:33:45 |
|
|
| # 2004-10-19 - created |
# 2004-10-19 - created |
| # |
# |
| |
|
| # $Platon: perl-modules/Platon/Log/Mail/Postfix.pm,v 1.9 2004/12/09 17:42:15 rajo Exp $ |
# $Platon: perl-modules/Platon/Log/Mail/Postfix.pm,v 1.10 2004/12/09 18:09:53 rajo Exp $ |
| |
|
| package Platon::Log::Mail::Postfix; |
package Platon::Log::Mail::Postfix; |
| |
|
| Line 23 use Platon::Log::Mail; |
|
| Line 23 use Platon::Log::Mail; |
|
| use Platon::DBI; |
use Platon::DBI; |
| use Date::Parse; |
use Date::Parse; |
| use Date::Format; |
use Date::Format; |
| |
#use Data::Dumper; |
| |
|
| $VERSION = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/); |
$VERSION = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/); |
| $DEBUG = 0 unless defined $DEBUG; |
$DEBUG = 0 unless defined $DEBUG; |
| |
|
| # |
# |
| # this saves postfix error message into MySQL |
# this saves postfix error message into MySQL |
| # |
# Note: data may be cached before inserting into MySQL |
| sub savelog($$;) |
sub savelog($$;) |
| { # {{{ |
{ # {{{ |
| my ($self, $line) = @_; |
my ($self, $line) = @_; |
| Line 310 sub savelog($$;) |
|
| Line 311 sub savelog($$;) |
|
| |
|
| } # }}} |
} # }}} |
| |
|
| |
# make cache empty |
| |
sub flush() |
| |
{ # {{{ |
| |
my ($self) = @_; |
| |
|
| |
$self->{dbh}->check(); |
| |
|
| |
if ($self->{_counter} >= $self->{_cache}) { |
| |
$self->{_counter} -= $self->{_cache}; |
| |
my @param = splice @{$self->{_param} }, 0, ($self->{_nr_columns} * $self->{_cache}); |
| |
$self->{sql_insert_multi}->execute( |
| |
@param |
| |
) or warn $self->{sql_insert_multi}->errstr; |
| |
} |
| |
foreach (1..$self->{_counter}) { |
| |
$self->{_counter}--; |
| |
my @param = splice @{$self->{_param} }, 0, $self->{_nr_columns}; |
| |
$self->{sql_insert}->execute( |
| |
@param |
| |
) or warn $self->{sql_insert}->errstr; |
| |
} |
| |
|
| |
} # }}} |
| |
|
| sub _savelog($$;) |
sub _savelog($$;) |
| { # {{{ |
{ # {{{ |
| my ($self, $data) = @_; |
my ($self, $data) = @_; |
| |
|
| $self->{dbh}->check(); |
# store parameters into cache |
| |
foreach my $key (@{$self->{_columns}}) { |
| |
push @{ $self->{_param} }, $data->{$key}; |
| |
} |
| |
$self->{_counter}++; |
| |
|
| $self->{sql_insert}->execute( |
# if cache is full, insert data into MySQL database |
| $data->{created}, $data->{host}, $data->{log_level}, $data->{process_name}, |
if ($self->{_counter} >= $self->{_cache}) { |
| $data->{pid}, $data->{postfix_key}, $data->{new_postfix_key}, $data->{client_hostname}, |
#carp "Cache full, flushing ..."; |
| $data->{client_ip}, $data->{uid}, $data->{"message-id"}, $data->{"resent-message-id"}, |
$self->flush(); |
| $data->{from}, $data->{to}, |
} |
| $data->{size}, $data->{nrcpt}, $data->{relay}, $data->{delay}, |
|
| $data->{status}, $data->{proto}, $data->{helo}, $data->{sasl_method}, |
return 1; |
| $data->{sasl_username}, |
|
| $data->{amavis_id}, $data->{amavis_counter}, $data->{amavis_virus_name}, $data->{amavis_banned_file}, |
|
| $data->{amavis_quarantine}, $data->{amavis_SA_score}, |
|
| $data->{rest} |
|
| ) or warn $self->{sql_insert}->errstr; |
|
| |
|
| } # }}} |
} # }}} |
| |
|
|
|
| #$self->prepare_keyword('sql_delete', "DELETE FROM " . $conf->table); |
#$self->prepare_keyword('sql_delete', "DELETE FROM " . $conf->table); |
| #$self->{sql_delete}->execute(); |
#$self->{sql_delete}->execute(); |
| |
|
| $self->prepare_keyword('sql_insert', " |
$self->{_cache} = $conf->cache; |
| INSERT INTO " . $conf->table . " |
$self->{_counter} = 0; |
| (created, hostname, log_level, process_name, |
$self->{_param} = ( ); |
| pid, postfix_key, new_postfix_key, client_hostname, |
$self->{_sql_columns} = [ qw' |
| client_ip, client_uid, message_id, resent_message_id, |
created hostname log_level process_name |
| mail_from, mail_to, |
pid postfix_key new_postfix_key client_hostname |
| mail_size, mail_nrcpt, relay, delay, |
client_ip client_uid message_id resent_message_id |
| status, proto, helo, sasl_method, |
mail_from mail_to |
| sasl_username, |
mail_size mail_nrcpt relay delay |
| amavis_id, amavis_counter, amavis_virus_name, amavis_banned_file, |
status proto helo sasl_method |
| amavis_quarantine, amavis_SA_score, |
sasl_username |
| message) |
amavis_id amavis_counter amavis_virus_name amavis_banned_file |
| VALUES |
amavis_quarantine amavis_SA_score |
| (?, ?, ?, ?, |
message |
| ?, ?, ?, ?, |
' ]; |
| ?, ?, ?, ?, |
|
| ?, ?, |
$self->{_columns} = [ qw' |
| ?, ?, ?, ?, |
created host log_level process_name |
| ?, ?, ?, ?, |
pid postfix_key new_postfix_key client_hostname |
| ?, |
client_ip uid message-id resent-message-id |
| ?, ?, ?, ?, |
from to |
| ?, ?, |
size nrcpt relay delay |
| ?) |
status proto helo sasl_method |
| "); |
sasl_username |
| |
amavis_id amavis_counter amavis_virus_name amavis_banned_file |
| |
amavis_quarantine amavis_SA_score |
| |
rest |
| |
' ]; |
| |
$self->{_nr_columns} = scalar(@{$self->{_columns}}); |
| |
|
| |
my $sql = ' (' . join(', ', @{$self->{_sql_columns}}) . ') VALUES '; |
| |
my $val_sql_columns = '(' . join(', ', map { '?' } @{$self->{_sql_columns}}) . ')'; |
| |
|
| |
$self->prepare_keyword('sql_insert', 'INSERT INTO ' . $conf->table . "$sql $val_sql_columns"); |
| |
$self->prepare_keyword('sql_insert_multi', 'INSERT IGNORE INTO ' . $conf->table . "$sql " . join(', ', map { $val_sql_columns } 1..$self->{_cache})); |
| |
|
| } # }}} |
} # }}} |
| |
|