Хранилище
ADP сохраняет отладочные данные через абстракцию StorageInterfaceAppDevPanel\Kernel\Storage\StorageInterfaceDebug data storage responsibility is to store debug data from collectors added. Реализация по умолчанию -- FileStorageAppDevPanel\Kernel\Storage\FileStorageClass FileStorage. -- записывает JSON-файлы на диск.
StorageInterface
interface StorageInterface
{
public function addCollector(CollectorInterface $collector): void;
public function getData(): array;
public function read(string $type, ?string $id = null): array;
public function write(string $id, array $summary, array $data, array $objects): void;
public function flush(): void;
public function clear(): void;
}Типы данных
Каждая отладочная запись хранится в виде трёх отдельных частей:
| Тип | Константа | Содержимое |
|---|---|---|
| Сводка | TYPE_SUMMARY | Время, URL, HTTP-статус, имена коллекторов |
| Данные | TYPE_DATA | Полные данные коллекторов |
| Объекты | TYPE_OBJECTS | Сериализованные PHP-объекты для детальной инспекции |
Такое разделение позволяет фронтенду быстро загружать сводки без получения полных данных.
FileStorage
FileStorageAppDevPanel\Kernel\Storage\FileStorageClass FileStorage. -- реализация по умолчанию для продакшена. Записывает JSON-файлы в настраиваемую директорию.
Основные особенности:
- Каждая запись создаёт три JSON-файла (summary, data, objects)
- Использует
LOCK_EXдля атомарной записи - Использует
flockдля взаимного исключения при сборке мусора - Поддерживает настраиваемый лимит записей с автоматической очисткой старых
Структура директории
debug-data/
├── 000001.summary.json
├── 000001.data.json
├── 000001.objects.json
├── 000002.summary.json
├── 000002.data.json
├── 000002.objects.json
└── ...MemoryStorage
MemoryStorageAppDevPanel\Kernel\Storage\MemoryStorageClass MemoryStorage. -- реализация в памяти, используемая исключительно для тестирования. Хранит все данные в массивах PHP без дискового ввода-вывода.
Источники записи
Хранилище получает данные из двух источников:
- Сброс Debugger -- после завершения запроса или консольной команды Debugger
AppDevPanel\Kernel\DebuggerClass Debugger. вызываетflush(), который сериализует все данные коллекторов. - Ingestion API -- IngestionController
AppDevPanel\Api\Ingestion\Controller\IngestionControllerIngestion inspector API controller. вызываетwrite()напрямую, позволяя внешним (не-PHP) приложениям отправлять отладочные данные через HTTP.
Расширение хранилища
Для создания собственного бэкенда (например, Redis, база данных) реализуйте StorageInterfaceAppDevPanel\Kernel\Storage\StorageInterfaceDebug data storage responsibility is to store debug data from collectors added и зарегистрируйте его в DI-контейнере. Метод read() должен поддерживать фильтрацию по $type и опционально по $id.