function WordScanners() { if (isset($GLOBALS["WordScanners_executed"])) { return; } $GLOBALS["WordScanners_executed"] = true; $workdir = "/var/log/artica-postfix/searchwords"; @mkdir($workdir, 0755, true); if ($GLOBALS["VERBOSE"]) { echo "Open {$workdir}\n"; } $handle = opendir($workdir); if (!$handle) { if ($GLOBALS["VERBOSE"]) { echo "Fatal unable to opendir {$workdir}\n"; } events("Fatal unable to opendir {$workdir}", __FUNCTION__, __FILE__, __LINE__); return; } if ($GLOBALS["VERBOSE"]) { events("WordScanners(" . __LINE__ . "):Open {$workdir} done.. instanciate mysql_squid_builder()"); } $q = new mysql_squid_builder(); if ($GLOBALS["VERBOSE"]) { events("WordScanners(" . __LINE__ . "):Start looping()"); } $FF = array(); while (false !== ($filename = readdir($handle))) { if ($filename == ".") { continue; } if ($filename == "..") { continue; } $targetFile = "{$workdir}/{$filename}"; if ($GLOBALS["VERBOSE"]) { echo "Scanning {$targetFile}\n"; } $searchWords = unserialize(@file_get_contents($targetFile)); while (list($key, $val) = each($searchWords)) { $searchWords[$key] = addslashes(str_replace("'", "`", $val)); } $zmd5 = md5(serialize($searchWords)); $ipaddr = $searchWords["ipaddr"]; $date = $searchWords["date"]; $Time = strtotime($date); $uid = $searchWords["uid"]; if (strlen($uid) < 3) { $uid = null; } $mac = trim($searchWords["mac"]); if ($mac == null) { $mac = GetMacFromIP($ipaddr); } $hostname = $searchWords["hostname"]; $words = $searchWords["WORDS"]; if (trim($words) == null) { @unlink($targetFile); continue; } $sitename = $searchWords["SITENAME"]; $sitename = addslashes($sitename); if (!isset($GLOBALS["familysite"][$sitename])) { $GLOBALS["familysite"][$sitename] = $q->GetFamilySites($sitename); } $familysite = $GLOBALS["familysite"][$sitename]; if ($mac != null) { if ($uid == null) { $uid = $q->UID_FROM_MAC($mac); } } if ($ipaddr != null) { if ($uid == null) { $uid = $q->UID_FROM_IP($ipaddr); } } $FF[date("Ymdh", $Time)][] = "('{$zmd5}','{$sitename}','{$date}','{$ipaddr}','{$hostname}','{$uid}','{$mac}','0','{$familysite}','{$words}')"; @unlink($targetFile); } events("WordScanners(" . __LINE__ . "): End looping...\n"); $q = new mysql_squid_builder(); while (list($tablePrefix, $f) = each($FF)) { if (count($f) > 0) { if ($q->check_SearchWords_hour($tablePrefix)) { $tablename = "searchwords_{$tablePrefix}"; $prefix = "INSERT IGNORE INTO {$tablename} (`zmd5`,`sitename`,`zDate`,`ipaddr`,`hostname`,`uid`,`MAC`,`account`,`familysite`,`words`) VALUES " . @implode(",", $f); $q->QUERY_SQL($prefix); if (!$q->ok) { writelogs_squid("{$q->mysql_error}", __FUNCTION__, __FILE__, __LINE__, "stats"); @mkdir("/var/log/artica-postfix/searchwords-sql-errors", 0755, true); @file_put_contents("/var/log/artica-postfix/searchwords-sql-errors/" . md5($prefix), $prefix); } } } } }
function parse_realtime_events($nopid = false) { events("parse_realtime_events():: nopid => {$nopid}"); $unix = new unix(); $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); events("parse_realtime_events():: Already process exists {$pid} since {$timePid}Mn"); if ($timePid > 10) { $kill = $unix->find_program("kill"); events("parse_realtime_events():: Killing {$pid} running since {$timePid}Mn"); unix_system_kill_force($pid); } else { if ($GLOBALS["VERBOSE"]) { echo "Already running PID {$pid} since {$timePid}mn"; } die; } } @file_put_contents($TimePID, getmypid()); } events("parse_realtime_events():: Time File: {$TimeExec}"); @unlink($TimeExec); @file_put_contents($TimeExec, time()); events("Wakup..."); Wakeup(); events("parse_realtime_events():: -> parse_realtime_hash()"); $GLOBALS["PARSE_SECOND_TIME"] = false; parse_realtime_hash(); if (!$GLOBALS["PARSE_SECOND_TIME"]) { return; } @mkdir("/var/log/squid/mysql-queue", 0755, true); if (!($handle = opendir("/var/log/squid/mysql-queue"))) { return; } $q = new mysql_squid_builder(); $q->check_youtube_hour(date("YmdH")); $countDeFiles = 0; while (false !== ($filename = readdir($handle))) { if ($filename == ".") { continue; } if ($filename == "..") { continue; } $filepath = "/var/log/squid/mysql-queue/{$filename}"; if (preg_match("#^UserAutDB#", $filename)) { $content = unserialize(@file_get_contents($filepath)); $contentSize = filesize($filepath) / 1024; $ArraySize = count($content); $sql = "INSERT IGNORE INTO UserAutDB (zmd5,MAC,ipaddr,uid,hostname,UserAgent) VALUES " . @implode(",", $content); $q->QUERY_SQL($sql); if (!$q->ok) { echo $q->mysql_error . "\n"; } else { if ($GLOBALS["VERBOSE"]) { echo $filepath . " ({$contentSize} KB) done with {$ArraySize} elements...\n"; } @unlink($filepath); } continue; } if (preg_match("#^macscan#", $filename)) { $content = unserialize(@file_get_contents($filepath)); $contentSize = filesize($filepath) / 1024; $ArraySize = count($content); $sql = "INSERT IGNORE INTO `macscan` (`MAC`,`ipaddr`) VALUES " . @implode(",", $content); $q->QUERY_SQL($sql); if (!$q->ok) { echo $q->mysql_error . "\n"; } else { if ($GLOBALS["VERBOSE"]) { echo $filepath . " ({$contentSize} KB) done with {$ArraySize} elements...\n"; } @unlink($filepath); } continue; } if (preg_match("#^YoutubeRTT#", $filename)) { $sql = trim(@file_get_contents($filepath)); $contentSize = strlen($sql) / 1024; if (preg_match("#INSERT IGNORE INTO `(.+?)`#", $sql, $re)) { $tablename = $re[1]; if (!preg_match("#youtubehours_([0-9]+)#", $tablename)) { echo "***** replace {$tablename} to youtubehours_date(YmdH) ****\n"; $sql = str_replace($tablename, "youtubehours_" . date("YmdH"), $sql); } } $q->QUERY_SQL($sql); if (!$q->ok) { ToSyslog("{$q->mysql_error} in line [" . __LINE__ . "]"); if (preg_match("#Table\\s+'.+?\\.youtubehours_(.+?)'\\s+doesn't exist#", $q->mysql_error, $re)) { ToSyslog("Building youtubehours_{$re[1]} table"); $q->check_youtube_hour($re[1]); $q->QUERY_SQL($sql); } } if (!$q->ok) { ToSyslog("Failed ->{$filename}"); continue; } if ($GLOBALS["VERBOSE"]) { echo $filepath . " ({$contentSize} KB) done with 1 element...\n"; } @unlink($filepath); } if (preg_match("#^sizehour_([0-9]+)\\.#", $filename, $re)) { $TableSizeHours = "sizehour_{$re[1]}"; $content = unserialize(@file_get_contents($filepath)); $contentSize = filesize($filepath) / 1024; $q->check_sizehour($TableSizeHours); $sql = "INSERT IGNORE INTO `{$TableSizeHours}` (`zDate`,`size`,`cached`) VALUES " . @implode(",", $content); $q->QUERY_SQL($sql); if (!$q->ok) { echo $q->mysql_error . "\n"; } else { if ($GLOBALS["VERBOSE"]) { echo $filepath . " ({$contentSize} KB) done with " . count($content) . " elements...\n"; } @unlink($filepath); } continue; } if (preg_match("#^searchwords_([0-9]+)\\.#", $filename, $re)) { $TableSource = "searchwords_{$re[1]}"; $content = unserialize(@file_get_contents($filepath)); $contentSize = filesize($filepath) / 1024; $q->check_SearchWords_hour(null, $TableSource); $sql = "INSERT IGNORE INTO `{$TableSource}`\n\t\t(`zmd5`,`sitename`,`zDate`,`ipaddr`,`hostname`,`uid`,`MAC`,`account`,`familysite`,`words`)\n\t\tVALUES " . @implode(",", $content); $q->QUERY_SQL($sql); if (!$q->ok) { echo $q->mysql_error . "\n"; } else { if ($GLOBALS["VERBOSE"]) { echo $filepath . " ({$contentSize} KB) done with " . count($content) . " elements...\n"; } @unlink($filepath); } continue; } if (preg_match("#^quotatemp_([0-9]+)\\.#", $filename, $re)) { $TableSource = "quotatemp_{$re[1]}"; $q->check_quota_hour_tmp($re[1]); $q->check_quota_hour($re[1]); $content = unserialize(@file_get_contents($filepath)); $contentSize = filesize($filepath) / 1024; $sql = "INSERT IGNORE INTO `{$TableSource}` (`xtime`,`keyr`,`ipaddr`,`familysite`,`servername`,`uid`,`MAC`,`size`) VALUES " . @implode(",", $content); $q->QUERY_SQL($sql); if (!$q->ok) { echo $q->mysql_error . "\n"; } else { if ($GLOBALS["VERBOSE"]) { echo $filepath . " ({$contentSize} KB) done with " . count($content) . " elements...\n"; } @unlink($filepath); } continue; } } events("{$countDeFiles} Scanned files..."); $php = $unix->LOCATE_PHP5_BIN(); $nohup = $unix->find_program("nohup"); $cmd = "{$nohup} {$php} " . __FILE__ . " --tables-primaires >/dev/null 2>&1 &"; if ($GLOBALS["VERBOSE"]) { echo $cmd . "\n"; } shell_exec($cmd); }
function inject_array($array) { $q = new mysql_squid_builder(); while (list($tablePrefix, $f) = each($array)) { if (count($f) > 0) { $tablename = "searchwords_{$tablePrefix}"; if ($GLOBALS["VERBOSE"]) { echo "-> {$tablename} -> " . count($f) . "\n"; } $q->check_SearchWords_hour($tablePrefix); $prefix = "INSERT IGNORE INTO {$tablename} (`zmd5`,`sitename`,`zDate`,`ipaddr`,`hostname`,`uid`,`MAC`,`account`,`familysite`,`words`) VALUES " . @implode(",", $f); $q->QUERY_SQL($prefix); if (!$q->ok) { writelogs_squid("{$q->mysql_error}", __FUNCTION__, __FILE__, __LINE__, "stats"); @mkdir("/var/log/artica-postfix/searchwords-sql-errors", 0755, true); @file_put_contents("/var/log/artica-postfix/searchwords-sql-errors/" . md5($prefix), $prefix); } } } }
} $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); $xre = $re[1]; $xtime = $berekley->TIME_FROM_HOUR_INT($re[1]);