Как стать автором
Обновить

Модуль профайлинга «ProfilerToolbar»

Время на прочтение3 мин
Количество просмотров3.6K
Если вы используете Kohana, то скорее всего уже видели модуль DebugToolbar. Испробовав его на нескольких проектах, стало понятно, что его возможностей явно не хватает. А при использовании Ajax запросов данный модуль становиться вообще бесполезным.

Имея достаточно свободного времени и желание сделать удобный инструмент для разработки, я решил написать свой велосипед с блэкджеком и плюшками. В итоге получилась такая штуковина:

ProfilerToolbar


В данном модуле очень хотелось видеть не просто SQL запросы, а еще их EXPLAIN информацию.

ProfilerToolbar Tab: SQL Queries

Так же хотелось следить за работой с кешем.

ProfilerToolbar Tab: Cache

Видеть данные о текущем роуте и его параметрах.

ProfilerToolbar Tab: Route

Часто приходится просматривать сложные структуры данных используя var_dump(); и не портить код самой страницы.

ProfilerToolbar Tab: Your

Плюс к вышеперечисленному, выводятся глобальные переменные ($_GET,$_POST,$_SESSION и т.д.) и список поключаемых в проекте файлов, но там ничего интересного нет и дабы не засорять статью лишними скриншотами просто оставлю ссылку на страницу данного модуля.


Всё конечно хорошо, но как быть с Ajax запросами?

Для этого имеется вывод всё тех же данных в FireBug и выглядит это следующим образом.


Посмотреть развёрнутые группы


Установка модуля


Как и всегда, в файле bootstrap.php надо просто добавить строчку в список модулей с указанием каталога где он расположен. Но есть один ньюанс. Что бы получить дополнительную информацию о работе с кешем и о запросах к БД, мне пришлось переопределить их классы.
Поэтому, что бы использовались классы модуля, он должен располагаться перед строками Cache и Database.

Kohana::modules(array(
    ...
    'profilertoolbar' => MODPATH.'profilertoolbar',
    'cache'           => MODPATH.'cache',
    'database'        => MODPATH.'database',
    ...
  ));


Как пользоваться


Вывод панели на страницу

Что бы вывести панель, надо в шаблоне нужной вам страницы написать: ProfilerToolbar::render(true);
Я это делаю в основном шаблоне который выводится везде.

<html>
<body>
  ...
  content
  ...
  <?php ProfilerToolbar::render(true); ?>
</body>
</html>

Вывод данных в FireBug

После подключения модуля, данные в FireBug будут выводиться автоматически во всех методах любых контроллеров. Если вас это не устраевает и требуется просматривать данные только в определённых местах, то делаем следующим образом:
1. Отключам в конфиге параметр showEverywhere

  ...
  // firebug data settings
  'firebug'=>array(
    'enabled'         => true, // if set FALSE, panel don't ...
    'showEverywhere'  => FALSE, // if set TRUE you don't need ...
  ...


2. В нужном методе пишем ProfilerToolbar::firebug();
Или в контроллере который отвечает за Ajax:

  class Controller_Ajax extends Controller {
     public function after(){
      ...
      ProfilerToolbar::firebug();
      parent::after();
    }
    ...
  }


Добавление своих данных

Если вам нужно просмотреть дамп какой-то переменной, то выводить её следует так:
  ProfilerToolbar::addData('first tab','test string');
  ProfilerToolbar::addData('first tab',rand(1, 1000)/ rand(1, 1000));
  ProfilerToolbar::addData('first tab',$user);
  ProfilerToolbar::addData('first tab',$this->request->headers());
  ProfilerToolbar::addData('second tab','other data');

Получим результат как на данном скриншоте.

Конфиг


Что бы не приводить сюда листинг, можете посмотреть тут.
В нём можно отключить как вывод самой панели так и вывод данных в FireBug, ну и всех параметров в отдельности.
Например, изредка требуется посмотреть какие файлы подключаются в процессе выполнения скрипта, но как правило это не нужно и можно отключить параметр showIncFiles что значительно сократит генерируемый html код.

Не забудьте в конфиге database включить profiling, в противном случае запросы отображаться не будут.

Развитие


Если модуль будет востребован, то заморочусь оформлением кода по стилю Kohana и штатным userguide.
По функционалу планирую сделать отображение логов и надеюсь вы подкинете новых идей :)

Заключение


Страница модуля и демо: alertdevelop.ru/projects/profilertoolbar
Проект на гитхабе: github.com/Alert/profilertoolbar

p.s. На демо странице отображается только панель со статической информацией без инфы в FireBug.

Жду жёсткой критики :)
Теги:
Хабы:
+41
Комментарии46

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн