Commit 20666567 by Qiang Xue

debug toolbar WIP

parent 16dcd970
...@@ -25,14 +25,22 @@ use yii\widgets\FragmentCache; ...@@ -25,14 +25,22 @@ use yii\widgets\FragmentCache;
class View extends Component class View extends Component
{ {
/** /**
* @event ViewEvent an event that is triggered by [[beginPage()]]. * @event Event an event that is triggered by [[beginPage()]].
*/ */
const EVENT_BEGIN_PAGE = 'beginPage'; const EVENT_BEGIN_PAGE = 'beginPage';
/** /**
* @event ViewEvent an event that is triggered by [[endPage()]]. * @event Event an event that is triggered by [[endPage()]].
*/ */
const EVENT_END_PAGE = 'endPage'; const EVENT_END_PAGE = 'endPage';
/** /**
* @event Event an event that is triggered by [[beginBody()]].
*/
const EVENT_BEGIN_BODY = 'beginBody';
/**
* @event Event an event that is triggered by [[endBody()]].
*/
const EVENT_END_BODY = 'endBody';
/**
* @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file. * @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file.
*/ */
const EVENT_BEFORE_RENDER = 'beforeRender'; const EVENT_BEFORE_RENDER = 'beforeRender';
...@@ -532,6 +540,7 @@ class View extends Component ...@@ -532,6 +540,7 @@ class View extends Component
public function beginBody() public function beginBody()
{ {
echo self::PL_BODY_BEGIN; echo self::PL_BODY_BEGIN;
$this->trigger(self::EVENT_BEGIN_BODY);
} }
/** /**
...@@ -539,6 +548,7 @@ class View extends Component ...@@ -539,6 +548,7 @@ class View extends Component
*/ */
public function endBody() public function endBody()
{ {
$this->trigger(self::EVENT_END_BODY);
echo self::PL_BODY_END; echo self::PL_BODY_END;
} }
......
...@@ -8,31 +8,47 @@ ...@@ -8,31 +8,47 @@
namespace yii\debug; namespace yii\debug;
use Yii; use Yii;
use yii\base\Widget; use yii\base\Component;
use yii\base\View;
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @author Qiang Xue <qiang.xue@gmail.com> * @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0 * @since 2.0
*/ */
class Toolbar extends Widget class Debugger extends Component
{ {
public $debugAction = 'debug/default/toolbar'; public $debugAction = 'debug/default/toolbar';
public $panels;
public function run() public function init()
{ {
if (Yii::$app->hasModule('debug')) { parent::init();
$id = 'yii-debug-toolbar'; Yii::$app->setModule('debug', array(
$url = Yii::$app->getUrlManager()->createUrl($this->debugAction, array( 'class' => 'yii\debug\Module',
'tag' => Yii::getLogger()->tag, 'panels' => $this->panels,
)); ));
$view = $this->getView(); Yii::$app->log->targets[] = new LogTarget;
$view->registerJs("yii.debug.load('$id', '$url');"); Yii::$app->getView()->on(View::EVENT_END_BODY, array($this, 'renderToolbar'));
$view->registerAssetBundle('yii/debug'); }
echo Html::tag('div', '', array(
'id' => $id, public function renderToolbar($event)
'style' => 'display: none', {
)); if (Yii::$app->getModule('debug', false) !== null) {
return;
} }
/** @var View $view */
$id = 'yii-debug-toolbar';
$url = Yii::$app->getUrlManager()->createUrl($this->debugAction, array(
'tag' => Yii::getLogger()->tag,
));
$view = $event->sender;
$view->registerJs("yii.debug.load('$id', '$url');");
$view->registerAssetBundle('yii/debug');
echo Html::tag('div', '', array(
'id' => $id,
'style' => 'display: none',
));
} }
} }
...@@ -5,15 +5,16 @@ ...@@ -5,15 +5,16 @@
* @license http://www.yiiframework.com/license/ * @license http://www.yiiframework.com/license/
*/ */
namespace yii\logging; namespace yii\debug;
use Yii; use Yii;
use yii\logging\Target;
/** /**
* @author Qiang Xue <qiang.xue@gmail.com> * @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0 * @since 2.0
*/ */
class DebugTarget extends Target class LogTarget extends Target
{ {
public $maxLogFiles = 20; public $maxLogFiles = 20;
...@@ -72,6 +73,7 @@ class DebugTarget extends Target ...@@ -72,6 +73,7 @@ class DebugTarget extends Target
$iterator = new \DirectoryIterator(Yii::$app->getRuntimePath() . '/debug'); $iterator = new \DirectoryIterator(Yii::$app->getRuntimePath() . '/debug');
$files = array(); $files = array();
foreach ($iterator as $file) { foreach ($iterator as $file) {
/** @var \DirectoryIterator $file */
if (preg_match('/^[\d\-]+\.log$/', $file->getFileName()) && $file->isFile()) { if (preg_match('/^[\d\-]+\.log$/', $file->getFileName()) && $file->isFile()) {
$files[] = $file->getPathname(); $files[] = $file->getPathname();
} }
......
...@@ -14,4 +14,5 @@ namespace yii\debug; ...@@ -14,4 +14,5 @@ namespace yii\debug;
class Module extends \yii\base\Module class Module extends \yii\base\Module
{ {
public $controllerNamespace = 'yii\debug\controllers'; public $controllerNamespace = 'yii\debug\controllers';
public $panels;
} }
...@@ -16,9 +16,11 @@ use yii\web\Controller; ...@@ -16,9 +16,11 @@ use yii\web\Controller;
*/ */
class DefaultController extends Controller class DefaultController extends Controller
{ {
public $layout = 'main';
public function actionIndex($tag) public function actionIndex($tag)
{ {
echo $tag; return $this->render('index');
} }
public function actionToolbar($tag) public function actionToolbar($tag)
...@@ -26,9 +28,10 @@ class DefaultController extends Controller ...@@ -26,9 +28,10 @@ class DefaultController extends Controller
$file = Yii::$app->getRuntimePath() . "/debug/$tag.log"; $file = Yii::$app->getRuntimePath() . "/debug/$tag.log";
if (preg_match('/^[\w\-]+$/', $tag) && is_file($file)) { if (preg_match('/^[\w\-]+$/', $tag) && is_file($file)) {
$data = json_decode(file_get_contents($file), true); $data = json_decode(file_get_contents($file), true);
echo $this->renderPartial('toolbar', $data); $data['tag'] = $tag;
return $this->renderPartial('toolbar', $data);
} else { } else {
echo "Unable to find debug data tagged with '$tag'."; return "Unable to find debug data tagged with '$tag'.";
} }
} }
} }
...@@ -19,21 +19,22 @@ echo Html::style(" ...@@ -19,21 +19,22 @@ echo Html::style("
margin: 0 10px; margin: 0 10px;
"); ");
?> ?>
<div id="yii-debug-toolbar">
<div class="yii-debug-toolbar-block">
<?php echo Html::a('more details', array('index', 'tag' => $tag)); ?>
</div>
<div class="yii-debug-toolbar-block"> <div class="yii-debug-toolbar-block">
</div> Peak memory: <?php echo sprintf('%.2fMB', $memory / 1048576); ?>
</div>
<div class="yii-debug-toolbar-block">
Peak memory: <?php echo sprintf('%.2fMB', $memory / 1048576); ?>
</div>
<div class="yii-debug-toolbar-block"> <div class="yii-debug-toolbar-block">
Time spent: <?php echo sprintf('%.3fs', $time); ?> Time spent: <?php echo sprintf('%.3fs', $time); ?>
</div> </div>
<div class="yii-debug-toolbar-block"> <div class="yii-debug-toolbar-block">
</div> </div>
<div class="yii-debug-toolbar-block"> <div class="yii-debug-toolbar-block">
</div>
</div> </div>
<?php
/**
* @var \yii\base\View $this
* @var string $content
*/
use yii\helpers\Html;
?>
<!DOCTYPE html>
<html>
<?php $this->beginPage(); ?>
<head>
<title><?php echo Html::encode($this->title); ?></title>
<?php $this->head(); ?>
</head>
<body>
<?php $this->beginBody(); ?>
<?php echo $content; ?>
<?php $this->endBody(); ?>
</body>
<?php $this->endPage(); ?>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment