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);
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; } } }