Hi Eric.

I'm making You aware of it because I know that many of us users  may not
be aware that when some things change - like a log file  it has an
impact on some other programs like F2B or the spamdyke script, and then
You will be swammed by emails asking a lot of issues not really related
to QMT - TAKING YOUR TIME OFF FUTURE QMT ENHANCEMENTS ;-)



I have inserted the Spamdyke-stats-report.pl script below, I have not
changed anything but I guess that timestamp have to change from tai64
and file and filelocation will be the needed changes.

NB - THIS IS ONLY FOR LATEST QMT FOR COS6 where logfiles has changed /
will change  to be written in /var/log/maillog


#!/usr/bin/perl -w

# Spamdyke-Stats-Report.pl
#
# by Brent Gardner
#
# Uses spamdyke-stats script to generate a report about the previous
# day's Spamdyke activity.
#
# Uses qmail-inject to email the report to a specified recipient
#
#####################################################################

use diagnostics;
use strict;
use Time::TAI64 qw(:tai);
use Time::HiRes qw(time);
use Date::Calc  qw(Today Add_Delta_Days);
use POSIX       qw(strftime);


# This is the machine that's running this script.
# In my world it's also the machine that generated the SMTP logs that are
# processed by this script.
#
my $MachineName = "your domain";


# This is the directory containing this script and the spamdyke-stats
script.
#
my $ScriptRoot = "/usr/share/qmt/scripts";


# This is used as a root name for temp files generated by this script.
# The sample setting implies a directory called 'tmp' in the $ScriptRoot
# directory.
#
my $TempFile = "$ScriptRoot/tmp/spamdyke-stats-report";


# This is the path to the directory containing the SMTP log files generated
# by qmail.
#
my $SMTPLogRoot = "/var/log/qmail/smtp";


# Today's date in this format: YYYY/MM/DD
#
my $Today = sprintf( "%04d/%02d/%02d", Today() );


# Yesterday's date in this format: YYYY/MM/DD
#
my $Yesterday = sprintf( "%04d/%02d/%02d", Add_Delta_Days( Today(), -1 ) );


# This is the email address that the report will be sent to.
# The '@' symbol needs to be escaped.
#
my $MailTo = "postmaster\@Your domaine";


my $LogFilePath  = "";
my $LogFile      = "";
my $LogFileTime  = "";
my $ScriptOutput = "";


# Open a temporary output file for log content,
# overwriting any existing content in that file.
#
open TempFileRaw, ">$TempFile.raw" or die $!;


# Process the current qmail SMTP log file
#
$LogFilePath = "$SMTPLogRoot/current";

ProcessQmailSMTPLog($LogFilePath);


# Look for qmail SMTP log files that are older than current but were
# modified today or yesterday
#
opendir LogDir, $SMTPLogRoot or die $!;

while ( $LogFile = readdir(LogDir) ) {

    # Only look at files that are probably qmail log files
    #
    next unless ( $LogFile =~ /\.[su]$/ );

    # Only look at log files where the modified date is today or yesterday
    #
    $LogFileTime = strftime "%Y/%m/%d",
localtime((stat("$SMTPLogRoot/$LogFile"))[9]);
    next unless ( ( $LogFileTime eq $Yesterday ) or ( $LogFileTime eq
$Today ) );

    # Process targeted log files. (entries that match yesterday's
    # date are copied to the temp output file)
    #
    ProcessQmailSMTPLog("$SMTPLogRoot/$LogFile");

}

closedir LogDir;


close TempFileRaw;


# Prepare an email message to be sent using qmail-inject
#
open MailBody, ">$TempFile.body" or die $!;


# Begin the message.
#
print MailBody "To: <$MailTo>\n";
print MailBody "subject: $MachineName Spamdyke Stats Report for
$Yesterday\n\n";
print MailBody "This report contains statistical information about
messages that were \n";
print MailBody "rejected by Spamdyke on $MachineName because of RBL
lookups or misbehaved \n";
print MailBody "remote SMTP server.\n\n";
print MailBody "These messages were rejected before $MachineName
acknowleged receipt of the \n";
print MailBody "message.  This means that the sending server is
responsible for generating \n";
print MailBody "any Non-Delivery Report.\n\n";
print MailBody "This also means that SpamAssassin did not have to
process these messages.  \n";
print MailBody "This saves a lot of processing power.  SpamAssassin
checks can be CPU, \n";
print MailBody "memory and network-intensive.\n\n";
print MailBody "This report was generated ";
print MailBody localtime() . "\n\n\n";

# Add info from the spamdyke-stats script.
#
$ScriptOutput = `cat $TempFile.raw | $ScriptRoot/spamdyke-stats`;

print MailBody "$ScriptOutput\n\n\n";


print MailBody "Path to this script:
$ScriptRoot/Spamdyke-Stats-Report.pl\n";


close MailBody;


# Mail the report using qmail-inject.
#
system("/var/qmail/bin/qmail-inject -f$MachineName < $TempFile.body");


# This sub will copy log entries that match yesterday's date into the temp
# file.
#
sub ProcessQmailSMTPLog {

    my $Path      = shift;
    my $TimeStamp = "";

    open SMTPLog, "<", $Path or die $!;

    while (<SMTPLog>) {

        my $Line = $_;

        # log file lines that don't start with '@' will be ignored.
        #
        if ( substr($Line,0,1) eq '@' ) {

            $TimeStamp = substr($Line,0,25);

            # if the date in the timestamp is yesterday then it is copied to
            # the temp file.
            #
            if ( tai2strftime($TimeStamp,"%Y/%m/%d") eq $Yesterday ) {
                print TempFileRaw $Line;
            }

        }

    }

    close SMTPLog;

}



Cheers,
Finn



Den 12-07-2014 18:34, Eric Shubert skrev:
> On 07/12/2014 02:32 AM, Finn Buhelt wrote:
>> Hi Eric.
>>
>> Am I correct that Spamdyke-stats-report.pl needs to be altered to read
>> the mighty maillog log file now in order to compile other than 0's in
>> the report ? ;-)
>>
>> Cheers
>> Finn
>>
>> ---------------------------------------------------------------------
> 
> I expect that you are. :)
> 
> I don't appear to have a copy of that script anywhere. Can you post your
> copy (duly modified would be nice)? I'll then include it in the
> qmailtoaster-util package.
> 
> 
> I didnt' mean to ignore your post about F2B and logging, but I'll reply
> here.
> 
> I expect you're correct that F2B configurations will also need to be
> modified as well when logging changes are made. This will need to be
> done by individual F2B users, as there's not yet a stock F2B package for
> QMT. I'd like to include a F2B package with QMT at some point, but I
> want to get logging changes done first, so logging is stable when F2B is
> implemented.
> 
> My understanding of F2B at this point (I haven't used it yet) is that it
> scans the pertinent log files. I think it'd be better implemented as a
> service if that's possible, with a copy of whatever log messages are
> pertinent being fed to it real-time. Perhaps that's the way it's done, I
> don't know. In any case, I think it can be efficiently integrated into
> the syslog process once that's established, and I hope to do so at some
> point. F2B will be a nice 'stock' addition to QMT.
> 
> Thanks.
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: qmailtoaster-list-unsubscr...@qmailtoaster.com
For additional commands, e-mail: qmailtoaster-list-h...@qmailtoaster.com

Reply via email to