class statistics{
var $totalStartTime;
var $queryStartTime;
var $query_log;
function statistics(){
if(isset($_REQUEST['stat']))
$_SESSION['stat']=$_REQUEST['stat'];
$this->totalStartTime = array_sum(explode(" ",microtime()));
}
function before() {
if (isset($_REQUEST['stat']))
$_SESSION['stat']=$_REQUEST['stat'];
if (!isset($_SESSION['stat']) || !preg_match("@(sql|path)@", $_SESSION['stat']))
return;
$this->queryStartTime = array_sum(explode(" ",microtime()));
}
function after($q) {
if (! isset($_SESSION['stat']) || !preg_match("@(sql|path)@", $_SESSION['stat'])) return;
$stats=array();
$queryEndTime = array_sum(explode(" ",microtime()));
$processTime = $queryEndTime - $this->queryStartTime;
$stats['t']=$processTime;
if(preg_match("@(sql)@", $_SESSION['stat'])) {
$stats['q']=$q;
}
if(preg_match("@(path)@", $_SESSION['stat'])) {
$btr=debug_backtrace();
$src='';
if(is_array($btr))foreach ($btr as $k => $v) {
if(!isset($v['file']) || !isset($v['line']) ) continue;
$src .= "\t".$v['file'].' LINE '.$v['line']."\n";
}
$stats['src']=$src;
}
$this->query_log[]=$stats;
}
function report(){
if (isset($_REQUEST['stat']))
$_SESSION['stat']=$_REQUEST['stat'];
if (!isset($_SESSION['stat']) || !preg_match("@(sql)@", $_SESSION['stat']))
return "";
$tq=count($this->query_log);
$totalEndTime = array_sum(explode(" ",microtime()));
$totalProcessTime = $totalEndTime - $this->totalStartTime;
$s=0;
if(is_array($this->query_log))foreach ($this->query_log as $k => $v) {
$s+=$v['t'];
}
if( preg_match("@(unique)@", $_SESSION['stat'])) {
$cnt=array();
if(is_array($this->query_log))foreach ($this->query_log as $k => $v) {
if(!isset($v['src'])) $v['src']='';
$ind=$v['q']."\n".$v['src'];
if (!isset($cnt[$ind])) $cnt[$ind]=0;
$cnt[$ind]++;
}
$this->query_log4=array();
if(is_array($this->query_log))foreach ($this->query_log as $k => $v) {
if(!isset($v['src'])) $v['src']='';
$ind=$v['q']."\n".$v['src'];
if (!isset($cnt[$ind])) continue;
$v['qty']=$cnt[$ind];
$this->query_log4[]=$v;
unset($cnt[$ind]);
}
if(!function_exists('cmp')){
function cmp($a, $b) {
if ($a['qty'] == $b['qty']) return 0;
return ((int)$a['qty'] > (int)$b['qty']) ? -1 : 1;
}
}
usort($this->query_log4, "cmp");
$this->query_log=$this->query_log4;
};
$rep="totalProcessTime - $totalProcessTime sec";
$rep.="\nQueries - ".$tq.". \nQueries time - $s. ";
if( preg_match("@(unique)@", $_SESSION['stat']))
$rep.="\n Unique queries - ".count($this->query_log);
if(is_array($this->query_log))foreach ($this->query_log as $k => $v) {
$rep.="\n\n".($k+1).". ".(isset($v['qty']) ? '['.$v['qty'].']' : '')." (".number_format($v['t'],3).") ".$v['q']." \n".(isset($v['src']) ? $v['src'] : '') ;
}
echo "