TimeDelta($eTimingStart, $eTimingStop);
$dbPercent = 100.0 * $db_time / $clockTime;
// Format for display or logging
$rendertime = number_format($clockTime, 2); // Clock time during page render
$db_time = number_format($db_time, 2); // Clock time in DB render
$dbPercent = number_format($dbPercent, 0); // DB as percent of clock
$memuse = eHelper::getMemoryUsage(); // Memory at end, in B/KB/MB/GB ;)
$queryCount = $sql->db_QueryCount();
$rinfo = '';
$logLine = '';
if ($pref['log_page_accesses'])
{ // Collect the first batch of data to log
$logLine .= "'".($now = time())."','".gmstrftime('%y-%m-%d %H:%M:%S', $now)."','".e107::getIPHandler()->getIP(FALSE)."','".e_PAGE.'?'.e_QUERY."','".$rendertime."','".$db_time."','".$queryCount."','".$memuse."','".$_SERVER['HTTP_USER_AGENT']."','{$_SERVER["REQUEST_METHOD"]}'";
}
if (function_exists('getrusage'))
{
$ru = getrusage();
$cpuUTime = $ru['ru_utime.tv_sec'] + ($ru['ru_utime.tv_usec'] * 1e-6);
$cpuSTime = $ru['ru_stime.tv_sec'] + ($ru['ru_stime.tv_usec'] * 1e-6);
$cpuUStart = $eTimingStartCPU['ru_utime.tv_sec'] + ($eTimingStartCPU['ru_utime.tv_usec'] * 1e-6);
$cpuSStart = $eTimingStartCPU['ru_stime.tv_sec'] + ($eTimingStartCPU['ru_stime.tv_usec'] * 1e-6);
$cpuStart = $cpuUStart + $cpuSStart;
$cpuTot = $cpuUTime + $cpuSTime;
$cpuTime = $cpuTot - $cpuStart;
$cpuPct = 100.0 * $cpuTime / $rendertime; /* CPU load during known clock time */
// Format for display or logging (Uncomment as needed for logging)
//$cpuUTime = number_format($cpuUTime, 3); // User cpu
//$cpuSTime = number_format($cpuSTime, 3); // System cpu
//$cpuTot = number_format($cpuTot, 3); // Total (User+System)
$cpuStart = number_format($cpuStart, 3); // Startup time (i.e. CPU used before class2.php)
$cpuTime = number_format($cpuTime, 3); // CPU while we were measuring the clock (cpuTot-cpuStart)
$cpuPct = number_format($cpuPct, 0); // CPU Load (CPU/Clock)
}
//
// Here's a good place to log CPU usage in case you want graphs and/or your host cares about that
// e.g. (on a typical vhosted linux host)
//
// $logname = "/home/mysite/public_html/queryspeed.log";
// $logfp = fopen($logname, 'a+'); fwrite($logfp, "$cpuTot,$cpuPct,$cpuStart,$rendertime,$db_time\n"); fclose($logfp);
if ($pref['displayrendertime'])
{
$rinfo .= CORE_LAN11;
if (isset($cpuTime))
{
// $rinfo .= "{$cpuTime} cpu sec ({$cpuPct}% load, {$cpuStart} startup). Clock: ";
$rinfo .= sprintf(CORE_LAN14, $cpuTime, $cpuPct, $cpuStart);
}
$rinfo .= $rendertime.CORE_LAN12.$dbPercent.CORE_LAN13.' ';
}
if ($pref['displaysql'])
{
$rinfo .= CORE_LAN15.$queryCount.". ";
}
if (isset($pref['display_memory_usage']) && $pref['display_memory_usage'])
{
$rinfo .= CORE_LAN16.$memuse;
}
if (isset($pref['displaycacheinfo']) && $pref['displaycacheinfo'])
{
$rinfo .= $cachestring.".";
}
if ($pref['log_page_accesses'])
{
// Need to log the page info to a text file as CSV data
$logname = e_LOG."logd_".date("Y-m-d", time()).".csv";
$logHeader = "Unix time,Date/Time,IP,URL,RenderTime,DbTime,Qrys,Memory-Usage,User-Agent,Request-Method";
$logfp = fopen($logname, 'a+');
if(filesize($logname) == 0 || !is_file($logname))
{
fwrite($logfp, $logHeader."\n");
}
fwrite($logfp, $logLine."\n");
fclose($logfp);
}
if (function_exists('theme_renderinfo'))
{
theme_renderinfo($rinfo);
}
else
{
echo($rinfo ? "\n
\n" : "");
}
} // End of regular-page footer (the above NOT done for popups)
//
// C Dump all debug and traffic information
//
if ((ADMIN || $pref['developer']) && E107_DEBUG_LEVEL)
{
global $db_debug;
echo "\n\n
";
$db_debug->Show_All();
echo "
\n";
}
/*
changes by jalist 24/01/2005:
show sql queries
usage: add ?showsql to query string, must be admin
*/
if (ADMIN && isset($queryinfo) && is_array($queryinfo))
{
$c = 1;
$mySQLInfo = $sql->mySQLinfo;
echo "
ID
SQL Queries
\n
\n";
foreach ($queryinfo as $infovalue)
{
echo "
\n
{$c}
{$infovalue}
\n
\n";
$c++;
}
echo "
";
}
//
// D Close DB connection. We're done talking to underlying MySQL
//
$sql->db_Close(); // Only one is needed; the db is only connected once even with several $sql objects
//
// Just before we quit: dump quick timer if there is any
// Works any time we get this far. Not calibrated, but it is quick and simple to use.
// To use: eQTimeOn(); eQTimeOff();
//
$tmp = eQTimeElapsed();
if (strlen($tmp))
{
global $ns;
$ns->tablerender('Quick Admin Timer', "Results: {$tmp} microseconds");
}
if ($pref['developer'])
{
global $oblev_at_start,$oblev_before_start;
if (ob_get_level() != $oblev_at_start)
{
$oblev = ob_get_level();
$obdbg = "
Software defect detected; ob_*() level {$oblev} at end instead of ($oblev_at_start). POPPING EXTRA BUFFERS!
";
while (ob_get_level() > $oblev_at_start)
{
ob_end_flush();
}
echo $obdbg;
}
// 061109 PHP 5 has a bug such that the starting level might be zero or one.
// Until they work that out, we'll disable this message.
// Devs can re-enable for testing as needed.
//
if (0 && $oblev_before_start != 0)
{
$obdbg = "
Software warning; ob_*() level {$oblev_before_start} at start; this page not properly integrated into its wrapper.
";
}
unset($tmp);
}
//
// E Last themed footer code, usually JS
//
if (function_exists('theme_foot'))
{
echo theme_foot();
}
//
// F any included JS footer scripts
// DEPRECATED - use e107::getJs()->footerFile('{e_PLUGIN}myplug/js/my.js', $zone = 2)
//
global $footer_js;
if (isset($footer_js) && is_array($footer_js))
{
$footer_js = array_unique($footer_js);
foreach ($footer_js as $fname)
{
echo "\n";
$js_included[] = $fname;
}
}
// Load e_footer.php files.
if (!empty($pref['e_footer_list']) && is_array($pref['e_footer_list']))
{
//ob_start(); // sometimes raw HTML needs to be added at the bottom of every page. eg.