index.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. /* @var $this \yii\web\View */
  3. /* @var $manifest array */
  4. /* @var $searchModel \yii\debug\models\search\Debug */
  5. /* @var $dataProvider ArrayDataProvider */
  6. /* @var $panels \yii\debug\Panel[] */
  7. use yii\data\ArrayDataProvider;
  8. use yii\grid\GridView;
  9. use yii\helpers\Html;
  10. $this->title = 'Yii Debugger';
  11. ?>
  12. <div class="default-index">
  13. <div id="yii-debug-toolbar" class="yii-debug-toolbar yii-debug-toolbar_position_top" style="display: none;">
  14. <div class="yii-debug-toolbar__bar">
  15. <div class="yii-debug-toolbar__block yii-debug-toolbar__title">
  16. <a href="#">
  17. <img width="30" height="30" alt="" src="<?= \yii\debug\Module::getYiiLogo() ?>">
  18. </a>
  19. </div>
  20. <?php foreach ($panels as $panel): ?>
  21. <?= $panel->getSummary() ?>
  22. <?php endforeach; ?>
  23. </div>
  24. </div>
  25. <div class="container">
  26. <div class="row">
  27. <?php
  28. if (isset($this->context->module->panels['db']) && isset($this->context->module->panels['request'])) {
  29. echo ' <h1>Available Debug Data</h1>';
  30. $codes = [];
  31. foreach ($manifest as $tag => $vals) {
  32. if (!empty($vals['statusCode'])) {
  33. $codes[] = $vals['statusCode'];
  34. }
  35. }
  36. $codes = array_unique($codes, SORT_NUMERIC);
  37. $statusCodes = !empty($codes) ? array_combine($codes, $codes) : null;
  38. echo GridView::widget([
  39. 'dataProvider' => $dataProvider,
  40. 'filterModel' => $searchModel,
  41. 'rowOptions' => function ($model) use ($searchModel) {
  42. $dbPanel = $this->context->module->panels['db'];
  43. if ($searchModel->isCodeCritical($model['statusCode']) || $dbPanel->isQueryCountCritical($model['sqlCount'])) {
  44. return ['class'=>'danger'];
  45. }
  46. return [];
  47. },
  48. 'columns' => [
  49. ['class' => 'yii\grid\SerialColumn'],
  50. [
  51. 'attribute' => 'tag',
  52. 'value' => function ($data) {
  53. return Html::a($data['tag'], ['view', 'tag' => $data['tag']]);
  54. },
  55. 'format' => 'html',
  56. ],
  57. [
  58. 'attribute' => 'time',
  59. 'value' => function ($data) {
  60. return '<span class="nowrap">' . Yii::$app->formatter->asDatetime($data['time'], 'yyyy-MM-dd HH:mm:ss') . '</span>';
  61. },
  62. 'format' => 'html',
  63. ],
  64. 'ip',
  65. [
  66. 'attribute' => 'sqlCount',
  67. 'label' => 'Query Count',
  68. 'value' => function ($data) {
  69. $dbPanel = $this->context->module->panels['db'];
  70. if ($dbPanel->isQueryCountCritical($data['sqlCount'])) {
  71. $content = Html::tag('b', $data['sqlCount']) . ' ' . Html::tag('span', '', ['class' => 'glyphicon glyphicon-exclamation-sign']);
  72. return Html::a($content, ['view', 'panel' => 'db', 'tag' => $data['tag']], [
  73. 'title' => 'Too many queries. Allowed count is ' . $dbPanel->criticalQueryThreshold,
  74. ]);
  75. }
  76. return $data['sqlCount'];
  77. },
  78. 'format' => 'html',
  79. ],
  80. [
  81. 'attribute' => 'mailCount',
  82. 'visible' => isset($this->context->module->panels['mail']),
  83. ],
  84. [
  85. 'attribute' => 'method',
  86. 'filter' => ['get' => 'GET', 'post' => 'POST', 'delete' => 'DELETE', 'put' => 'PUT', 'head' => 'HEAD']
  87. ],
  88. [
  89. 'attribute'=>'ajax',
  90. 'value' => function ($data) {
  91. return $data['ajax'] ? 'Yes' : 'No';
  92. },
  93. 'filter' => ['No', 'Yes'],
  94. ],
  95. [
  96. 'attribute' => 'url',
  97. 'label' => 'URL',
  98. ],
  99. [
  100. 'attribute' => 'statusCode',
  101. 'value' => function ($data) {
  102. $statusCode = $data['statusCode'];
  103. if ($statusCode === null) {
  104. $statusCode = 200;
  105. }
  106. if ($statusCode >= 200 && $statusCode < 300) {
  107. $class = 'label-success';
  108. } elseif ($statusCode >= 300 && $statusCode < 400) {
  109. $class = 'label-info';
  110. } else {
  111. $class = 'label-danger';
  112. }
  113. return "<span class=\"label {$class}\">$statusCode</span>";
  114. },
  115. 'format' => 'raw',
  116. 'filter' => $statusCodes,
  117. 'label' => 'Status code'
  118. ],
  119. ],
  120. ]);
  121. } else {
  122. echo "<div class='alert alert-warning'>No data available. Panel <code>db</code> or <code>request</code> not found.</div>";
  123. }
  124. ?>
  125. </div>
  126. </div>
  127. </div>
  128. <script type="text/javascript">
  129. if (!window.frameElement) {
  130. document.querySelector('#yii-debug-toolbar').style.display = 'block';
  131. }
  132. </script>