function ScanPostfixID($q)
{
    $q = new mysql();
    $unix = new unix();
    $super = 0;
    $path = "{$GLOBALS["ARTICALOGDIR"]}/RTM";
    $timefile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".time";
    $timesched = $unix->file_time_min($timefile);
    if ($timesched <= $GLOBALS["ArticaSMTPStatsTimeFrame"]) {
        if ($GLOBALS["VERBOSE"]) {
            echo "{$timesched}/{$GLOBALS["ArticaSMTPStatsTimeFrame"]} aborting\n";
        }
        return;
    }
    if ($GLOBALS["VERBOSE"]) {
        echo "Scanning {$path}...\n";
    }
    $startedAT = date("Y-m-d H:i:s");
    $count = 0;
    if (!($handle = opendir($path))) {
        @mkdir($path, 0755, true);
        return;
    }
    $countDeFiles = 0;
    $KILL_THIS_QUEUE = false;
    while (false !== ($file = readdir($handle))) {
        if ($file == ".") {
            continue;
        }
        if ($file == "..") {
            continue;
        }
        $targetFile = "{$path}/{$file}";
        $countDeFiles++;
        if ($countDeFiles > $GLOBALS["ArticaSMTPStatsMaxFiles"]) {
            break;
        }
        $count++;
        $super++;
        if (preg_match("#\\.id-message\$#", $file)) {
            $amavis[] = $file;
            continue;
        }
        events("ScanPostfixID():: ({$count}/{$GLOBALS["ArticaSMTPStatsMaxFiles"]})");
        events("ScanPostfixID()::  \"{$path}/{$file}\"");
        if (!preg_match("#\\.msg\$#", $file)) {
            continue;
        }
        if ($file == "NOQUEUE.msg") {
            events("ScanPostfixID():: Delete /{$path}/{$file}");
            @unlink("{$path}/{$file}");
            continue;
        }
        if ($KILL_THIS_QUEUE) {
            @unlink("/{$path}/{$file}");
            continue;
        }
        if ($GLOBALS["VERBOSE"]) {
            echo "ArticaStatusUsleep:{$GLOBALS["ArticaStatusUsleep"]}ms\n";
        }
        usleep($GLOBALS["ArticaStatusUsleep"]);
        if ($count > $GLOBALS["ArticaSMTPStatsMaxFiles"]) {
            events("ScanPostfixID():: Break...");
            break;
        }
        if ($GLOBALS["VERBOSE"]) {
            echo "PostfixFullProcess -> {$targetFile}\n";
        }
        $t1 = time();
        if (!PostfixFullProcess($targetFile, $q)) {
            continue;
        }
        $t2 = time();
        $distanceInSeconds = round(abs($t2 - $t1));
        if ($GLOBALS["VERBOSE"]) {
            echo "PostfixFullProcess -> {$distanceInSeconds} seconds\n";
        }
        if ($distanceInSeconds > 3) {
            send_email_events("Too many time parsing {$GLOBALS["ARTICALOGDIR"]}/RTM", "Processing file take more than 3s ({$distanceInSeconds}s) the realtime monitor will be kept for this queue..", "postfix");
            $KILL_THIS_QUEUE = true;
        }
        SetStatus("Postfix", $GLOBALS["ArticaSMTPStatsMaxFiles"], $count, $startedAT);
        events("ScanPostfixID():: ({$count}/{$GLOBALS["ArticaSMTPStatsMaxFiles"]}) with a sleep of {$GLOBALS["ArticaStatusUsleep"]} microseconds line " . __LINE__);
    }
    if (is_array($amavis)) {
        reset($amavis);
        $max = count($amavis);
        $count = 0;
        while (list($num, $file) = each($amavis)) {
            $count = $count + 1;
            $super++;
            if (!preg_match("#\\.id-message\$#", $file)) {
                continue;
            }
            events("ScanPostfixID():amavis_logger(): parsing /{$path}/{$file} {$count}/{$max}");
            SetStatus("amavis", $max, $count, $startedAT);
            amavis_logger("{$path}/{$file}");
        }
    }
    $path = "/tmp/savemail-infos";
    if (!($handle = opendir($path))) {
        @mkdir($path, 0755, true);
        return;
    }
    $max = $GLOBALS["ArticaSMTPStatsMaxFiles"];
    $count = 0;
    while (false !== ($file = readdir($handle))) {
        if ($file == ".") {
            continue;
        }
        if ($file == "..") {
            continue;
        }
        $targetFile = "{$path}/{$file}";
        $super++;
        events("ScanPostfixID():amavis_logger(): parsing /tmp/savemail-infos/{$file} {$count}/{$max}");
        amavis_logger("/tmp/savemail-infos/{$file}");
    }
    if ($super++ > 0) {
        $unix->THREAD_COMMAND_SET($unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.postfix.vip.php");
        write_syslog("Success inserting {$super} mails events in mysql database...", __FILE__);
    }
}
Exemple #2
0
function ScanPostfixID($q)
{
    $q = new mysql();
    $unix = new unix();
    $super = 0;
    $path = "var/log/artica-postfix/RTM";
    $timefile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".time";
    $timesched = $unix->file_time_min($timefile);
    if ($timesched <= $GLOBALS["ArticaSMTPStatsTimeFrame"]) {
        if ($GLOBALS["VERBOSE"]) {
            echo "{$timesched}/{$GLOBALS["ArticaSMTPStatsTimeFrame"]} aborting\n";
        }
        return;
    }
    if ($GLOBALS["VERBOSE"]) {
        echo "Scanning {$path}...\n";
    }
    $files = DirList("/var/log/artica-postfix/RTM");
    $startedAT = date("Y-m-d H:i:s");
    $count = 0;
    if (!is_array($files)) {
        events("ScanPostfixID() No files.. Aborting");
        return null;
    }
    events("ScanPostfixID():: Get messages in {$path} " . count($files));
    $max = count($files);
    if ($max > 0) {
        events("ScanPostfixID():: Starting analyze {$max} sql files....", __FILE__);
    }
    if ($max > $GLOBALS["ArticaSMTPStatsMaxFiles"]) {
        $max = $GLOBALS["ArticaSMTPStatsMaxFiles"];
    }
    if ($max > 0) {
        while (list($num, $file) = each($files)) {
            $count++;
            $super++;
            if (preg_match("#\\.id-message\$#", $file)) {
                $amavis[] = $file;
                continue;
            }
            events("ScanPostfixID():: ({$count}/{$max})");
            events("ScanPostfixID()::  \"/{$path}/{$file}\"");
            if (!preg_match("#\\.msg\$#", $file)) {
                continue;
            }
            if ($file == "NOQUEUE.msg") {
                events("ScanPostfixID():: Delete /{$path}/{$file}");
                @unlink("/{$path}/{$file}");
                continue;
            }
            usleep($GLOBALS["ArticaStatusUsleep"]);
            if ($count > $max) {
                events("ScanPostfixID():: Break...");
                break;
            }
            if (PostfixFullProcess("/{$path}/{$file}", $q)) {
                SetStatus("Postfix", $max, $count, $startedAT);
                unset($files[$num]);
                events("ScanPostfixID():: ({$count}/{$max}) with a sleep of {$GLOBALS["ArticaStatusUsleep"]} microseconds line " . __LINE__);
            } else {
                continue;
            }
        }
        if (is_array($amavis)) {
            reset($amavis);
            $max = count($amavis);
            $count = 0;
            while (list($num, $file) = each($amavis)) {
                $count = $count + 1;
                $super++;
                if (!preg_match("#\\.id-message\$#", $file)) {
                    continue;
                }
                events("ScanPostfixID():amavis_logger(): parsing /{$path}/{$file} {$count}/{$max}");
                SetStatus("amavis", $max, $count, $startedAT);
                amavis_logger("/{$path}/{$file}");
            }
        }
    }
    $files = DirList("/tmp/savemail-infos");
    $max = count($files);
    if ($GLOBALS["VERBOSE"]) {
        echo "Scanning /tmp/savemail-infos...({$max} files)\n";
    }
    if ($max > 0) {
        events("ScanPostfixID():: Starting analyze {$max} sql files....", __FILE__);
    }
    if ($max > $GLOBALS["ArticaSMTPStatsMaxFiles"]) {
        $max = $GLOBALS["ArticaSMTPStatsMaxFiles"];
    }
    if (count($files > 0)) {
        $count = 0;
        while (list($num, $file) = each($files)) {
            $super++;
            events("ScanPostfixID():amavis_logger(): parsing /tmp/savemail-infos/{$file} {$count}/{$max}");
            amavis_logger("/tmp/savemail-infos/{$file}");
        }
    }
    if ($super++ > 0) {
        $unix->THREAD_COMMAND_SET($unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.postfix.vip.php");
        write_syslog("Success inserting {$super} mails events in mysql database...", __FILE__);
    }
}
function ScanPostfixID($q)
{
    $q = new mysql();
    $path = "var/log/artica-postfix/RTM";
    $files = DirList("/var/log/artica-postfix/RTM");
    $startedAT = date("Y-m-d H:i:s");
    $count = 0;
    if (!is_array($files)) {
        events("ScanPostfixID() No files.. Aborting");
        return null;
    }
    events('ScanPostfixID():: ##########################################################');
    events("ScanPostfixID():: Get msg in {$path} " . count($files));
    $max = count($files);
    if ($max > 0) {
        events("ScanPostfixID():: Starting analyze {$max} sql files....", __FILE__);
    }
    while (list($num, $file) = each($files)) {
        $count = $count + 1;
        if (preg_match("#\\.id-message\$#", $file)) {
            $amavis[] = $file;
            continue;
        }
        events("ScanPostfixID():: ({$count}/{$max})");
        events("ScanPostfixID()::  \"/{$path}/{$file}\"");
        if (!preg_match("#\\.msg\$#", $file)) {
            continue;
        }
        if ($file == "NOQUEUE.msg") {
            events("ScanPostfixID(): Delete /{$path}/{$file}");
            @unlink("/{$path}/{$file}");
            continue;
        }
        if (PostfixFullProcess("/{$path}/{$file}", $q)) {
            SetStatus("Postfix", $max, $count, $startedAT);
            unset($files[$num]);
            events("ScanPostfixID(): DOne...");
            events("ScanPostfixID():: ({$count}/{$max})");
        } else {
            continue;
        }
    }
    events("##########################################################");
    events("ScanPostfixID():Get messages-id");
    if (is_array($amavis)) {
        reset($amavis);
        $max = count($amavis);
        $count = 0;
        while (list($num, $file) = each($amavis)) {
            $count = $count + 1;
            if (!preg_match("#\\.id-message\$#", $file)) {
                continue;
            }
            events("##########################################################");
            events("ScanPostfixID():amavis_logger(): parsing /{$path}/{$file} {$count}/{$max}");
            SetStatus("amavis", $max, $count, $startedAT);
            amavis_logger("/{$path}/{$file}");
            events("##########################################################");
        }
    }
    if ($count > 0) {
        write_syslog("Success inserting {$count} mails events in mysql database...", __FILE__);
    }
}