Коллекторы
Коллекторы -- основной механизм сбора данных в ADP. Каждый коллектор реализует интерфейс CollectorInterfaceAppDevPanel\Kernel\Collector\CollectorInterfaceDebug data collector responsibility is to collect data during application lifecycle. и отвечает за захват определённого типа данных во время выполнения приложения.
Встроенные коллекторы
Основные коллекторы
Веб-специфичные
| Коллектор | Собираемые данные |
|---|---|
RequestCollectorAppDevPanel\Kernel\Collector\Web\RequestCollectorCollects Request data during application lifecycle. | Входящие HTTP-запросы и ответы |
WebAppInfoCollectorAppDevPanel\Kernel\Collector\Web\WebAppInfoCollectorCollects Web App Info data during application lifecycle. | Версия PHP, память, время выполнения |
Консольные
| Коллектор | Собираемые данные |
|---|---|
CommandCollectorAppDevPanel\Kernel\Collector\Console\CommandCollectorCollects Command data during application lifecycle. | Выполнение консольных команд |
ConsoleAppInfoCollectorAppDevPanel\Kernel\Collector\Console\ConsoleAppInfoCollectorCollects Console App Info data during application lifecycle. | Метаданные консольного приложения |
CollectorInterface
Каждый коллектор реализует пять методов:
interface CollectorInterface
{
public function getId(): string; // Уникальный ID (обычно FQCN)
public function getName(): string; // Короткое читаемое имя
public function startup(): void; // Вызывается в начале запроса
public function shutdown(): void; // Вызывается в конце запроса
public function getCollected(): array; // Возвращает собранные данные
}DebuggerAppDevPanel\Kernel\DebuggerClass Debugger. вызывает startup() на всех зарегистрированных коллекторах в начале запроса, а shutdown() и getCollected() -- в конце.
Создание пользовательского коллектора
<?php
declare(strict_types=1);
namespace App\Debug;
use AppDevPanel\Kernel\Collector\CollectorInterface;
final class MetricsCollector implements CollectorInterface
{
private array $metrics = [];
public function getId(): string
{
return self::class;
}
public function getName(): string
{
return 'metrics';
}
public function startup(): void
{
$this->metrics = [];
}
public function shutdown(): void
{
// Финализация данных при необходимости
}
public function getCollected(): array
{
return $this->metrics;
}
public function record(string $name, float $value): void
{
$this->metrics[] = ['name' => $name, 'value' => $value];
}
}Зарегистрируйте коллектор в DI-конфигурации адаптера вашего фреймворка, чтобы DebuggerAppDevPanel\Kernel\DebuggerClass Debugger. подхватил его автоматически.
Поток данных
Коллекторы получают данные двумя способами:
- Через прокси -- прокси PSR-интерфейсов (например, LoggerInterfaceProxy
AppDevPanel\Kernel\Collector\LoggerInterfaceProxyDecorator proxy for Logger Interface. Intercepts calls and forwards data to collectors.) перехватывают вызовы и автоматически передают данные соответствующему коллектору. - Через прямые вызовы -- хуки адаптера или код приложения вызывают методы коллектора напрямую (например, DatabaseCollector
AppDevPanel\Kernel\Collector\DatabaseCollectorCaptures SQL queries and transactions from the application. получает данные запросов через хуки базы данных фреймворка).
SummaryCollectorInterface
Коллекторы также могут реализовать SummaryCollectorInterfaceAppDevPanel\Kernel\Collector\SummaryCollectorInterfaceSummary data collector responsibility is to collect summary data for a collector. Summary is used to display a list of previous requests and select one to display full info. Its data set is specific to the list and is reduced compared to full data collected in {@see CollectorInterface}. для предоставления сводных данных, отображаемых в списке отладочных записей без загрузки полных данных коллектора.
TranslatorCollector
Захватывает обращения к переводам во время выполнения запроса, включая обнаружение отсутствующих переводов. Реализует SummaryCollectorInterfaceAppDevPanel\Kernel\Collector\SummaryCollectorInterfaceSummary data collector responsibility is to collect summary data for a collector. Summary is used to display a list of previous requests and select one to display full info. Its data set is specific to the list and is reduced compared to full data collected in {@see CollectorInterface}..
Подробности на странице Переводчик: поля TranslationRecord, структура собранных данных, логика определения отсутствующих переводов, интеграции proxy фреймворков и примеры конфигурации.
Code Coverage Collector
CodeCoverageCollectorAppDevPanel\Kernel\Collector\CodeCoverageCollectorCollects Code Coverage data during application lifecycle. собирает построчное покрытие PHP-кода за каждый HTTP-запрос, используя pcov или xdebug в качестве драйвера.
Предварительные требования
Необходимо расширение pcov (рекомендуется) или xdebug с включённым режимом coverage. Без них коллектор возвращает пустой результат с driver: null.
Как это работает
- При
startup()коллектор определяет доступный драйвер и запускает сбор покрытия - Код приложения выполняется в обычном режиме — каждая выполненная строка PHP отслеживается
- При
shutdown()сбор останавливается, и сырые данные обрабатываются в постатистику по файлам - Файлы, соответствующие
excludePaths(по умолчанию:vendor), отфильтровываются
Включение
Покрытие кода — opt-in (по умолчанию отключено) из-за влияния на производительность.
# config/packages/app_dev_panel.yaml
app_dev_panel:
collectors:
code_coverage: trueФормат вывода
{
"driver": "pcov",
"files": {
"/app/src/Controller/HomeController.php": {
"coveredLines": 12,
"executableLines": 15,
"percentage": 80.0
}
},
"summary": {
"totalFiles": 42,
"coveredLines": 340,
"executableLines": 500,
"percentage": 68.0
}
}Эндпоинт Inspector
Inspector также предоставляет эндпоинт GET /inspect/api/coverage для разового сбора покрытия. Подробнее — в разделе Эндпоинты Inspector.