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";
}
Example #2
0
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);
}