You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<?php /** * @copyright NetMonsters <team@netmonsters.ru> * @link http://netmonsters.ru * @package Majestic * @subpackage util * @since 2010-03-09 * @version SVN: $Id$ * @filesource $URL$ */
class Profiler { protected $start = null; protected $end = null; protected $queries = array(); static protected $instance = null; private function __construct() { if (DEBUG == false) { throw new GeneralException('Need to turn on DEBUG before use.'); } } /** * Refuse cloning */ private function __clone(){} /** * @return Profiler */ static public function getInstance() { if (!isset(self::$instance)) { self::$instance = new self(); } return self::$instance; } /** * @param string $query * @return QueryProfiler */ public function profilerQuery($query) { $profiler = new QueryProfiler($query); $this->queries[] = $profiler; return $profiler; } public function start() { $this->start = microtime(true); } public function end($html) { $this->end = microtime(true); if (stripos($html, '</body>') == False) { return $html; } return str_ireplace('</body>', $this->getOutput() . '</body>', $html); } protected function getOutput() { $html = '<div style="clear:both; font:12px monospace; margin: 5px; white-space: pre;">' . 'Elapsed time: ' . round(($this->end- $this->start) * 1000) . 'ms.<br/>' . 'Queries: ' . count($this->queries) . '<br/>'; foreach ($this->queries as $query) { $html .= '[' . round($query->getElapsed() * 1000) . 'ms] ' . $query->getQuery() . '<br/>'; } $html .= '</div>'; return $html; } }
|