function TimeToInflux($time) { $time = QueryToUTC($time); $microtime = microtime(); preg_match("#^[0-9]+\\.([0-9]+)\\s+#", $microtime, $re); $ms = intval($re[1]); return date("Y-m-d", $time) . "T" . date("H:i:s", $time) . ".{$ms}Z"; }
function TimeToInflux($time, $Nomilliseconds = false) { $time = QueryToUTC($time); $milli = null; $microtime = microtime(); preg_match("#^[0-9]+\\.([0-9]+)\\s+#", $microtime, $re); $ms = intval($re[1]); if (!$Nomilliseconds) { $milli = ".{$ms}"; } return date("Y-m-d", $time) . "T" . date("H:i:s", $time) . "{$milli}Z"; }
function CachedUserMem_dump() { if (count($GLOBALS["MEMORY_LINE"]) == 0) { return; } if (!isset($GLOBALS["influx"])) { $GLOBALS["influx"] = new influx(); } $LINES = array(); while (list($key, $MAIN) = each($GLOBALS["MEMORY_LINE"])) { $time = $MAIN["TIME"]; if (!isset($GLOBALS["TOUTC"][$time])) { $GLOBALS["TOUTC"][$time] = QueryToUTC($time); } $zArray["precision"] = "s"; if (!isset($MAIN["MAC"])) { $MAIN["MAC"] = "00:00:00:00:00:00"; } if ($MAIN["MAC"] == null) { $MAIN["MAC"] = "00:00:00:00:00:00"; } if (!isset($MAIN["USERID"])) { $MAIN["USERID"] = "none"; } if ($MAIN["USERID"] == null) { $MAIN["USERID"] = "none"; } $zArray["fields"]["time"] = $GLOBALS["TOUTC"][$time]; $zArray["tags"]["CATEGORY"] = $MAIN["CATEGORY"]; $zArray["tags"]["USERID"] = $MAIN["USERID"]; $zArray["tags"]["IPADDR"] = $MAIN["IPADDR"]; $zArray["tags"]["MAC"] = $MAIN["MAC"]; $zArray["fields"]["SIZE"] = intval($MAIN["SIZE"]); $zArray["tags"]["SITE"] = $MAIN["SITE"]; $zArray["tags"]["FAMILYSITE"] = $MAIN["FAMILYSITE"]; $zArray["fields"]["RQS"] = $MAIN["RQS"]; $zArray["fields"]["ZDATE"] = $MAIN["ZDATE"]; $zArray["tags"]["proxyname"] = $MAIN["proxyname"]; $GLOBALS["influx"]->writeToFile = "/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log"; $GLOBALS["influx"]->insert("access_log", $zArray); } }
function UFDB_LOG_HOURLY_SCAN($workfile) { $LastScannLine = 0; if (is_file("{$workfile}.last")) { $LastScannLine = intval(@file_get_contents("{$workfile}.last")); } $handle = @fopen($workfile, "r"); if (!$handle) { events("Fopen failed on {$workfile}"); return false; } if ($LastScannLine > 0) { fseek($handle, $LastScannLine, SEEK_SET); } $handle = @fopen($workfile, "r"); if (!$handle) { events("Fopen failed on {$workfile}"); return false; } if ($LastScannLine > 0) { fseek($handle, $LastScannLine, SEEK_SET); } $MEM = array(); while (!feof($handle)) { $buffer = trim(fgets($handle)); if ($buffer == null) { continue; } $ARRAY = explode(":::", $buffer); $TIME = intval($ARRAY[0]); $USERID = $ARRAY[1]; $CATEGORY = $ARRAY[2]; $RULENAME = $ARRAY[3]; $REMOTE_IP = $ARRAY[4]; $BLOCK_TYPE = $ARRAY[5]; $WHY = $ARRAY[6]; $Clienthostname = $ARRAY[7]; $WWW = $ARRAY[8]; $LOCAL_IP = $ARRAY[9]; if ($USERID == null) { $USERID = $Clienthostname; } if ($USERID == null) { $USERID = $LOCAL_IP; } $HOURTIME = date("Y-m-d H:00:00", $TIME); $MIN = date("i", $TIME); $MINTIME = date("Y-m-d H:", $TIME) . MINTOTEN($MIN) . ":00"; $KEYMD5 = md5("{$HOURTIME}{$USERID}{$CATEGORY}{$RULENAME}{$WWW}{$Clienthostname}"); $KEYSQL = md5("{$HOURTIME}{$CATEGORY}{$RULENAME}{$WWW}"); if (!isset($MEMSQL[$KEYSQL])) { $MEMSQL[$KEYSQL]["TIME"] = $HOURTIME; $MEMSQL[$KEYSQL]["CATEGORY"] = $CATEGORY; $MEMSQL[$KEYSQL]["RULENAME"] = $RULENAME; $MEMSQL[$KEYSQL]["WEBSITE"] = $WWW; $MEMSQL[$KEYSQL]["RQS"] = 1; } else { $MEMSQL[$KEYSQL]["RQS"] = $MEMSQL[$KEYSQL]["RQS"] + 1; } if (!isset($MEM[$KEYMD5])) { $MEM[$KEYMD5]["TIME"] = QueryToUTC(strtotime($HOURTIME), true); $MEM[$KEYMD5]["uid"] = $USERID; $MEM[$KEYMD5]["category"] = $CATEGORY; $MEM[$KEYMD5]["rulename"] = $RULENAME; $MEM[$KEYMD5]["public_ip"] = $REMOTE_IP; $MEM[$KEYMD5]["blocktype"] = $BLOCK_TYPE; $MEM[$KEYMD5]["why"] = $WHY; $MEM[$KEYMD5]["hostname"] = $Clienthostname; $MEM[$KEYMD5]["website"] = $WWW; $MEM[$KEYMD5]["client"] = $LOCAL_IP; $MEM[$KEYMD5]["ZDATE"] = strtotime($HOURTIME); $MEM[$KEYMD5]["RQS"] = 1; } else { $MEM[$KEYMD5]["RQS"] = $MEM[$KEYMD5]["RQS"] + 1; } } @unlink($workfile); UFDB_LOG_HOURLY_DUMP($MEM); UFDB_LOG_HOURLY_MYSQL_DUMP($MEMSQL); }
function xqueries() { $page = CurrentPageName(); $tpl = new templates(); $influx = new influx(); $sql = "SELECT MAX(ZDATE) AS MAX FROM access_log"; $main = $influx->QUERY_SQL($sql); $MAX = $main[0]->MAX; $LastEntry = $tpl->time_to_date($MAX, true); if ($GLOBALS["VERBOSE"]) { echo "<p style='color:blue'>{$MAX} -> {$LastEntry}</p>"; } $from_gmt = $tpl->time_to_date($MAX - 300, true); $from = QueryToUTC($MAX - 300); $fromTime = date("Y-m-d H:i:s", $from); $ToTime = date("Y-m-d H:i:s", QueryToUTC($MAX)); $sql = "SELECT * from access_log WHERE time > '{$fromTime}' AND time < '{$ToTime}'"; //echo "<hr>$sql</HR>"; $main = null; $influx2 = new influx(); $QUERY2 = $influx2->QUERY_SQL($sql); $color = null; $ipClass = new IP(); $q = new mysql_squid_builder(); $c = 0; $D = 0; foreach ($QUERY2 as $row) { $USER = trim($row->USERID); $IPADDR = trim($row->IPADDR); $MAC = trim($row->MAC); if ($row->SIZE == 0) { continue; } if (is_numeric($USER)) { continue; } $RQS = $row->RQS; $time = InfluxToTime($row->time); $DATEKEY = date("H:00", $time); $KEYMD5 = md5("{$USER}{$IPADDR}{$MAC}"); $c = $c + $RQS; $D = $D + $row->SIZE; if (!isset($MAIN[$DATEKEY][$KEYMD5])) { $MAIN[$DATEKEY][$KEYMD5]["USER"] = $USER; $MAIN[$DATEKEY][$KEYMD5]["IPADDR"] = $IPADDR; $MAIN[$DATEKEY][$KEYMD5]["MAC"] = $MAC; $MAIN[$DATEKEY][$KEYMD5]["SIZE"] = $row->SIZE; $MAIN[$DATEKEY][$KEYMD5]["RQS"] = $RQS; } else { $MAIN[$DATEKEY][$KEYMD5]["SIZE"] = $MAIN[$DATEKEY][$KEYMD5]["SIZE"] + $row->SIZE; $MAIN[$DATEKEY][$KEYMD5]["RQS"] = $MAIN[$DATEKEY][$KEYMD5]["RQS"] + $RQS; } } $D = FormatBytes($D / 1024); $requests = $tpl->javascript_parse_text("{requests}"); $last_entry_on = $tpl->javascript_parse_text("{last_entry_on}"); $since = $tpl->_ENGINE_parse_body("{since}"); $html[] = "\n\t\n\t<div style='width:98%' class=form>\n\t<div style='margin-top:5px;font-size:16px;text-align:right;margin-bottom:15px;font-weight:bold'>\n\t\t{$since} 5mn ({$c} {$requests} / {$D}) UTC:" . $tpl->time_to_date($from, true) . " - GMT {$from_gmt} / {$last_entry_on}: {$LastEntry}</div>"; $html[] = "\n\t\t\n\t<table style='width:100%'>"; $html[] = $tpl->_ENGINE_parse_body("<tr>\n\t\t\t<th style='font-size:18px'>{time}</th>\n\t\t\t<th style='font-size:18px'>{MAC}</th>\n\t\t\t<th style='font-size:18px'>{ipaddr}</th>\n\t\t\t<th style='font-size:18px'>{uid}</th>\n\t\t\t<th style='font-size:18px'>{requests}</th>\n\t\t\t<th style='font-size:18px'>{size}</th>\n\t\t\t</tr>\n\t\t\t"); while (list($time, $SUBARRAY) = each($MAIN)) { while (list($KEYMD5, $BIGARRAY) = each($SUBARRAY)) { if ($color == null) { $color = "#F2F0F1"; } else { $color = null; } $MAC = $BIGARRAY["MAC"]; $RQS = $BIGARRAY["RQS"]; $SIZE = $BIGARRAY["SIZE"]; $USER = $BIGARRAY["USER"]; $IPADDR = $BIGARRAY["IPADDR"]; $MAC_link = null; if ($SIZE > 1024) { $size = FormatBytes($SIZE / 1024); } else { $size = "{$SIZE}Bytes"; } $RQS = FormatNumber($RQS); if ($ipClass->IsvalidMAC($MAC)) { $MAC_link = "<a href=\"javascript:blur();\"\n\t\t\tOnClick=\"javascript:Loadjs('squid.nodes.php?node-infos-js=yes&MAC=" . urlencode($MAC) . "');\"\n\t\t\tstyle='font-size:16px;text-decoration:underline;font-weight:bold'>\t\t\n\t\t\t"; if (trim($USER) == null) { $USER = $q->MacToUid($MAC); } } $html[] = "<tr style='background-color:{$color}'>"; $html[] = "<td style='font-size:16px;width:50px;padding:10px;font-weight:bold'>{$time}</td>"; $html[] = "<td style='font-size:16px;width:50px;padding:10px;font-weight:bold'>{$MAC_link}{$MAC}</a></td>"; $html[] = "<td style='font-size:16px;width:50px;padding:10px;font-weight:bold'>{$IPADDR}</td>"; $html[] = "<td style='font-size:16px;width:50px;padding:10px;font-weight:bold'>{$USER}</td>"; $html[] = "<td style='font-size:16px;width:50px;text-align:right;padding:10px' nowrap>{$RQS}</td>"; $html[] = "<td style='font-size:16px;width:50px;text-align:right;padding:10px' nowrap>{$size}</td>"; $html[] = "</tr>"; } } $html[] = "</table>"; $html[] = "</div>"; $html[] = "\n\t<script>\n\t\tfunction FollowerRefresh(){\n\t\t\tif(!document.getElementById('ZRTRQUESTS_COMPTER')){ return;}\n\t\t\tvar compter=parseInt(document.getElementById('ZRTRQUESTS_COMPTER').value);\n\t\t\tif(compter<10){\n\t\t\t\tcompter=compter+1;\n\t\t\t\tdocument.getElementById('ZRTRQUESTS_COMPTER').value=compter;\n\t\t\t\tsetTimeout(\"FollowerRefresh()\",1000);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tdocument.getElementById('ZRTRQUESTS_COMPTER').value=0;\n\t\t\tif(!document.getElementById('proxy-follower-table')){ return;}\n\t\t\tLoadAjaxSilent('proxy-follower-table','{$page}?follow=yes&t={$_GET["t"]}');\n\t\t}\n\t\t\t\n\t\t\t\n\tsetTimeout(\"FollowerRefresh()\",1000);\n\t</script>"; echo @implode("\n", $html); }