function squidclient_mgr_storedir() { $unix = new unix(); $data = $unix->squidclient("storedir", true); @unlink("/usr/share/artica-postfix/ressources/logs/web/storedir.cache"); @file_put_contents("/usr/share/artica-postfix/ressources/logs/web/storedir.cache", $data); }
} $unix = new unix(); $pidtime = "/etc/artica-postfix/pids/" . basename(__FILE__) . ".MAIN.time"; $time = $unix->file_time_min($pidtime); if (!$GLOBALS["FORCE"]) { if ($GLOBALS["VERBOSE"]) { echo "Current {$time}Mn, need 5mn\n"; } if ($time < 5) { return; } } @unlink($pidtime); @file_put_contents($pidtime, time()); $MAIN = array(); $data = $unix->squidclient("client_list"); if ($data == null) { return; } $f = explode("\n", $data); while (list($index, $line) = each($f)) { $line = trim($line); if ($line == null) { continue; } if (preg_match("#ICP Requests#", $line, $re)) { continue; } if (preg_match("#Address:\\s+([0-9\\.]+)#", $line, $re)) { $IPADDR = $re[1]; continue;
function redirectors_array($aspid = false) { $cache_file = "/usr/share/artica-postfix/ressources/logs/web/squid_redirectors_status.db"; $NotifyTime = "/etc/artica-postfix/pids/squid.redirectors.notify"; $pidFile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".pid"; $unix = new unix(); if ($aspid) { $pid = $unix->get_pid_from_file($pidFile); if ($unix->process_exists($pid)) { $pptime = $unix->PROCCESS_TIME_MIN($pid, 10); if ($GLOBALS["VERBOSE"]) { echo "Process already running PID {$pid} since {$pptime}Mn\n"; } return; } @file_put_contents($pidFile, getmypid()); } $sock = new sockets(); $datas = explode("\n", $unix->squidclient("redirector")); $redirector = array(); $RedirectorsArray = unserialize(base64_decode($sock->GET_INFO("SquidRedirectorsOptions"))); if (!is_numeric($RedirectorsArray["url_rewrite_children"])) { $RedirectorsArray["url_rewrite_children"] = 20; } while (list($index, $line) = each($datas)) { if (!preg_match("#([0-9]+)\\s+([0-9]+)\\s+([0-9]+)\\s+([0-9]+)\\s+([0-9]+)(.*?)\\s+([0-9\\.]+)\\s+([0-9\\.]+)\\s+(.*)#", $line, $re)) { continue; } $redirector[$re[1]] = array("FD" => $re[2], "PID" => $re[3], "REQ" => $re[4], "REP" => $re[5], "STATE" => $re[6], "TIME" => $re[7], "OFFSET" => $re[8], "URI" => $re[9]); } @unlink($cache_file); if (count($redirector) == 0) { return; } @file_put_contents($cache_file, serialize($redirector)); @chmod($cache_file, 0755); $MonitConfig = unserialize(base64_decode($sock->GET_INFO("SquidWatchdogMonitConfig"))); $MonitConfig = watchdog_config_default($MonitConfig); if ($MonitConfig["watchdog"] == 0) { return; } $percent = count($redirector) / intval($RedirectorsArray["url_rewrite_children"]); $percent = $percent * 100; if ($GLOBALS["VERBOSE"]) { echo count($redirector) . "/{$RedirectorsArray["url_rewrite_children"]} = {$percent}%\n"; } if ($percent > 90) { $severity = 1; $action = "notify"; $NotifyTimeEx = $unix->file_time_min($NotifyTime); if ($NotifyTimeEx < 10) { return; } @unlink($NotifyTime); @file_put_contents($NotifyTime, time()); if ($percent > 95) { $severity = 0; $action = "reload"; } squid_admin_mysql($severity, "Warning! redirectors reach {$percent}% [action={$action}]", @implode("\n", $datas)); if ($severity == 0) { shell_exec($unix->LOCATE_SQUID_BIN() . " -f /etc/squid3/squid.conf -k reconfigure"); } } }
#!/usr/bin/php -q <?php if (posix_getuid() != 0) { die("Cannot be used in web server mode\n\n"); } $GLOBALS["AS_ROOT"] = true; $GLOBALS["MYPID"] = getmypid(); include_once dirname(__FILE__) . '/framework/class.unix.inc'; include_once dirname(__FILE__) . '/framework/frame.class.inc'; include_once dirname(__FILE__) . '/framework/class.settings.inc'; $unix = new unix(); echo $unix->squidclient("info");
function ipcache() { $unix = new unix(); echo "<articadatascgi>" . base64_encode($unix->squidclient("ipcache")) . "</articadatascgi>"; }
function purge_dns() { $unix = new unix(); $pidFile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".pid"; if (!$GLOBALS["VERBOSE"]) { $pid = $unix->get_pid_from_file($pidFile); if ($unix->process_exists($pid, __FILE__)) { return false; } } @file_put_contents($pidFile, getmypid()); $PP = $unix->squid_internal_port(); $squidclient = $unix->find_program("squidclient"); $cmdrix = "{$squidclient} -l 127.0.0.1 -T 5 -h 127.0.0.1 -p {$PP} -m PURGE "; $data = $unix->squidclient("ipcache"); $f = explode("\n", $data); while (list($index, $line) = each($f)) { if (!preg_match("#^(.+?)\\s+.*?\\(#", $line, $re)) { continue; } if ($GLOBALS["VERBOSE"]) { echo "Matches {$re[1]}\n"; } $re[1] = trim($re[1]); $cmd = "{$cmdrix} http://{$re[1]}"; if ($GLOBALS["VERBOSE"]) { echo "{$cmd}\n"; } shell_exec($cmd); $cmd = "{$cmdrix} https://{$re[1]}"; if ($GLOBALS["VERBOSE"]) { echo "{$cmd}\n"; } shell_exec($cmd); } }
function redirectors_array($aspid = false) { $cache_file = "/usr/share/artica-postfix/ressources/logs/web/squid_redirectors_status.db"; $NotifyTime = "/etc/artica-postfix/pids/squid.redirectors.notify"; $pidFile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".pid"; $unix = new unix(); if ($aspid) { $pid = $unix->get_pid_from_file($pidFile); if ($unix->process_exists($pid)) { $pptime = $unix->PROCCESS_TIME_MIN($pid, 10); if ($GLOBALS["VERBOSE"]) { echo "Process already running PID {$pid} since {$pptime}Mn\n"; } return; } @file_put_contents($pidFile, getmypid()); } $sock = new sockets(); $datas = explode("\n", $unix->squidclient("redirector")); $MonitConfig = unserialize(base64_decode($sock->GET_INFO("SquidWatchdogMonitConfig"))); $MonitConfig = watchdog_config_default($MonitConfig); if ($MonitConfig["watchdog"] == 0) { return; } $redirector = array(); $RedirectorsArray = unserialize(base64_decode($sock->GET_INFO("SquidRedirectorsOptions"))); if (!is_numeric($RedirectorsArray["url_rewrite_children"])) { $RedirectorsArray["url_rewrite_children"] = 20; } $PERCENTS = array(); while (list($index, $line) = each($datas)) { if (preg_match("#by kid([0-9]+)#", $line, $re)) { $KID = "Processor #{$re[1]}"; } if (preg_match("#number active:\\s+([0-9]+)\\s+of\\s+([0-9]+)#i", $line, $re)) { $max = $re[2]; $Current = $re[1]; $percent = $Current / $max; $percent = $percent * 100; $LOGs[] = "{$KID}: {$Current}/{$max} = {$percent}%"; Events("{$line} {$Current}/{$max} = {$percent}%"); $PERCENTS[] = round($percent); } if (!preg_match("#([0-9]+)\\s+([0-9]+)\\s+([0-9]+)\\s+([0-9]+)\\s+([0-9]+)(.*?)\\s+([0-9\\.]+)\\s+([0-9\\.]+)\\s+(.*)#", $line, $re)) { continue; } $re[6] = trim($re[6]); $re[3] = trim($re[3]); $re[6] = str_replace(" ", "", $re[6]); $fflosg[] = $re[3]; if ($GLOBALS["VERBOSE"]) { echo "STATE \"{$re[6]}\"\n"; } if ($re[6] == "BS") { $unix->KILL_PROCESS($re[3], 9); if ($GLOBALS["VERBOSE"]) { echo "KILLING \"{$re[3]}\"\n"; } } if ($re[6] == "S") { $unix->KILL_PROCESS($re[3], 9); if ($GLOBALS["VERBOSE"]) { echo "KILLING \"{$re[3]}\"\n"; } } $redirector[$re[1]] = array("FD" => $re[2], "PID" => $re[3], "REQ" => $re[4], "REP" => $re[5], "STATE" => $re[6], "TIME" => $re[7], "OFFSET" => $re[8], "URI" => $re[9]); } $FFperc = 0; $FINAL_PERC = 0; $CountOFPercent = count($PERCENTS); if (count($PERCENTS > 0)) { while (list($index, $pp) = each($PERCENTS)) { $FFperc = $FFperc + $pp; } $FINAL_PERC = round($FFperc / $CountOFPercent, 2); $LOGs[] = "************************************************"; $LOGs[] = "ALL CPUS: {$FINAL_PERC}%"; $LOGs[] = ""; } if ($FINAL_PERC > 90) { $severity = 1; $action = "notify"; $NotifyTimeEx = $unix->file_time_min($NotifyTime); if ($NotifyTimeEx < 10) { return; } @unlink($NotifyTime); @file_put_contents($NotifyTime, time()); if ($FINAL_PERC > 95) { $severity = 1; $action = "reload"; } Events("{$line} {$Current}/{$max} severity = {$severity}"); squid_admin_mysql($severity, "Warning! redirectors reach {$FINAL_PERC}% [action={$action}]", @implode("\n", $LOGs) . "\n\n---------------------------------\n\n" . @implode("\n", $datas)); if ($severity == 0) { shell_exec("/etc/init.d/squid reload --script=" . basename(__FILE__)); return; } } @unlink($cache_file); if (count($redirector) == 0) { return; } @file_put_contents($cache_file, serialize($redirector)); @chmod($cache_file, 0755); }