Reworked profiler
This commit is contained in:
@ -118,7 +118,14 @@ class FrontController
|
|||||||
|
|
||||||
$layout = new $layout_class();
|
$layout = new $layout_class();
|
||||||
$html = $layout->fetch($action);
|
$html = $layout->fetch($action);
|
||||||
return (!DEBUG) ? $html : Profiler::getInstance()->end($html);
|
if (DEBUG) {
|
||||||
|
if (is_subclass_of($action, 'AjaxAction')) {
|
||||||
|
Profiler::getInstance()->getJson();
|
||||||
|
} else {
|
||||||
|
$html = Profiler::getInstance()->end($html);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $html;
|
||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
if (DEBUG == true) {
|
if (DEBUG == true) {
|
||||||
if (!headers_sent()) {
|
if (!headers_sent()) {
|
||||||
|
@ -84,7 +84,7 @@ class MySQLiStatement extends DbStatement
|
|||||||
*/
|
*/
|
||||||
$mysqli = $this->driver->getConnection();
|
$mysqli = $this->driver->getConnection();
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
$profiler = Profiler::getInstance()->profilerQuery($sql);
|
$profiler = Profiler::getInstance()->profilerCommand('mysql', $sql);
|
||||||
$result = $mysqli->query($sql);
|
$result = $mysqli->query($sql);
|
||||||
$profiler->end();
|
$profiler->end();
|
||||||
} else {
|
} else {
|
||||||
|
@ -24,7 +24,7 @@ class RedisDebug
|
|||||||
public function __call($name, $arguments)
|
public function __call($name, $arguments)
|
||||||
{
|
{
|
||||||
$command = $name . '(' . $this->r_implode(', ', $arguments) . ')';
|
$command = $name . '(' . $this->r_implode(', ', $arguments) . ')';
|
||||||
$profiler = Profiler::getInstance()->profilerQuery($command);
|
$profiler = Profiler::getInstance()->profilerCommand('redis', $command);
|
||||||
$data = call_user_func_array(array($this->redis, $name), $arguments);
|
$data = call_user_func_array(array($this->redis, $name), $arguments);
|
||||||
$profiler->end();
|
$profiler->end();
|
||||||
return $data;
|
return $data;
|
||||||
|
@ -61,39 +61,4 @@ class RedisManager
|
|||||||
}
|
}
|
||||||
return self::$connections[$name];
|
return self::$connections[$name];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
class RedisDebug
|
|
||||||
{
|
|
||||||
private $redis;
|
|
||||||
|
|
||||||
public function __construct($redis)
|
|
||||||
{
|
|
||||||
if (!is_a($redis, 'Redis')) {
|
|
||||||
throw new MJException();
|
|
||||||
}
|
|
||||||
$this->redis = $redis;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __call($name, $arguments)
|
|
||||||
{
|
|
||||||
$command = $name . '(' . $this->r_implode(', ', $arguments) . ')';
|
|
||||||
$profiler = Profiler::getInstance()->profilerQuery($command);
|
|
||||||
$data = call_user_func_array(array($this->redis, $name), $arguments);
|
|
||||||
$profiler->end();
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function r_implode($glue, $pieces)
|
|
||||||
{
|
|
||||||
$retVal = array();
|
|
||||||
foreach ($pieces as $r_pieces) {
|
|
||||||
if (is_array($r_pieces)) {
|
|
||||||
$retVal[] = '(' . $this->r_implode($glue, $r_pieces) . ')';
|
|
||||||
} else {
|
|
||||||
$retVal[] = $r_pieces;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return implode($glue, $retVal);
|
|
||||||
}
|
|
||||||
}
|
}
|
152
util/FirePHPCore-0.3.2/CHANGELOG
Normal file
152
util/FirePHPCore-0.3.2/CHANGELOG
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
|
||||||
|
TODO:
|
||||||
|
|
||||||
|
- Fix code indenting in PHP 4 code
|
||||||
|
- Port maxDepth option to PHP 4 code
|
||||||
|
|
||||||
|
2010-10-26 - Release Version: 0.3.2
|
||||||
|
|
||||||
|
2010-10-12 - Release Version: 0.3.2rc6
|
||||||
|
|
||||||
|
- (Issue 154) getRequestHeader uses "getallheaders" even though it doesn't always exist. [25m]
|
||||||
|
|
||||||
|
2010-10-09 - Release Version: 0.3.2rc5
|
||||||
|
|
||||||
|
- (Issue 153) FirePHP incorrectly double-encodes UTF8 when mbstring.func_overload is enabled
|
||||||
|
|
||||||
|
2010-10-08 - Release Version: 0.3.2rc4
|
||||||
|
|
||||||
|
- Trigger upgrade message if part of FirePHP 1.0
|
||||||
|
- Removed FirePHP/Init.php inclusion logic and only load FirePHP.class.php if not already loaded
|
||||||
|
|
||||||
|
2010-07-19 - Release Version: 0.3.2rc3
|
||||||
|
|
||||||
|
- Fixed FirePHP/Init.php inclusion logic
|
||||||
|
|
||||||
|
2010-07-19 - Release Version: 0.3.2rc2
|
||||||
|
|
||||||
|
- (Issue 145) maxDepth option
|
||||||
|
- Changed maxObjectDepth and maxArrayDepth option defaults to 5
|
||||||
|
- Fixed code indentation
|
||||||
|
|
||||||
|
2010-03-05 - Release Version: 0.3.2rc1
|
||||||
|
|
||||||
|
- (Issue 114) Allow options to be passed on to basic logging wrappers
|
||||||
|
- (Issue 122) Filter objectStack property of FirePHP class
|
||||||
|
- (Issue 123) registerErrorHandler(false) by default
|
||||||
|
- Added setOption() and getOption() methods
|
||||||
|
- (Issue 117) dump() method argument validation
|
||||||
|
- Started adding PHPUnit tests
|
||||||
|
- Some refactoring to support unit testing
|
||||||
|
- Deprecated setProcessorUrl() and setRendererUrl()
|
||||||
|
- Check User-Agent and X-FirePHP-Version header to detect FirePHP on client
|
||||||
|
- (Issue 135) FirePHP 0.4.3 with Firebug 1.5 changes user agent on the fly
|
||||||
|
- (Issue 112) Error Predefined Constants Not available for PHP 5.x versions
|
||||||
|
|
||||||
|
2008-06-14 - Release Version: 0.3.1
|
||||||
|
|
||||||
|
- (Issue 108) ignore class name case in object filter
|
||||||
|
|
||||||
|
2009-05-11 - Release Version: 0.3
|
||||||
|
2009-05-01 - Release Version: 0.3.rc.1
|
||||||
|
|
||||||
|
- (Issue 90) PHP4 compatible version of FirePHPCore
|
||||||
|
- (Issue 98) Thrown exceptions don't send an HTTP 500 if the FirePHP exception handler is enabled
|
||||||
|
- (Issue 85) Support associative arrays in encodeTable method in FirePHP.class.php
|
||||||
|
- (Issue 66) Add a new getOptions() public method in API
|
||||||
|
- (Issue 82) Define $this->options outside of __construct
|
||||||
|
- (Issue 72) Message error if group name is null
|
||||||
|
- (Issue 68) registerErrorHandler() and registerExceptionHandler() should returns previous handlers defined
|
||||||
|
- (Issue 69) Add the missing register handler in the triumvirate (error, exception, assert)
|
||||||
|
- (Issue 75) [Error & Exception Handling] Option to not exit script execution
|
||||||
|
- (Issue 83) Exception handler can't throw exceptions
|
||||||
|
- (Issue 80) Auto/Pre collapsing groups AND Custom group row colors
|
||||||
|
|
||||||
|
2008-11-09 - Release Version: 0.2.1
|
||||||
|
|
||||||
|
- (Issue 70) Problem when logging resources
|
||||||
|
|
||||||
|
2008-10-21 - Release Version: 0.2.0
|
||||||
|
|
||||||
|
- Updated version to 0.2.0
|
||||||
|
- Switched to using __sleep instead of __wakeup
|
||||||
|
- Added support to exclude object members when encoding
|
||||||
|
- Add support to enable/disable logging
|
||||||
|
|
||||||
|
2008-10-17 - Release Version: 0.2.b.8
|
||||||
|
|
||||||
|
- New implementation for is_utf8()
|
||||||
|
- (Issue 55) maxObjectDepth Option not working correctly when using TABLE and EXCEPTION Type
|
||||||
|
- Bugfix for max[Object|Array]Depth when encoding nested array/object graphs
|
||||||
|
- Bugfix for FB::setOptions()
|
||||||
|
|
||||||
|
2008-10-16 - Release Version: 0.2.b.7
|
||||||
|
|
||||||
|
- (Issue 45) Truncate dump when string have non utf8 cars
|
||||||
|
- (Issue 52) logging will not work when firephp object gets stored in the session.
|
||||||
|
|
||||||
|
2008-10-16 - Release Version: 0.2.b.6
|
||||||
|
|
||||||
|
- (Issue 37) Display file and line information for each log message
|
||||||
|
- (Issue 51) Limit output of object graphs
|
||||||
|
- Bugfix for encoding object members set to NULL|false|''
|
||||||
|
|
||||||
|
2008-10-14 - Release Version: 0.2.b.5
|
||||||
|
|
||||||
|
- Updated JsonStream wildfire protocol to be more robust
|
||||||
|
- (Issue 33) PHP error notices running demos
|
||||||
|
- (Issue 48) Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given
|
||||||
|
|
||||||
|
2008-10-08 - Release Version: 0.2.b.4
|
||||||
|
|
||||||
|
- Bugfix for logging objects with recursion
|
||||||
|
|
||||||
|
2008-10-08 - Release Version: 0.2.b.3
|
||||||
|
|
||||||
|
- (Issue 43) Notice message in 0.2b2
|
||||||
|
- Added support for PHP's native json_encode() if available
|
||||||
|
- Revised object encoder to detect object recursion
|
||||||
|
|
||||||
|
2008-10-07 - Release Version: 0.2.b.2
|
||||||
|
|
||||||
|
- (Issue 28) Need solution for logging private and protected object variables
|
||||||
|
- Added trace() and table() aliases in FirePHP class
|
||||||
|
- (Issue 41) Use PHP doc in FirePHP
|
||||||
|
- (Issue 39) Static logging method for object oriented API
|
||||||
|
|
||||||
|
2008-10-01 - Release Version: 0.2.b.1
|
||||||
|
|
||||||
|
- Added support for error and exception handling
|
||||||
|
- Updated min PHP version for PEAR package to 5.2
|
||||||
|
- Added version constant for library
|
||||||
|
- Gave server library it's own wildfire plugin namespace
|
||||||
|
- Migrated communication protocol to Wildfire JsonStream
|
||||||
|
- Added support for console groups using "group" and "groupEnd"
|
||||||
|
- Added support for log, info, warn and error logging aliases
|
||||||
|
- (Issue 29) problem with TRACE when using with error_handler
|
||||||
|
- (Issue 33) PHP error notices running demos
|
||||||
|
- (Issue 12) undefined index php notice
|
||||||
|
- Removed closing ?> php tags
|
||||||
|
- (Issue 13) the code in the fb() function has a second return statement that will never be reached
|
||||||
|
|
||||||
|
2008-07-30 - Release Version: 0.1.1.3
|
||||||
|
|
||||||
|
- Include __className property in JSON string if variable was an object
|
||||||
|
- Bugfix - Mis-spelt "Exception" in JSON encoding code
|
||||||
|
|
||||||
|
2008-06-13 - Release Version: 0.1.1.1
|
||||||
|
|
||||||
|
- Bugfix - Standardize windows paths in stack traces
|
||||||
|
- Bugfix - Display correct stack trace info in windows environments
|
||||||
|
- Bugfix - Check $_SERVER['HTTP_USER_AGENT'] before returning
|
||||||
|
|
||||||
|
2008-06-13 - Release Version: 0.1.1
|
||||||
|
|
||||||
|
- Added support for FirePHP::TRACE log style
|
||||||
|
- Changed license to New BSD License
|
||||||
|
|
||||||
|
2008-06-06 - Release Version: 0.0.2
|
||||||
|
|
||||||
|
- Bugfix - Added usleep() to header writing loop to ensure unique index
|
||||||
|
- Bugfix - Ensure chunk_split does not generate trailing "\n" with empty data header
|
||||||
|
- Added support for FirePHP::TABLE log style
|
12
util/FirePHPCore-0.3.2/CREDITS
Normal file
12
util/FirePHPCore-0.3.2/CREDITS
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
_______________________________
|
||||||
|
F i r e P H P C o r e
|
||||||
|
|
||||||
|
Current Development
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Christoph Dorn <christoph@christophdorn.com>
|
||||||
|
Michael Day <manveru.alma@gmail.com>
|
||||||
|
|
||||||
|
If you've done work on FirePHPCore and you are not listed here,
|
||||||
|
please feel free to add yourself.
|
||||||
|
|
32
util/FirePHPCore-0.3.2/README
Normal file
32
util/FirePHPCore-0.3.2/README
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
Version: 0.3.2
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
Requirements
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
Client Side:
|
||||||
|
|
||||||
|
- Firefox - http://www.getfirefox.com/
|
||||||
|
- Firebug - http://www.getfirebug.com/
|
||||||
|
- FirePHP - http://www.firephp.org/
|
||||||
|
|
||||||
|
Server Side:
|
||||||
|
|
||||||
|
- PHP 5 (complete functionality)
|
||||||
|
- PHP 4 (most functionality)
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
Install Tutorial
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
http://www.firephp.org/HQ/Install.htm
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
Support
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
http://forum.firephp.org/
|
||||||
|
|
1784
util/FirePHPCore-0.3.2/lib/FirePHPCore/FirePHP.class.php
Normal file
1784
util/FirePHPCore-0.3.2/lib/FirePHPCore/FirePHP.class.php
Normal file
File diff suppressed because it is too large
Load Diff
29
util/FirePHPCore-0.3.2/lib/FirePHPCore/LICENSE
Normal file
29
util/FirePHPCore-0.3.2/lib/FirePHPCore/LICENSE
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Software License Agreement (New BSD License)
|
||||||
|
|
||||||
|
Copyright (c) 2006-2009, Christoph Dorn
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of Christoph Dorn nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from this
|
||||||
|
software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
276
util/FirePHPCore-0.3.2/lib/FirePHPCore/fb.php
Normal file
276
util/FirePHPCore-0.3.2/lib/FirePHPCore/fb.php
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
*
|
||||||
|
* This file is part of FirePHP (http://www.firephp.org/).
|
||||||
|
*
|
||||||
|
* Software License Agreement (New BSD License)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006-2010, Christoph Dorn
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Christoph Dorn nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK *****
|
||||||
|
*
|
||||||
|
* @copyright Copyright (C) 2007-2009 Christoph Dorn
|
||||||
|
* @author Christoph Dorn <christoph@christophdorn.com>
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php
|
||||||
|
* @package FirePHPCore
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!class_exists('FirePHP')) {
|
||||||
|
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'FirePHP.class.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the given data to the FirePHP Firefox Extension.
|
||||||
|
* The data can be displayed in the Firebug Console or in the
|
||||||
|
* "Server" request tab.
|
||||||
|
*
|
||||||
|
* @see http://www.firephp.org/Wiki/Reference/Fb
|
||||||
|
* @param mixed $Object
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
function fb()
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
|
||||||
|
$args = func_get_args();
|
||||||
|
return call_user_func_array(array($instance,'fb'),$args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class FB
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Enable and disable logging to Firebug
|
||||||
|
*
|
||||||
|
* @see FirePHP->setEnabled()
|
||||||
|
* @param boolean $Enabled TRUE to enable, FALSE to disable
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function setEnabled($Enabled)
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
$instance->setEnabled($Enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if logging is enabled
|
||||||
|
*
|
||||||
|
* @see FirePHP->getEnabled()
|
||||||
|
* @return boolean TRUE if enabled
|
||||||
|
*/
|
||||||
|
public static function getEnabled()
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
return $instance->getEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify a filter to be used when encoding an object
|
||||||
|
*
|
||||||
|
* Filters are used to exclude object members.
|
||||||
|
*
|
||||||
|
* @see FirePHP->setObjectFilter()
|
||||||
|
* @param string $Class The class name of the object
|
||||||
|
* @param array $Filter An array or members to exclude
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function setObjectFilter($Class, $Filter)
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
$instance->setObjectFilter($Class, $Filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set some options for the library
|
||||||
|
*
|
||||||
|
* @see FirePHP->setOptions()
|
||||||
|
* @param array $Options The options to be set
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function setOptions($Options)
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
$instance->setOptions($Options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get options for the library
|
||||||
|
*
|
||||||
|
* @see FirePHP->getOptions()
|
||||||
|
* @return array The options
|
||||||
|
*/
|
||||||
|
public static function getOptions()
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
return $instance->getOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log object to firebug
|
||||||
|
*
|
||||||
|
* @see http://www.firephp.org/Wiki/Reference/Fb
|
||||||
|
* @param mixed $Object
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function send()
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
$args = func_get_args();
|
||||||
|
return call_user_func_array(array($instance,'fb'),$args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start a group for following messages
|
||||||
|
*
|
||||||
|
* Options:
|
||||||
|
* Collapsed: [true|false]
|
||||||
|
* Color: [#RRGGBB|ColorName]
|
||||||
|
*
|
||||||
|
* @param string $Name
|
||||||
|
* @param array $Options OPTIONAL Instructions on how to log the group
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public static function group($Name, $Options=null)
|
||||||
|
{
|
||||||
|
$instance = FirePHP::getInstance(true);
|
||||||
|
return $instance->group($Name, $Options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ends a group you have started before
|
||||||
|
*
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function groupEnd()
|
||||||
|
{
|
||||||
|
return self::send(null, null, FirePHP::GROUP_END);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log object with label to firebug console
|
||||||
|
*
|
||||||
|
* @see FirePHP::LOG
|
||||||
|
* @param mixes $Object
|
||||||
|
* @param string $Label
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function log($Object, $Label=null)
|
||||||
|
{
|
||||||
|
return self::send($Object, $Label, FirePHP::LOG);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log object with label to firebug console
|
||||||
|
*
|
||||||
|
* @see FirePHP::INFO
|
||||||
|
* @param mixes $Object
|
||||||
|
* @param string $Label
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function info($Object, $Label=null)
|
||||||
|
{
|
||||||
|
return self::send($Object, $Label, FirePHP::INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log object with label to firebug console
|
||||||
|
*
|
||||||
|
* @see FirePHP::WARN
|
||||||
|
* @param mixes $Object
|
||||||
|
* @param string $Label
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function warn($Object, $Label=null)
|
||||||
|
{
|
||||||
|
return self::send($Object, $Label, FirePHP::WARN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log object with label to firebug console
|
||||||
|
*
|
||||||
|
* @see FirePHP::ERROR
|
||||||
|
* @param mixes $Object
|
||||||
|
* @param string $Label
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function error($Object, $Label=null)
|
||||||
|
{
|
||||||
|
return self::send($Object, $Label, FirePHP::ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dumps key and variable to firebug server panel
|
||||||
|
*
|
||||||
|
* @see FirePHP::DUMP
|
||||||
|
* @param string $Key
|
||||||
|
* @param mixed $Variable
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function dump($Key, $Variable)
|
||||||
|
{
|
||||||
|
return self::send($Variable, $Key, FirePHP::DUMP);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a trace in the firebug console
|
||||||
|
*
|
||||||
|
* @see FirePHP::TRACE
|
||||||
|
* @param string $Label
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function trace($Label)
|
||||||
|
{
|
||||||
|
return self::send($Label, FirePHP::TRACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a table in the firebug console
|
||||||
|
*
|
||||||
|
* @see FirePHP::TABLE
|
||||||
|
* @param string $Label
|
||||||
|
* @param string $Table
|
||||||
|
* @return true
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function table($Label, $Table)
|
||||||
|
{
|
||||||
|
return self::send($Table, $Label, FirePHP::TABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -9,16 +9,18 @@
|
|||||||
* @filesource $URL$
|
* @filesource $URL$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class QueryProfiler
|
class CommandProfiler
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $query = '';
|
protected $type;
|
||||||
|
protected $command = '';
|
||||||
protected $start = null;
|
protected $start = null;
|
||||||
protected $end = null;
|
protected $end = null;
|
||||||
|
|
||||||
public function __construct($query)
|
public function __construct($type, $command)
|
||||||
{
|
{
|
||||||
$this->query = $query;
|
$this->type = $type;
|
||||||
|
$this->command = $command;
|
||||||
$this->start = microtime(true);
|
$this->start = microtime(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,9 +29,14 @@ class QueryProfiler
|
|||||||
$this->end = microtime(true);
|
$this->end = microtime(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getQuery()
|
public function getCommand()
|
||||||
{
|
{
|
||||||
return $this->query;
|
return $this->command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getType()
|
||||||
|
{
|
||||||
|
return $this->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getElapsed()
|
public function getElapsed()
|
@ -11,26 +11,29 @@
|
|||||||
|
|
||||||
class Profiler
|
class Profiler
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $start = null;
|
protected $start = null;
|
||||||
protected $end = null;
|
|
||||||
|
protected $end = null;
|
||||||
|
|
||||||
protected $queries = array();
|
protected $queries = array();
|
||||||
|
|
||||||
static protected $instance = null;
|
static protected $instance = null;
|
||||||
|
|
||||||
private function __construct()
|
private function __construct()
|
||||||
{
|
{
|
||||||
if (DEBUG == false) {
|
if (DEBUG == false) {
|
||||||
throw new GeneralException('Need to turn on DEBUG before use.');
|
throw new GeneralException('Need to turn on DEBUG before use.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refuse cloning
|
* Refuse cloning
|
||||||
*/
|
*/
|
||||||
private function __clone(){}
|
private function __clone()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Profiler
|
* @return Profiler
|
||||||
*/
|
*/
|
||||||
@ -41,23 +44,24 @@ class Profiler
|
|||||||
}
|
}
|
||||||
return self::$instance;
|
return self::$instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $query
|
* @param string $type
|
||||||
* @return QueryProfiler
|
* @param string $command
|
||||||
|
* @return CommandProfiler
|
||||||
*/
|
*/
|
||||||
public function profilerQuery($query)
|
public function profilerCommand($type, $command)
|
||||||
{
|
{
|
||||||
$profiler = new QueryProfiler($query);
|
$profiler = new CommandProfiler($type, $command);
|
||||||
$this->queries[] = $profiler;
|
$this->queries[] = $profiler;
|
||||||
return $profiler;
|
return $profiler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function start()
|
public function start()
|
||||||
{
|
{
|
||||||
$this->start = microtime(true);
|
$this->start = microtime(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function end($html)
|
public function end($html)
|
||||||
{
|
{
|
||||||
$this->end = microtime(true);
|
$this->end = microtime(true);
|
||||||
@ -66,17 +70,35 @@ class Profiler
|
|||||||
}
|
}
|
||||||
return str_ireplace('</body>', $this->getOutput() . '</body>', $html);
|
return str_ireplace('</body>', $this->getOutput() . '</body>', $html);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getOutput()
|
protected function getOutput()
|
||||||
{
|
{
|
||||||
$html = '<div style="clear:both; font:12px monospace; margin: 5px; white-space: pre;">'
|
$temp = '';
|
||||||
. 'Elapsed time: ' . round(($this->end- $this->start) * 1000) . 'ms.<br/>'
|
$queriesTime = 0;
|
||||||
. 'Queries: ' . count($this->queries) . '<br/>';
|
|
||||||
|
|
||||||
foreach ($this->queries as $query) {
|
foreach ($this->queries as $query) {
|
||||||
$html .= '[' . round($query->getElapsed() * 1000) . 'ms] ' . $query->getQuery() . '<br/>';
|
$temp .= '(' . $query->getType() . ') [' . round($query->getElapsed() * 1000, 2) . 'ms] ' . $query->getCommand() . '<br/>';
|
||||||
|
$queriesTime += $query->getElapsed();
|
||||||
}
|
}
|
||||||
|
$html = '<div style="clear:both; font:12px monospace; margin: 5px; white-space: pre;">'
|
||||||
|
. 'Elapsed time: ' . round(($this->end - $this->start) * 1000, 2) . 'ms.<br/>'
|
||||||
|
. 'Queries: ' . count($this->queries) . ' [' . round($queriesTime * 1000, 2) . ' ms]<br/>';
|
||||||
|
$html .= $temp;
|
||||||
$html .= '</div>';
|
$html .= '</div>';
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getJson()
|
||||||
|
{
|
||||||
|
$this->end = microtime(true);
|
||||||
|
FB::info(round(($this->end - $this->start) * 1000, 2) . ' ms', 'Elapsed time');
|
||||||
|
$table = array();
|
||||||
|
$table[] = array('Type', 'Time (ms)', 'Query');
|
||||||
|
|
||||||
|
$queriesTime = 0;
|
||||||
|
foreach ($this->queries as $query) {
|
||||||
|
$table[] = array($query->getType(), round($query->getElapsed() * 1000, 2), $query->getCommand());
|
||||||
|
$queriesTime += $query->getElapsed();
|
||||||
|
}
|
||||||
|
FB::table('Queries: ' . count($this->queries) . ' [' . round($queriesTime * 1000, 2) . ' ms]', $table);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user