Ejemplo n.º 1
0
function STATS_LINE()
{
    $sock = new sockets();
    $EnableWebProxyStatsAppliance = $sock->GET_INFO("EnableWebProxyStatsAppliance");
    if (!is_numeric($EnableWebProxyStatsAppliance)) {
        $EnableWebProxyStatsAppliance = 0;
    }
    if ($EnableWebProxyStatsAppliance == 0) {
        die;
    }
    $q = new mysql_squid_builder();
    $q->CheckTables();
    if (isset($_POST["MYSSLPORT"])) {
        writelogs($_SERVER["REMOTE_ADDR"] . ":{$_POST["MYSSLPORT"]} production server....", __FUNCTION__, __FILE__, __LINE__);
        $hostname = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
        $time = date('Y-m-d H:i:s');
        $sql = "INSERT IGNORE INTO `squidservers`\n\t\t (ipaddr,hostname,port,created,udpated) \n\t\t VALUES ('{$_SERVER["REMOTE_ADDR"]}','{$hostname}','{$_POST["MYSSLPORT"]}','{$time}','{$time}')";
        $ligne = mysql_fetch_array($q->QUERY_SQL("SELECT ipaddr FROM squidservers WHERE ipaddr='{$_SERVER["REMOTE_ADDR"]}'"));
        if ($ligne["ipaddr"] == null) {
            $q->QUERY_SQL($sql);
        } else {
            $q->QUERY_SQL("UPDATE `squidservers` SET udpated='{$time}' WHERE ipaddr='{$ligne["ipaddr"]}'");
        }
    } else {
        writelogs("MYSSLPORT is not set....", __FUNCTION__, __FILE__, __LINE__);
    }
    $array = unserialize(base64_decode($_POST["STATS_LINE"]));
    while (list($table, $contentArray) = each($array)) {
        if (preg_match("#squidhour_([0-9]+)#", $table, $re)) {
            $q->TablePrimaireHour($re[1]);
        }
        if (!$q->TABLE_EXISTS($table)) {
            writelogs("{$table} no such table, aborting ", __FUNCTION__, __FILE__, __LINE__);
            echo "<ANSWER>{$table} no such table</ANSWER>\n";
            die;
        }
        $prefixsql = "INSERT IGNORE INTO {$table} (`sitename`,`uri`,`TYPE`,`REASON`,`CLIENT`,`zDate`,`zMD5`,`remote_ip`,`country`,`QuerySize`,`uid`,`cached`,`MAC`,`hostname`) VALUES ";
        if (count($contentArray) > 0) {
            $sql = "{$prefixsql}" . @implode(",", $contentArray);
            $q->QUERY_SQL($sql);
            if (!$q->ok) {
                writelogs($q->mysql_error, __FUNCTION__, __FILE__, __LINE__);
                if (preg_match("#Column count doesn.+?t match#", $q->mysql_error)) {
                    continue;
                }
                echo "ERROR: {$q->mysql_error}\n";
                return;
            }
        }
    }
    writelogs("Received " . strlen($_POST["STATS_LINE"]) . " bytes " . count($array) . " lines from " . $_SERVER["REMOTE_ADDR"] . ":{$_POST["MYSSLPORT"]} (success)", __FUNCTION__, __FILE__, __LINE__);
    echo "<ANSWER>OK</ANSWER>\n";
}
function inject_array($array)
{
    if ($GLOBALS["EnableRemoteStatisticsAppliance"] == 1) {
        events("Injecting -> inject_array_remote() Load:{$GLOBALS["SYSTEM_INTERNAL_LOAD"]}: on Line: " . __LINE__);
        inject_array_remote($array);
        return;
    }
    $q = new mysql_squid_builder();
    $q->CheckTables();
    if ($q->MysqlFailed) {
        events_tail("squid-injector:: Mysql connection failed, aborting.... Line: " . __LINE__);
        inject_failed($array);
    }
    while (list($table, $contentArray) = each($array)) {
        if (preg_match("#squidhour_([0-9]+)#", $table, $re)) {
            $q->TablePrimaireHour($re[1]);
        }
        $prefixsql = "INSERT IGNORE INTO {$table} (`sitename`,`uri`,`TYPE`,`REASON`,`CLIENT`,`zDate`,`zMD5`,`remote_ip`,`country`,`QuerySize`,`uid`,`cached`,`MAC`,`hostname`) VALUES ";
        $sql = "{$prefixsql}" . @implode(",", $contentArray);
        if ($GLOBALS["VERBOSE"]) {
            echo $sql . "\n";
        }
        events("inject_array::Injecting -> table `{$table}` " . count($contentArray) . " rows in line:" . __LINE__);
        $q->QUERY_SQL($sql);
        if (!$q->ok) {
            events("Fatal !!! inject_array::Injecting -> ERROR: {$q->mysql_error} : in line:" . __LINE__);
            inject_failed($array);
            return;
        }
    }
}
function parse_tables_primaires($nopid = false)
{
    $unix = new unix();
    $unix->chown_func("squid", "squid", "/var/log/squid/mysql-rttime");
    $TimePID = "/etc/artica-postfix/pids/" . basename(__FILE__) . ".pid";
    $TimeExec = "/etc/artica-postfix/pids/" . basename(__FILE__) . ".time";
    if (!$nopid) {
        $pid = @file_get_contents($TimePID);
        if ($unix->process_exists($pid)) {
            $timePid = $unix->PROCCESS_TIME_MIN($pid);
            if ($timePid > 5) {
                $kill = $unix->find_program("kill");
                unix_system_kill_force($pid);
            } else {
                if ($GLOBALS["VERBOSE"]) {
                    echo "Already running PID {$pid} since {$timePid}mn";
                }
                die;
            }
        }
        @file_put_contents($TimePID, getmypid());
    }
    if (!($handle = opendir("/var/log/squid/mysql-rttime"))) {
        return;
    }
    $q = new mysql_squid_builder();
    $q->TablePrimaireHour(date("YmdH"));
    $countDeFiles = 0;
    while (false !== ($filename = readdir($handle))) {
        if ($filename == ".") {
            continue;
        }
        if ($filename == "..") {
            continue;
        }
        $filepath = "/var/log/squid/mysql-rttime/{$filename}";
        events("parse_tables_primaires():: Scanning {$filepath}");
        if (!preg_match("#^squidhour_([0-9]+)\\.#", $filename, $re)) {
            events("parse_tables_primaires():: Failed {$filepath} -> not match #^squidhour_([0-9]+)\\.");
            @unlink($filepath);
            continue;
        }
        $xtime = $re[1];
        $q->TablePrimaireHour($xtime);
        $content = unserialize(@file_get_contents($filepath));
        $contentSize = filesize($filepath) / 1024;
        $ArraySize = count($content);
        events("parse_tables_primaires():: squidhour_{$xtime} Inserting " . count($content) . " element(s)");
        if (count($content) == 0) {
            ToSyslog("parse_tables_primaires():: squidhour_{$xtime}: {$filepath} no row has been written");
            @unlink($filepath);
            continue;
        }
        $sql = "INSERT IGNORE INTO `squidhour_{$xtime}`  (`sitename`,`uri`,`TYPE`,`REASON`,`CLIENT`,`hostname`,`zDate`,`zMD5`,`uid`,`QuerySize`,`cached`,`MAC`,`category`) \n\t\tVALUES " . @implode(",", $content);
        $q->QUERY_SQL($sql);
        if (!$q->ok) {
            if ($GLOBALS["VERBOSE"]) {
                echo "\n\n ********************************************************************* \n\n{$q->mysql_error}\n*********************************************************************\n\n";
            }
            events("parse_tables_primaires(): Fatal: MySQL error:");
            if (preg_match("#Table 'squidlogs\\.(.+?)' doesn't exist#", $q->mysql_error, $re)) {
                if ($GLOBALS["VERBOSE"]) {
                    echo "Creating table: {$re[1]}\n";
                    $q->TablePrimaireHour(null, false, $re[1]);
                    $q->QUERY_SQL($sql);
                }
            }
        }
        if (!$q->ok) {
            events("parse_tables_primaires(): Fatal: MySQL error:");
            events("{$sql}");
            continue;
        }
        if ($GLOBALS["VERBOSE"]) {
            echo $filepath . " ({$contentSize} KB) done with {$ArraySize} elements...\n";
        }
        @unlink($filepath);
        $countDeFiles++;
    }
    if ($GLOBALS["VERBOSE"]) {
        echo "{$countDeFiles} Files parsed done\n";
    }
    parse_tables_cache_primaires();
}
    if ($unix->file_time_min($pidTime) < 15) {
        die;
    }
    $pid = $unix->get_pid_from_file($pidfile);
    if ($unix->process_exists($pid)) {
        die;
    }
}
@unlink($pidTime);
@file_put_contents($pidTime, time());
@file_put_contents($pidfile, getmypid());
access_db();
$php5 = $unix->LOCATE_PHP5_BIN();
$xtime = time();
$q = new mysql_squid_builder();
$q->TablePrimaireHour(date("YmdH", $xtime));
$q->check_youtube_hour(date("YmdH", $xtime));
$q->check_SearchWords_hour(date("YmdH", $xtime));
$q->check_quota_hour(date("YmdH", $xtime));
$f[] = "#!/bin/sh";
$f[] = "export LC_ALL=C";
$f[] = "{$php5} " . __FILE__ . " >/dev/null 2>&1";
$f[] = "";
@file_put_contents("/etc/cron.hourly/SquidHourlyTables.sh", @implode("\n", $f));
@chmod("/etc/cron.hourly/SquidHourlyTables.sh", 0755);
unset($f);
function tests($fullpath)
{
    $berekley = new parse_berekley_dbs();
    $filename = basename($fullpath);
    preg_match("#([0-9]+)_#", $filename, $re);
Ejemplo n.º 5
0
function inject_array($array)
{
    $q = new mysql_squid_builder();
    while (list($table, $contentArray) = each($array)) {
        if (preg_match("#squidhour_([0-9]+)#", $table, $re)) {
            $q->TablePrimaireHour($re[1], true);
        }
        $prefixsql = "INSERT IGNORE INTO {$table} (`sitename`,`uri`,`TYPE`,`REASON`,`CLIENT`,`zDate`,`zMD5`,`remote_ip`,`country`,`QuerySize`,`uid`,`cached`,`MAC`,`hostname`) VALUES ";
        $sql = "{$prefixsql}" . @implode(",", $contentArray);
        //if($GLOBALS["VERBOSE"]){echo $sql."\n";}
        $q->QUERY_SQL($sql);
        events("inject_array::Injecting -> table `{$table}` " . count($contentArray) . " rows affected: {$q->mysql_affected_rows} in line:" . __LINE__);
        if (!$q->ok) {
            if ($GLOBALS["FORCE"]) {
                echo "\n\n**************\n\n" . $sql . "\n**************\n";
            }
            if ($GLOBALS["VERBOSE"]) {
                echo "\n\n**************\n\n" . $sql . "\n**************\n";
            }
            events("Fatal !!! inject_array::Injecting -> ERROR: {$q->mysql_error} : in line:" . __LINE__);
            inject_failed($array);
            return;
        }
    }
}