Продолжаем знакомство с миром #Buggregator
Рабочее название в первые дни — "Buggregator Client". Задумывался как прокси вар-дампов на Buggregator Cloud, но быстро оброс фичами и новым смыслом.
Теперь Trap — это:
- Миниатюрный сервер Buggregator, не требующий Docker для работы. Написан на файберах PHP 8.1. Раньше выводил дампы, логи, HTTP и прочие события только в консоль. Сейчас поддерживается такой же WEB интерфейс, как у старшего брата.
- Набор патчей для Symfony VarDumper. Наличие установленного Trap в вашем проекте улучшит то, как VarDumper отрисовывает Protobuf объекты.
- Набор хелперов. В Trap есть функция trap()
. Это тот же Symfony dump()
, но с некоторыми изменениями.
Установка:
composer require --dev buggregator/trap -W
🪲 Trap сервер
Запускается из вендора:
./vendor/bin/trap --ui
Флаг --ui необходим для включения веб-морды на 8000 порту. Сейчас эта функция в бета-режиме.
По умолчанию Trap слушает только один порт
9912
, но туда можно слать всё: и дампы, и логи, и http, переходящий в WebSocket. Мы написали инспектор траффика, который сам определяет протокол и направляет данные в нужный обработчик.Trap можно запустить на тех же портах, что и основной Buggregator:
vendor/bin/trap -p1025 -p9912 -p9913 -p8000
(стоит ли сделать этот список портов по умолчанию?)
Trap годится только для локального использования: тут нет SSO, а из "внешних БД", возможно, будет только SQLite, просто чтобы не хранить события в массивах 🙂
Но есть и эксклюзивные фичи:
- благодаря "локальности", Trap может находить файлы профилировщиков, если таковые были сконфигурированы в
php.ini
.- низкоуровневая работа с трафиком позволяет реализовать абсолютно любой протокол. Даже просто вывести сырые бинарные данные, как отдельное событие, чего-то да стоит!
🚀 Хэлперы trap()
Функция
trap()
немного отличается от dump()
:- При вызове сразу настраиваются умолчания для отправки симфоневых дампов на локальный сервер (
127.0.0.1:9912
), так что не надо лезть в .env
.-
trap()
имеет текучий интерфейс (fluent interface), а значит можно делать так:trap(FOO: $foo, BAR: $bar) // Дампаем переменные с указанием имен
->stackTrace() // Добавить красивый Stack Trace
->once() // Сработает один раз. Удобно использовать в циклах.
->if($foo instanceof FooInterface) // Условие отправки; можно функцией
->return(); // $foo вернётся как результат
-
trap()::profile()->...
в планах добавить удобства для профилирования- а ещё (субъективно)
trap
набирать и произносить удобнее, чем dump
. Так что хватит дампать, го трапать!🪄 Подводя итог
Trap как сервер — хорошая альтернатива, когда не хочется запускать докер а PHP установлен локально.
Trap как PHP helper — необходим, если работаете с Protobuf и gRPC. Может быть удобнее
dump()
. Перспективен.⭐️ Также будем очень рады звёздочкам на гитхабе и контрибьюторской поддержке.