Продолжаем знакомство с миром #Buggregator
💾
TrapРабочее название в первые дни —
"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(). Перспективен.
⭐️ Также будем очень рады
звёздочкам на гитхабе и контрибьюторской поддержке.