517 lines
15 KiB
PHP
517 lines
15 KiB
PHP
<?php
|
|
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
// Copyright (C) 2010 Winch Gate Property Limited
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as
|
|
// published by the Free Software Foundation, either version 3 of the
|
|
// License, or (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
global $HTTP_POST_VARS, $HTTP_GET_VARS;
|
|
|
|
$publicAccess = false;
|
|
$allowNevrax = true;
|
|
include('authenticate.php');
|
|
|
|
include('request_interface.php');
|
|
include_once('las_connection.php');
|
|
|
|
if (!isset($_POST) && isset($HTTP_POST_VARS))
|
|
$_POST = &$HTTP_POST_VARS;
|
|
if (!isset($_GET) && isset($HTTP_GET_VARS))
|
|
$_GET = &$HTTP_GET_VARS;
|
|
|
|
function importParam($var)
|
|
{
|
|
global $_POST, $_GET;
|
|
if (isset($_POST[$var]))
|
|
$GLOBALS[$var] = $_POST[$var];
|
|
else if (isset($_GET[$var]))
|
|
$GLOBALS[$var] = $_GET[$var];
|
|
else
|
|
unset($GLOBALS[$var]);
|
|
}
|
|
|
|
htmlProlog($_SERVER['PHP_SELF'], "Log Analysis");
|
|
|
|
// look for LAS
|
|
$las_query = "*.*.LAS.State";
|
|
$qstate = nel_query($las_query, $result);
|
|
|
|
unset($availableLAS);
|
|
if ($qstate)
|
|
{
|
|
$arr = explode(' ', $result);
|
|
$numRes = count($arr);
|
|
$numRows = current($arr);
|
|
$numLines = ($numRes-$numRows-2)/$numRows;
|
|
next($arr);
|
|
for ($i=0; $i<$numRows; ++$i)
|
|
{
|
|
$vars[] = current($arr);
|
|
next($arr);
|
|
}
|
|
unset($shards);
|
|
for ($i=0; $i<$numLines; ++$i)
|
|
{
|
|
unset($l);
|
|
foreach($vars as $var)
|
|
{
|
|
$l[$var] = current($arr);
|
|
next($arr);
|
|
}
|
|
|
|
$sql_query = "SELECT * FROM server WHERE name='".$l['server']."'";
|
|
$sql_res = sqlquery($sql_query);
|
|
if ($sql_res && ($sql_arr = sqlfetch($sql_res)))
|
|
$l['address'] = $sql_arr['address'];
|
|
|
|
$availableLAS[] = $l;
|
|
}
|
|
}
|
|
/*
|
|
echo "<pre>";
|
|
print_r($availableLAS);
|
|
echo "</pre>";
|
|
*/
|
|
importParam('exec_query');
|
|
importParam('refresh_result');
|
|
importParam('query');
|
|
importParam('query_id');
|
|
importParam('page');
|
|
|
|
importParam('build_display_query');
|
|
importParam('build_eid_query');
|
|
importParam('database');
|
|
for ($i=0; $i<10; ++$i)
|
|
importParam("eid_$i");
|
|
importParam('string');
|
|
importParam('start_date');
|
|
importParam('end_date');
|
|
|
|
$string = stripslashes($string);
|
|
$query = stripslashes($query);
|
|
|
|
// ------------------------------------------------------------------------------------------------------------------------
|
|
|
|
echo "<br>";
|
|
|
|
echo "<table border=0>\n";
|
|
echo "<form method='post' action='".$_SERVER['PHP_SELF']."'>\n";
|
|
|
|
echo "<tr valign=top>\n";
|
|
|
|
$selectedLAS = '';
|
|
|
|
// mandatory information
|
|
echo "<td>\n";
|
|
echo "<table>\n";
|
|
echo "<tr><th align=left>LAS Host</th></tr>\n";
|
|
echo "<tr><td>";
|
|
echo "<select name='las_address'>\n";
|
|
if (count($availableLAS) > 0)
|
|
{
|
|
foreach ($availableLAS as $las)
|
|
{
|
|
if ($las_address == $las['address'])
|
|
{
|
|
$selectedLAS = $las;
|
|
echo "<option value='".$las['address']."' selected>".$las['shard']." ".$las['server']." ".$las['service']."\n";
|
|
}
|
|
else
|
|
{
|
|
echo "<option value='".$las['address']."'>".$las['shard']." ".$las['server']." ".$las['service']."\n";
|
|
}
|
|
}
|
|
}
|
|
if (!$selectedLAS['address'])
|
|
{
|
|
echo "<option value='' selected>---- Select a LAS Host";
|
|
}
|
|
else
|
|
{
|
|
echo "<option value=''>---- Select a LAS Host";
|
|
}
|
|
echo "</select>\n";
|
|
echo "</td></tr>";
|
|
echo "<tr><th align=left>Database</th></tr>\n";
|
|
echo "<tr><td><input type='text' name='database' size=10 maxlength=10 value='$database'></td></tr>";
|
|
echo "<tr><th align=left>Start Date</th></tr>\n";
|
|
echo "<tr><td><input type='text' name='start_date' size=30 maxlength=20 value='$start_date'></td></tr>";
|
|
echo "<tr><th align=left>End Date</th></tr>\n";
|
|
echo "<tr><td><input type='text' name='end_date' size=30 maxlength=20 value='$end_date'></td></tr>";
|
|
echo "</table>\n";
|
|
echo "</td>\n";
|
|
|
|
// search by eid
|
|
echo "<td>\n";
|
|
echo "<table>\n";
|
|
echo "<tr><th align=left>EntityIds</th></tr>\n";
|
|
echo "<tr><td>\n";
|
|
for ($i=0; $i<10; ++$i)
|
|
echo "<input id='eid_$i' type='text' name='eid_$i' size=30 maxlength=25 value='".$GLOBALS["eid_$i"]."'><br>\n";
|
|
echo "</td></tr>\n";
|
|
echo "</table>\n";
|
|
echo "</td>\n";
|
|
|
|
echo "<script>\n";
|
|
echo "<!--\n";
|
|
echo " function reorderEId()\n";
|
|
echo " {\n";
|
|
echo " lastNull = -1;\n";
|
|
echo " for (i=0; i<10; ++i)\n";
|
|
echo " {\n";
|
|
echo " if (document.getElementById('eid_'+i).value == '')\n";
|
|
echo " lastNull = i;\n";
|
|
echo " else if (lastNull >= 0)\n";
|
|
echo " {\n";
|
|
echo " document.getElementById('eid_'+lastNull).value = document.getElementById('eid_'+i).value\n";
|
|
echo " document.getElementById('eid_'+i).value = ''\n";
|
|
echo " ++lastNull;\n";
|
|
echo " }\n";
|
|
echo " }\n";
|
|
echo " }\n";
|
|
echo " function selectEId(id)\n";
|
|
echo " {\n";
|
|
echo " reorderEId();\n";
|
|
echo " for (i=0; i<10; ++i)\n";
|
|
echo " if (document.getElementById('eid_'+i).value == id)\n";
|
|
echo " return;\n";
|
|
echo " for (i=0; i<10; ++i)\n";
|
|
echo " if (document.getElementById('eid_'+i).value == '')\n";
|
|
echo " {\n";
|
|
echo " document.getElementById('eid_'+i).value = id;\n";
|
|
echo " return;\n";
|
|
echo " }\n";
|
|
echo " }\n";
|
|
echo " reorderEId();\n";
|
|
echo "-->\n";
|
|
echo "</script>\n";
|
|
|
|
// search by string
|
|
echo "<td>\n";
|
|
echo "<table>\n";
|
|
echo "<tr><th align=left>String</th></tr>\n";
|
|
echo "<tr><td><input type='text' name='string' size=100 maxlength=40 value='$string'></td></tr>";
|
|
echo "</table>\n";
|
|
echo "</td>\n";
|
|
|
|
echo "</tr>\n";
|
|
echo "<tr valign=top>\n";
|
|
|
|
echo "<td align=center><input type='submit' name='build_display_query' value='Display'></td>";
|
|
echo "<td align=center><input type='submit' name='build_eid_query' value='Search Id(s)'></td>";
|
|
echo "<td align=center><input type='submit' name='build_string_query' value='Search String'></td>";
|
|
|
|
echo "</tr>\n";
|
|
|
|
echo "</tr>\n";
|
|
echo "<tr valign=top>\n";
|
|
|
|
echo "<td align=center><input type='submit' name='display_queries' value='Display Queries'></td>";
|
|
|
|
echo "</tr>\n";
|
|
|
|
echo "</form>\n";
|
|
echo "</table>\n";
|
|
|
|
// ------------------------------------------------------------------------------------------------------------------------
|
|
|
|
echo "<br>\n";
|
|
|
|
|
|
if ($build_eid_query || $build_display_query)
|
|
{
|
|
$eids = array();
|
|
for ($i=0; $i<10; ++$i)
|
|
if ($GLOBALS["eid_$i"] != '')
|
|
$eids[] = $GLOBALS["eid_$i"];
|
|
|
|
if (count($eids) == 0 || $build_display_query)
|
|
{
|
|
$query = "displayLogs $database $start_date";
|
|
if ($end_date != '')
|
|
$query .= " $end_date";
|
|
$exec_query = true;
|
|
}
|
|
else if (count($eids) > 1)
|
|
{
|
|
$query = "searchEIds $database ".join(' ', $eids)." - $start_date";
|
|
if ($end_date != '')
|
|
$query .= " $end_date";
|
|
$exec_query = true;
|
|
}
|
|
else
|
|
{
|
|
$query = "searchEId $database ".$eids[0]." $start_date";
|
|
if ($end_date != '')
|
|
$query .= " $end_date";
|
|
$exec_query = true;
|
|
}
|
|
}
|
|
else if ($build_string_query)
|
|
{
|
|
if ($string != '')
|
|
{
|
|
$query = "searchString $database \"$string\" $start_date";
|
|
if ($end_date != '')
|
|
$query .= " $end_date";
|
|
$exec_query = true;
|
|
}
|
|
}
|
|
|
|
/*
|
|
// display query input
|
|
echo "<table>\n";
|
|
echo "<form method='post' action='$_SERVER['PHP_SELF']'>\n";
|
|
echo "<tr>\n";
|
|
echo "<td>Query</td>";
|
|
echo "<td><input type=text name='query' value='$query' size=128 maxlength=255></td>";
|
|
echo "<td><input type=submit name='exec_query' value='Submit Query'></td>\n";
|
|
echo "</tr>\n";
|
|
echo "<input type='hidden' name='database' value='$database'>\n";
|
|
for ($i=0; $i<10; ++$i)
|
|
echo "<input type='hidden' name='eid_$i' value='".$GLOBALS["eid_$i"]."'>\n";
|
|
echo "<input type='hidden' name='start_date' value='$start_date'>\n";
|
|
echo "<input type='hidden' name='end_date' value='$end_date'>\n";
|
|
echo "</form>\n";
|
|
echo "</table>\n";
|
|
*/
|
|
|
|
if ($display_queries && $selectedLAS['address'])
|
|
{
|
|
$success = displayLASQueries($selectedLAS['address'], $result);
|
|
|
|
if ($success)
|
|
{
|
|
$a = explode("\n", $result);
|
|
if (count($a) > 0)
|
|
{
|
|
echo "<table border=1 width='100%'><tr><td>";
|
|
echo "<table width='100%'>\n";
|
|
$i = 0;
|
|
foreach ($a as $query)
|
|
{
|
|
if ($query == '')
|
|
continue;
|
|
|
|
$qa = explode(':', $query, 4);
|
|
|
|
$bg = (($i & 1) == 0 ? '#F8F8FF' : '#F0F0F8');
|
|
++$i;
|
|
echo "<tr bgcolor=$bg>";
|
|
if ($qa[1] == 2)
|
|
{
|
|
echo "<td>".$qa[0]."</td>";
|
|
$refstr = $_SERVER['PHP_SELF']."?refresh_result=1&las_address=".$selectedLAS['address']."&query_id=".$qa[0]."&query=".$qa[2]."&database=$database&string=$string&start_date=$start_date&end_date=$end_date";
|
|
echo "<td><a href='$refstr'>Display</a></td>";
|
|
echo "<td>".$qa[3]."</td>";
|
|
}
|
|
else if ($qa[1] == 1)
|
|
{
|
|
echo "<td>".$qa[0]."</td>";
|
|
echo "<td>Processing ".$qa[2]."%</td>";
|
|
echo "<td>".$qa[3]."</td>";
|
|
}
|
|
else
|
|
{
|
|
echo "<td>".$qa[0]."</td>";
|
|
echo "<td>Cancel</td>";
|
|
echo "<td>".$qa[3]."</td>";
|
|
}
|
|
echo "</tr>\n";
|
|
}
|
|
echo "</table>";
|
|
echo "</td></tr></table>";
|
|
}
|
|
}
|
|
}
|
|
else if ($exec_query && $query && $selectedLAS['address'])
|
|
{
|
|
$success = logQuery($selectedLAS['address'], $query, $result, $query_id);
|
|
|
|
echo "<br><br>";
|
|
|
|
if ($success)
|
|
{
|
|
echo "<b>Query '$query' successfully executed ($result)</b><br>\n";
|
|
echo "Please wait while result is being computed and click 'Refresh result' to display query result.<br>\n";
|
|
echo "<form method='post' action='".$_SERVER['PHP_SELF']."'>\n";
|
|
echo "<input type=submit name='refresh_result' value='Refresh result'>\n";
|
|
echo "<input type=hidden name='las_address' value='".$selectedLAS['address']."'>\n";
|
|
echo "<input type=hidden name='query_id' value='$query_id'>\n";
|
|
echo "<input type=hidden name='query' value='$query'>\n";
|
|
echo "<input type='hidden' name='database' value='$database'>\n";
|
|
for ($i=0; $i<10; ++$i)
|
|
echo "<input type='hidden' name='eid_$i' value='".$GLOBALS["eid_$i"]."'>\n";
|
|
echo "<input type='hidden' name='string' value='$string'>\n";
|
|
echo "<input type='hidden' name='start_date' value='$start_date'>\n";
|
|
echo "<input type='hidden' name='end_date' value='$end_date'>\n";
|
|
echo "</form>\n";
|
|
}
|
|
else
|
|
{
|
|
echo "<b>Query '$query' failed</b>: '$result'<br>\n";
|
|
}
|
|
}
|
|
else if ($refresh_result && isset($query_id) && $selectedLAS['address'])
|
|
{
|
|
$success = getQueryResult($selectedLAS['address'], $query_id, $result, $page, $numpages);
|
|
|
|
echo "<br><br>";
|
|
|
|
if ($success)
|
|
{
|
|
echo "<b>Query '$query' result</b>:<br>\n";
|
|
|
|
echo "<b>";
|
|
|
|
$refstr = $_SERVER['PHP_SELF']."?refresh_result=1&las_address=".$selectedLAS['address']."&query_id=$query_id&query=$query&database=$database&string=$string&start_date=$start_date&end_date=$end_date";
|
|
for ($i=0; $i<10; ++$i)
|
|
if ($GLOBALS["eid_$i"] != '')
|
|
$refstr .= "&eid_$i=".$GLOBALS["eid_$i"];
|
|
|
|
if ($page > 0)
|
|
echo "<a href='$refstr&page=0'><<</a>\n ";
|
|
else
|
|
echo "<< ";
|
|
|
|
if ($page > 0)
|
|
echo "<a href='$refstr&page=".($page-1)."'><</a>\n";
|
|
else
|
|
echo "<";
|
|
|
|
if ($page+1 < $numpages)
|
|
echo " <a href='$refstr&page=".($page+1)."'>></a>\n";
|
|
else
|
|
echo " >";
|
|
|
|
if ($page+1 < $numpages)
|
|
echo " <a href='$refstr&page=".($numpages-1)."'>>></a>\n";
|
|
else
|
|
echo " >>";
|
|
|
|
echo "</b>\n";
|
|
|
|
if ($numpages < 20)
|
|
{
|
|
$minpage = 0;
|
|
$maxpage = $numpages-1;
|
|
}
|
|
else
|
|
{
|
|
$minpage = $page-10;
|
|
if ($minpage < 0)
|
|
$minpage = 0;
|
|
$maxpage = $minpage+20;
|
|
if ($maxpage >= $numpages)
|
|
$maxpage = $numpages-1;
|
|
$minpage = $maxpage-20;
|
|
}
|
|
|
|
for ($p=$minpage; $p<=$maxpage; ++$p)
|
|
{
|
|
if ($p == $page)
|
|
{
|
|
echo " <b>$page</b>";
|
|
}
|
|
else
|
|
{
|
|
echo " <a href='$refstr&page=$p'>$p</a>\n";
|
|
}
|
|
}
|
|
|
|
echo " [$numpages pages]";
|
|
|
|
echo "<br>\n";
|
|
|
|
$disp = htmlentities($result);
|
|
|
|
echo "<table border=1 width='100%'><tr><td>";
|
|
echo "<table width='100%'>\n";
|
|
|
|
$a = explode("\n", $disp);
|
|
$i = 0;
|
|
foreach ($a as $l)
|
|
{
|
|
if (trim($l) == '')
|
|
continue;
|
|
$bg = (($i & 1) == 0 ? '#F8F8FF' : '#F0F0F8');
|
|
++$i;
|
|
$prefix = substr($l, 0, 3);
|
|
echo "<tr bgcolor=$bg>";
|
|
if ($prefix == '#! ')
|
|
{
|
|
echo "<td colspan=3><font color=#FF0000>";
|
|
echo substr($l, 3);
|
|
echo "</font></td>";
|
|
}
|
|
else if ($prefix == '#? ')
|
|
{
|
|
echo "<td colspan=3><font color=#008800>";
|
|
echo substr($l, 3);
|
|
echo "</font></td>";
|
|
}
|
|
else if ($prefix == '## ')
|
|
{
|
|
echo "<td colspan=3><font color=#0000FF>";
|
|
echo substr($l, 3);
|
|
echo "</font></td>";
|
|
}
|
|
else if ($prefix == '#$ ')
|
|
{
|
|
$al = explode(':', substr($l, 3), 4);
|
|
echo "<td width=50>".$al[0]."</td>";
|
|
echo "<td width=100>".trim($al[2])."</td>";
|
|
|
|
$d = str_repeat('- ', $al[1]).$al[3];
|
|
|
|
$d = ereg_replace('(\(0x[0-9a-fA-F]{10}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}\))', '<a onClick="return selectEId('."'".'\\1'."'".')">\\1</a>', $d);
|
|
//$d = ereg_replace('(\(0x[0-9a-fA-F]{10}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}\))', '<a onClick="return alert('."'".'tamere'."'".')">\\1</a>', $d);
|
|
|
|
echo "<td>$d</td>";
|
|
}
|
|
else
|
|
{
|
|
echo "<td colspan=3><font color=#AAAAAA><i>// $l</i></font></td>";
|
|
}
|
|
echo "</tr>\n";
|
|
}
|
|
|
|
echo "</table>";
|
|
echo "</td></tr></table>";
|
|
}
|
|
else
|
|
{
|
|
echo "<b>Failed to get query result</b>: '$result'<br>\n";
|
|
echo "<form method='post' action='".$_SERVER['PHP_SELF']."'>\n";
|
|
echo "<input type=submit name='refresh_result' value='Refresh result'>\n";
|
|
echo "<input type=hidden name='las_address' value='".$selectedLAS['address']."'>\n";
|
|
echo "<input type=hidden name='query_id' value='$query_id'>\n";
|
|
echo "<input type=hidden name='query' value='$query'>\n";
|
|
echo "<input type='hidden' name='database' value='$database'>\n";
|
|
for ($i=0; $i<10; ++$i)
|
|
echo "<input type='hidden' name='eid_$i' value='".$GLOBALS["eid_$i"]."'>\n";
|
|
echo "<input type='hidden' name='string' value='$string'>\n";
|
|
echo "<input type='hidden' name='start_date' value='$start_date'>\n";
|
|
echo "<input type='hidden' name='end_date' value='$end_date'>\n";
|
|
echo "</form>\n";
|
|
}
|
|
}
|
|
else if (($exec_query || $refresh_result) && (!$selectedLAS['address']))
|
|
{
|
|
echo "<b>No LAS Host selected</b>, please restart query with a LAS Host specified.<br>\n";
|
|
}
|
|
|
|
echo "<br>";
|
|
|
|
htmlEpilog();
|
|
?>
|