From 8cc75957b2c91ccd5107a12c9ade9f3dd57c915f Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Tue, 29 Nov 2022 00:34:18 +0300 Subject: [PATCH 01/13] Create basic db collector --- config/params.php | 5 + src/Collector/ConnectionInterfaceProxy.php | 160 +++++++++++++++++++++ src/Collector/DatabaseCollector.php | 46 ++++++ 3 files changed, 211 insertions(+) create mode 100644 src/Collector/ConnectionInterfaceProxy.php create mode 100644 src/Collector/DatabaseCollector.php diff --git a/config/params.php b/config/params.php index 97f1f200a..eb44f5a2f 100644 --- a/config/params.php +++ b/config/params.php @@ -6,11 +6,14 @@ use Psr\Log\LoggerInterface; use Yiisoft\Assets\AssetLoaderInterface; use Yiisoft\Cache\CacheInterface; +use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Router\UrlMatcherInterface; use Yiisoft\Validator\ValidatorInterface; use Yiisoft\Yii\Debug\Collector\AssetCollector; use Yiisoft\Yii\Debug\Collector\CommandCollector; +use Yiisoft\Yii\Debug\Collector\ConnectionInterfaceProxy; use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\DatabaseCollector; use Yiisoft\Yii\Debug\Collector\EventCollector; use Yiisoft\Yii\Debug\Collector\LogCollector; use Yiisoft\Yii\Debug\Collector\MiddlewareCollector; @@ -43,6 +46,7 @@ 'collectors' => [ LogCollector::class, EventCollector::class, + DatabaseCollector::class, ServiceCollector::class, ValidatorCollector::class, QueueCollector::class, @@ -62,6 +66,7 @@ 'trackedServices' => [ LoggerInterface::class => [LoggerInterfaceProxy::class, LogCollector::class], EventDispatcherInterface::class => [EventDispatcherInterfaceProxy::class, EventCollector::class], + ConnectionInterface::class => [ConnectionInterfaceProxy::class, DatabaseCollector::class], QueueFactoryInterface::class => [QueueFactoryInterfaceProxy::class, QueueCollector::class], WorkerInterface::class => [QueueWorkerInterfaceProxy::class, QueueCollector::class], UrlMatcherInterface::class => [UrlMatcherInterfaceProxy::class, RouterCollector::class], diff --git a/src/Collector/ConnectionInterfaceProxy.php b/src/Collector/ConnectionInterfaceProxy.php new file mode 100644 index 000000000..fb07890f0 --- /dev/null +++ b/src/Collector/ConnectionInterfaceProxy.php @@ -0,0 +1,160 @@ +connection->beginTransaction($isolationLevel); + } + + public function cache(Closure $closure, int $duration = null, Dependency $dependency = null): mixed + { + return $this->connection->cache($closure, $duration, $dependency); + } + + public function createBatchQueryResult(QueryInterface $query, bool $each = false): BatchQueryResultInterface + { + return $this->connection->createBatchQueryResult($query, $each); + } + + public function createCommand(string $sql = null, array $params = []): CommandInterface + { + [$callStack] = debug_backtrace(); + + $this->collector->collect($sql, $params, $callStack['file'] . ':' . $callStack['line']); + + return $this->connection->createCommand($sql, $params); + } + + public function createTransaction(): TransactionInterface + { + return $this->connection->createTransaction(); + } + + public function close(): void + { + $this->connection->close(); + } + + public function getCacheKey(): array + { + return $this->connection->getCacheKey(); + } + + public function getName(): string + { + return $this->connection->getName(); + } + + public function getLastInsertID(string $sequenceName = null): string + { + return $this->connection->getLastInsertID($sequenceName); + } + + public function getQueryBuilder(): QueryBuilderInterface + { + return $this->connection->getQueryBuilder(); + } + + public function getQuoter(): QuoterInterface + { + return $this->connection->getQuoter(); + } + + public function getSchema(): SchemaInterface + { + return $this->connection->getSchema(); + } + + public function getServerVersion(): string + { + return $this->connection->getServerVersion(); + } + + public function getTablePrefix(): string + { + return $this->connection->getTablePrefix(); + } + + public function getTableSchema(string $name, bool $refresh = false): TableSchemaInterface|null + { + return $this->connection->getTableSchema($name, $refresh); + } + + public function getTransaction(): TransactionInterface|null + { + return $this->connection->getTransaction(); + } + + public function isActive(): bool + { + return $this->connection->isActive(); + } + + public function isSavepointEnabled(): bool + { + return $this->connection->isSavepointEnabled(); + } + + public function noCache(Closure $closure): mixed + { + return $this->connection->noCache($closure); + } + + public function notProfiler(): void + { + $this->connection->notProfiler(); + } + + public function open(): void + { + $this->connection->open(); + } + + public function queryCacheEnable(bool $value): void + { + $this->connection->queryCacheEnable($value); + } + + public function quoteValue(mixed $value): mixed + { + return $this->connection->quoteValue($value); + } + + public function setEnableSavepoint(bool $value): void + { + $this->connection->setEnableSavepoint($value); + } + + public function setTablePrefix(string $value): void + { + $this->connection->setTablePrefix($value); + } + + public function transaction(Closure $closure, string $isolationLevel = null): mixed + { + return $this->connection->transaction($closure, $isolationLevel); + } +} diff --git a/src/Collector/DatabaseCollector.php b/src/Collector/DatabaseCollector.php new file mode 100644 index 000000000..6a98b79dd --- /dev/null +++ b/src/Collector/DatabaseCollector.php @@ -0,0 +1,46 @@ +queries; + } + + public function collect(string $sql, array $params, string $line): void + { + $this->collectQuery($sql, $params, $line); + } + + private function collectQuery(string $sql, array $params, string $line): void + { + $this->queries[] = [ + 'rawSql' => $sql, + 'params' => $params, + 'line' => $line, + 'time' => microtime(true), + ]; + } + + public function getIndexData(): array + { + return [ + 'db' => [ + 'total' => count($this->queries), + ], + ]; + } + + private function reset(): void + { + $this->queries = []; + } +} From b10c25a290edeec70c976dee293b64a1b9203a5a Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Thu, 1 Dec 2022 00:24:12 +0300 Subject: [PATCH 02/13] Group web collectors --- config/events-web.php | 8 ++++---- config/params.php | 16 ++++++++-------- src/Collector/{ => Web}/AssetCollector.php | 5 ++++- .../{ => Web}/AssetLoaderInterfaceProxy.php | 2 +- src/Collector/{ => Web}/MiddlewareCollector.php | 5 ++++- src/Collector/{ => Web}/RequestCollector.php | 5 ++++- src/Collector/{ => Web}/RouterCollector.php | 5 ++++- .../{ => Web}/UrlMatcherInterfaceProxy.php | 2 +- src/Collector/{ => Web}/WebAppInfoCollector.php | 5 ++++- src/Collector/{ => Web}/WebViewCollector.php | 4 +++- 10 files changed, 37 insertions(+), 20 deletions(-) rename src/Collector/{ => Web}/AssetCollector.php (80%) rename src/Collector/{ => Web}/AssetLoaderInterfaceProxy.php (94%) rename src/Collector/{ => Web}/MiddlewareCollector.php (93%) rename src/Collector/{ => Web}/RequestCollector.php (94%) rename src/Collector/{ => Web}/RouterCollector.php (87%) rename src/Collector/{ => Web}/UrlMatcherInterfaceProxy.php (93%) rename src/Collector/{ => Web}/WebAppInfoCollector.php (93%) rename src/Collector/{ => Web}/WebViewCollector.php (82%) diff --git a/config/events-web.php b/config/events-web.php index 8d94b6727..673b000d4 100644 --- a/config/events-web.php +++ b/config/events-web.php @@ -6,10 +6,10 @@ use Yiisoft\Middleware\Dispatcher\Event\BeforeMiddleware; use Yiisoft\Profiler\ProfilerInterface; use Yiisoft\View\Event\WebView\AfterRender; -use Yiisoft\Yii\Debug\Collector\MiddlewareCollector; -use Yiisoft\Yii\Debug\Collector\RequestCollector; -use Yiisoft\Yii\Debug\Collector\WebAppInfoCollector; -use Yiisoft\Yii\Debug\Collector\WebViewCollector; +use Yiisoft\Yii\Debug\Collector\Web\MiddlewareCollector; +use Yiisoft\Yii\Debug\Collector\Web\RequestCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebViewCollector; use Yiisoft\Yii\Debug\Debugger; use Yiisoft\Yii\Http\Event\AfterEmit; use Yiisoft\Yii\Http\Event\AfterRequest; diff --git a/config/params.php b/config/params.php index eb44f5a2f..c71d9a5fe 100644 --- a/config/params.php +++ b/config/params.php @@ -9,29 +9,29 @@ use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Router\UrlMatcherInterface; use Yiisoft\Validator\ValidatorInterface; -use Yiisoft\Yii\Debug\Collector\AssetCollector; +use Yiisoft\Yii\Debug\Collector\Web\AssetCollector; use Yiisoft\Yii\Debug\Collector\CommandCollector; use Yiisoft\Yii\Debug\Collector\ConnectionInterfaceProxy; use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; use Yiisoft\Yii\Debug\Collector\DatabaseCollector; use Yiisoft\Yii\Debug\Collector\EventCollector; use Yiisoft\Yii\Debug\Collector\LogCollector; -use Yiisoft\Yii\Debug\Collector\MiddlewareCollector; +use Yiisoft\Yii\Debug\Collector\Web\MiddlewareCollector; use Yiisoft\Yii\Debug\Collector\QueueCollector; use Yiisoft\Yii\Debug\Collector\QueueFactoryInterfaceProxy; use Yiisoft\Yii\Debug\Collector\QueueWorkerInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\RequestCollector; -use Yiisoft\Yii\Debug\Collector\RouterCollector; +use Yiisoft\Yii\Debug\Collector\Web\RequestCollector; +use Yiisoft\Yii\Debug\Collector\Web\RouterCollector; use Yiisoft\Yii\Debug\Collector\ServiceCollector; use Yiisoft\Yii\Debug\Collector\ValidatorCollector; -use Yiisoft\Yii\Debug\Collector\WebAppInfoCollector; -use Yiisoft\Yii\Debug\Collector\WebViewCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebViewCollector; use Yiisoft\Yii\Debug\Command\ResetCommand; -use Yiisoft\Yii\Debug\Collector\AssetLoaderInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Web\AssetLoaderInterfaceProxy; use Yiisoft\Yii\Debug\Collector\ContainerInterfaceProxy; use Yiisoft\Yii\Debug\Collector\EventDispatcherInterfaceProxy; use Yiisoft\Yii\Debug\Collector\LoggerInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\UrlMatcherInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Web\UrlMatcherInterfaceProxy; use Yiisoft\Yii\Debug\Collector\ValidatorInterfaceProxy; use Yiisoft\Yii\Queue\QueueFactoryInterface; use Yiisoft\Yii\Queue\Worker\WorkerInterface; diff --git a/src/Collector/AssetCollector.php b/src/Collector/Web/AssetCollector.php similarity index 80% rename from src/Collector/AssetCollector.php rename to src/Collector/Web/AssetCollector.php index e48861cca..53abdf779 100644 --- a/src/Collector/AssetCollector.php +++ b/src/Collector/Web/AssetCollector.php @@ -2,9 +2,12 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Yiisoft\Assets\AssetBundle; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class AssetCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/AssetLoaderInterfaceProxy.php b/src/Collector/Web/AssetLoaderInterfaceProxy.php similarity index 94% rename from src/Collector/AssetLoaderInterfaceProxy.php rename to src/Collector/Web/AssetLoaderInterfaceProxy.php index 58b94b39c..5aefa3a3d 100644 --- a/src/Collector/AssetLoaderInterfaceProxy.php +++ b/src/Collector/Web/AssetLoaderInterfaceProxy.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Yiisoft\Assets\AssetBundle; use Yiisoft\Assets\AssetLoaderInterface; diff --git a/src/Collector/MiddlewareCollector.php b/src/Collector/Web/MiddlewareCollector.php similarity index 93% rename from src/Collector/MiddlewareCollector.php rename to src/Collector/Web/MiddlewareCollector.php index 96fe57abd..da2f9cd12 100644 --- a/src/Collector/MiddlewareCollector.php +++ b/src/Collector/Web/MiddlewareCollector.php @@ -2,11 +2,14 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use ReflectionClass; use Yiisoft\Middleware\Dispatcher\Event\AfterMiddleware; use Yiisoft\Middleware\Dispatcher\Event\BeforeMiddleware; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class MiddlewareCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/RequestCollector.php b/src/Collector/Web/RequestCollector.php similarity index 94% rename from src/Collector/RequestCollector.php rename to src/Collector/Web/RequestCollector.php index ba97debd5..e53e0c021 100644 --- a/src/Collector/RequestCollector.php +++ b/src/Collector/Web/RequestCollector.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use JsonException; use Psr\Http\Message\ResponseInterface; @@ -11,6 +11,9 @@ use Yiisoft\Yii\Http\Event\BeforeRequest; use function is_object; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class RequestCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/RouterCollector.php b/src/Collector/Web/RouterCollector.php similarity index 87% rename from src/Collector/RouterCollector.php rename to src/Collector/Web/RouterCollector.php index d9be05374..c9460706f 100644 --- a/src/Collector/RouterCollector.php +++ b/src/Collector/Web/RouterCollector.php @@ -2,11 +2,14 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Psr\Container\ContainerInterface; use Yiisoft\Router\CurrentRoute; use Yiisoft\Router\RouteCollectionInterface; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; class RouterCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/UrlMatcherInterfaceProxy.php b/src/Collector/Web/UrlMatcherInterfaceProxy.php similarity index 93% rename from src/Collector/UrlMatcherInterfaceProxy.php rename to src/Collector/Web/UrlMatcherInterfaceProxy.php index d51a107af..fe4129791 100644 --- a/src/Collector/UrlMatcherInterfaceProxy.php +++ b/src/Collector/Web/UrlMatcherInterfaceProxy.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Psr\Http\Message\ServerRequestInterface; use Yiisoft\Router\MatchingResult; diff --git a/src/Collector/WebAppInfoCollector.php b/src/Collector/Web/WebAppInfoCollector.php similarity index 93% rename from src/Collector/WebAppInfoCollector.php rename to src/Collector/Web/WebAppInfoCollector.php index f6372b110..df217d7e4 100644 --- a/src/Collector/WebAppInfoCollector.php +++ b/src/Collector/Web/WebAppInfoCollector.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Yiisoft\Yii\Console\Event\ApplicationStartup; use Yiisoft\Yii\Http\Event\AfterEmit; @@ -10,6 +10,9 @@ use Yiisoft\Yii\Http\Event\BeforeRequest; use function is_object; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class WebAppInfoCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/WebViewCollector.php b/src/Collector/Web/WebViewCollector.php similarity index 82% rename from src/Collector/WebViewCollector.php rename to src/Collector/Web/WebViewCollector.php index 03af8f321..174af52e1 100644 --- a/src/Collector/WebViewCollector.php +++ b/src/Collector/Web/WebViewCollector.php @@ -2,9 +2,11 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Yiisoft\View\Event\WebView\AfterRender; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; final class WebViewCollector implements CollectorInterface { From 37965a9e1123dd6480f630ab79d368396887dcbf Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Thu, 1 Dec 2022 00:30:36 +0300 Subject: [PATCH 03/13] Group db collectors --- config/params.php | 4 ++-- src/Collector/{ => Database}/ConnectionInterfaceProxy.php | 2 +- src/Collector/{ => Database}/DatabaseCollector.php | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) rename src/Collector/{ => Database}/ConnectionInterfaceProxy.php (98%) rename src/Collector/{ => Database}/DatabaseCollector.php (81%) diff --git a/config/params.php b/config/params.php index c71d9a5fe..177d71d6b 100644 --- a/config/params.php +++ b/config/params.php @@ -11,9 +11,9 @@ use Yiisoft\Validator\ValidatorInterface; use Yiisoft\Yii\Debug\Collector\Web\AssetCollector; use Yiisoft\Yii\Debug\Collector\CommandCollector; -use Yiisoft\Yii\Debug\Collector\ConnectionInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Database\ConnectionInterfaceProxy; use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; -use Yiisoft\Yii\Debug\Collector\DatabaseCollector; +use Yiisoft\Yii\Debug\Collector\Database\DatabaseCollector; use Yiisoft\Yii\Debug\Collector\EventCollector; use Yiisoft\Yii\Debug\Collector\LogCollector; use Yiisoft\Yii\Debug\Collector\Web\MiddlewareCollector; diff --git a/src/Collector/ConnectionInterfaceProxy.php b/src/Collector/Database/ConnectionInterfaceProxy.php similarity index 98% rename from src/Collector/ConnectionInterfaceProxy.php rename to src/Collector/Database/ConnectionInterfaceProxy.php index fb07890f0..1b58d52da 100644 --- a/src/Collector/ConnectionInterfaceProxy.php +++ b/src/Collector/Database/ConnectionInterfaceProxy.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Database; use Closure; use Yiisoft\Cache\Dependency\Dependency; diff --git a/src/Collector/DatabaseCollector.php b/src/Collector/Database/DatabaseCollector.php similarity index 81% rename from src/Collector/DatabaseCollector.php rename to src/Collector/Database/DatabaseCollector.php index 6a98b79dd..90f21e65a 100644 --- a/src/Collector/DatabaseCollector.php +++ b/src/Collector/Database/DatabaseCollector.php @@ -2,7 +2,11 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Database; + +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; class DatabaseCollector implements CollectorInterface, IndexCollectorInterface { From 4e496f475adc0375ed626f5e0ea6ca67891c8d66 Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Fri, 2 Dec 2022 22:50:10 +0300 Subject: [PATCH 04/13] Add cycle collector [WIP] --- config/params.php | 4 + src/Collector/Database/CycleCollector.php | 50 ++++++++ .../Database/CycleORMInterfaceProxy.php | 115 ++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 src/Collector/Database/CycleCollector.php create mode 100644 src/Collector/Database/CycleORMInterfaceProxy.php diff --git a/config/params.php b/config/params.php index 10644f403..307ec3bc4 100644 --- a/config/params.php +++ b/config/params.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use Cycle\ORM\ORMInterface; use Psr\Container\ContainerInterface; use Psr\EventDispatcher\EventDispatcherInterface; use Psr\Log\LoggerInterface; @@ -11,6 +12,8 @@ use Yiisoft\Injector\Injector; use Yiisoft\Router\UrlMatcherInterface; use Yiisoft\Validator\ValidatorInterface; +use Yiisoft\Yii\Debug\Collector\Database\CycleCollector; +use Yiisoft\Yii\Debug\Collector\Database\CycleORMInterfaceProxy; use Yiisoft\Yii\Debug\Collector\Web\AssetCollector; use Yiisoft\Yii\Debug\Collector\CommandCollector; use Yiisoft\Yii\Debug\Collector\Database\ConnectionInterfaceProxy; @@ -75,6 +78,7 @@ UrlMatcherInterface::class => [UrlMatcherInterfaceProxy::class, RouterCollector::class], ValidatorInterface::class => [ValidatorInterfaceProxy::class, ValidatorCollector::class], AssetLoaderInterface::class => [AssetLoaderInterfaceProxy::class, AssetCollector::class], + ORMInterface::class => [CycleORMInterfaceProxy::class, CycleCollector::class], CacheInterface::class, ], 'dumper.excludedClasses' => [ diff --git a/src/Collector/Database/CycleCollector.php b/src/Collector/Database/CycleCollector.php new file mode 100644 index 000000000..310e50696 --- /dev/null +++ b/src/Collector/Database/CycleCollector.php @@ -0,0 +1,50 @@ +queries; + } + + public function collect(...$args): void + { + $this->queries[] = $args; + } + + private function collectQuery(string $sql, array $params, string $line): void + { + $this->queries[] = [ + 'rawSql' => $sql, + 'params' => $params, + 'line' => $line, + 'time' => microtime(true), + ]; + } + + public function getIndexData(): array + { + return [ + 'cycle' => [ + 'total' => $this->queries, + ], + ]; + } + + private function reset(): void + { + $this->queries = []; + } +} diff --git a/src/Collector/Database/CycleORMInterfaceProxy.php b/src/Collector/Database/CycleORMInterfaceProxy.php new file mode 100644 index 000000000..5c2b3a3d4 --- /dev/null +++ b/src/Collector/Database/CycleORMInterfaceProxy.php @@ -0,0 +1,115 @@ +collector->collect('get', $role, $scope, $load); + return $this->orm->get($role, $scope, $load); + } + + public function getIndexes(string $entity): array + { + $this->collector->collect('getIndexes', $entity); + return $this->orm->getIndexes($entity); + } + + public function resolveRole(object|string $entity): string + { + $this->collector->collect('resolveRole', $entity); + return $this->orm->resolveRole($entity); + } + + public function make(string $role, array $data = [], int $status = Node::NEW, bool $typecast = false): object + { + $this->collector->collect('make', $role, $data, $status, $typecast); + return $this->orm->make($role, $data, $status, $typecast); + } + + public function getFactory(): FactoryInterface + { + $this->collector->collect('getFactory'); + return $this->orm->getFactory(); + } + + public function getCommandGenerator(): CommandGeneratorInterface + { + $this->collector->collect('getCommandGenerator'); + return $this->orm->getCommandGenerator(); + } + + public function getService(string $class): object + { + $this->collector->collect('getService', $class); + return $this->orm->getService($class); + } + + public function getSchema(): \Cycle\ORM\SchemaInterface + { + $this->collector->collect('getSchema'); + return $this->orm->getSchema(); + } + + public function getHeap(): HeapInterface + { + $this->collector->collect('getHeap'); + return $this->orm->getHeap(); + } + + public function with( + ?\Cycle\ORM\SchemaInterface $schema = null, + ?FactoryInterface $factory = null, + ?HeapInterface $heap = null + ): ORMInterface { + + $this->collector->collect('with', $schema, $factory, $heap); + return new self($this->orm->with($schema, $factory, $heap), $this->collector); + } + + public function getMapper(object|string $entity): MapperInterface + { + $this->collector->collect('getMapper', $entity); + return $this->orm->getMapper($entity); + } + + public function getRepository(object|string $entity): RepositoryInterface + { +// var_dump($this->orm); +// exit(); +// throw new \InvalidArgumentException(); + $this->collector->collect('getRepository', $entity); + return $this->orm->getRepository($entity); + } + + public function getRelationMap(string $entity): RelationMap + { + $this->collector->collect('getRelationMap', $entity); + return $this->orm->getRelationMap($entity); + } + + public function getSource(string $entity): SourceInterface + { + $this->collector->collect('getSource', $entity); + return $this->orm->getSource($entity); + } +} From 94c0ae2947d318224672c5a6b51f6cec30e14198 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Fri, 2 Dec 2022 19:50:27 +0000 Subject: [PATCH 05/13] Apply fixes from StyleCI --- src/Collector/Database/CycleORMInterfaceProxy.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Collector/Database/CycleORMInterfaceProxy.php b/src/Collector/Database/CycleORMInterfaceProxy.php index 5c2b3a3d4..daad98b63 100644 --- a/src/Collector/Database/CycleORMInterfaceProxy.php +++ b/src/Collector/Database/CycleORMInterfaceProxy.php @@ -81,7 +81,6 @@ public function with( ?FactoryInterface $factory = null, ?HeapInterface $heap = null ): ORMInterface { - $this->collector->collect('with', $schema, $factory, $heap); return new self($this->orm->with($schema, $factory, $heap), $this->collector); } From 718f3bc28ad1612713d23d018fdbecd1659142eb Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Mon, 13 Feb 2023 13:44:15 +0300 Subject: [PATCH 06/13] Fix tests --- tests/Collector/AssetCollectorTest.php | 2 +- tests/Collector/ConsoleAppInfoCollectorTest.php | 2 +- tests/Collector/MiddlewareCollectorTest.php | 2 +- tests/Collector/RequestCollectorTest.php | 2 +- tests/Collector/RouterCollectorTest.php | 2 +- tests/Collector/UrlMatcherInterfaceProxyTest.php | 4 ++-- tests/Collector/WebAppInfoCollectorTest.php | 2 +- tests/Collector/WebViewCollectorTest.php | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/Collector/AssetCollectorTest.php b/tests/Collector/AssetCollectorTest.php index ae60c1209..4e50c2870 100644 --- a/tests/Collector/AssetCollectorTest.php +++ b/tests/Collector/AssetCollectorTest.php @@ -5,8 +5,8 @@ namespace Yiisoft\Yii\Debug\Tests\Collector; use Yiisoft\Assets\AssetBundle; -use Yiisoft\Yii\Debug\Collector\AssetCollector; use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\Web\AssetCollector; final class AssetCollectorTest extends AbstractCollectorTestCase { diff --git a/tests/Collector/ConsoleAppInfoCollectorTest.php b/tests/Collector/ConsoleAppInfoCollectorTest.php index 22fd5fbfc..3ffda4b5c 100644 --- a/tests/Collector/ConsoleAppInfoCollectorTest.php +++ b/tests/Collector/ConsoleAppInfoCollectorTest.php @@ -8,7 +8,7 @@ use Yiisoft\Yii\Console\Event\ApplicationStartup; use Yiisoft\Yii\Debug\Collector\CollectorInterface; use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; -use Yiisoft\Yii\Debug\Collector\WebAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebAppInfoCollector; use function sleep; use function usleep; diff --git a/tests/Collector/MiddlewareCollectorTest.php b/tests/Collector/MiddlewareCollectorTest.php index 75e8be864..941c9700f 100644 --- a/tests/Collector/MiddlewareCollectorTest.php +++ b/tests/Collector/MiddlewareCollectorTest.php @@ -13,7 +13,7 @@ use Yiisoft\Middleware\Dispatcher\Event\BeforeMiddleware; use Yiisoft\Middleware\Dispatcher\MiddlewareFactory; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\MiddlewareCollector; +use Yiisoft\Yii\Debug\Collector\Web\MiddlewareCollector; use Yiisoft\Yii\Debug\Tests\Support\DummyMiddleware; final class MiddlewareCollectorTest extends AbstractCollectorTestCase diff --git a/tests/Collector/RequestCollectorTest.php b/tests/Collector/RequestCollectorTest.php index f61cd7b2d..08be95617 100644 --- a/tests/Collector/RequestCollectorTest.php +++ b/tests/Collector/RequestCollectorTest.php @@ -9,7 +9,7 @@ use Psr\Http\Message\StreamInterface; use Psr\Http\Message\UriInterface; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\RequestCollector; +use Yiisoft\Yii\Debug\Collector\Web\RequestCollector; use Yiisoft\Yii\Http\Event\AfterRequest; use Yiisoft\Yii\Http\Event\BeforeRequest; diff --git a/tests/Collector/RouterCollectorTest.php b/tests/Collector/RouterCollectorTest.php index 2f0293548..b20d34a00 100644 --- a/tests/Collector/RouterCollectorTest.php +++ b/tests/Collector/RouterCollectorTest.php @@ -15,7 +15,7 @@ use Yiisoft\Router\RouteCollectorInterface; use Yiisoft\Router\UrlMatcherInterface; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\RouterCollector; +use Yiisoft\Yii\Debug\Collector\Web\RouterCollector; final class RouterCollectorTest extends AbstractCollectorTestCase { diff --git a/tests/Collector/UrlMatcherInterfaceProxyTest.php b/tests/Collector/UrlMatcherInterfaceProxyTest.php index 9eea6c467..76caebfd7 100644 --- a/tests/Collector/UrlMatcherInterfaceProxyTest.php +++ b/tests/Collector/UrlMatcherInterfaceProxyTest.php @@ -11,8 +11,8 @@ use Yiisoft\Router\Route; use Yiisoft\Router\RouteCollection; use Yiisoft\Router\RouteCollector; -use Yiisoft\Yii\Debug\Collector\RouterCollector; -use Yiisoft\Yii\Debug\Collector\UrlMatcherInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Web\RouterCollector; +use Yiisoft\Yii\Debug\Collector\Web\UrlMatcherInterfaceProxy; class UrlMatcherInterfaceProxyTest extends TestCase { diff --git a/tests/Collector/WebAppInfoCollectorTest.php b/tests/Collector/WebAppInfoCollectorTest.php index c489742ad..d6498d696 100644 --- a/tests/Collector/WebAppInfoCollectorTest.php +++ b/tests/Collector/WebAppInfoCollectorTest.php @@ -7,7 +7,7 @@ use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\WebAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebAppInfoCollector; use Yiisoft\Yii\Http\Event\AfterRequest; use Yiisoft\Yii\Http\Event\BeforeRequest; diff --git a/tests/Collector/WebViewCollectorTest.php b/tests/Collector/WebViewCollectorTest.php index c63394b04..2c02b11ba 100644 --- a/tests/Collector/WebViewCollectorTest.php +++ b/tests/Collector/WebViewCollectorTest.php @@ -8,7 +8,7 @@ use Yiisoft\View\Event\WebView\AfterRender; use Yiisoft\View\WebView; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\WebViewCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebViewCollector; final class WebViewCollectorTest extends AbstractCollectorTestCase { From 399972dca923afc3a407c2da54f0c5d53d571356 Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Mon, 13 Feb 2023 13:47:06 +0300 Subject: [PATCH 07/13] Move streams --- src/Collector/{ => Stream}/FilesystemStreamCollector.php | 6 +++++- src/Collector/{ => Stream}/FilesystemStreamProxy.php | 2 +- src/Collector/{ => Stream}/HttpStreamCollector.php | 6 +++++- src/Collector/{ => Stream}/HttpStreamProxy.php | 2 +- tests/Collector/FilesystemStreamCollectorTest.php | 2 +- tests/Collector/HttpStreamCollectorTest.php | 2 +- 6 files changed, 14 insertions(+), 6 deletions(-) rename src/Collector/{ => Stream}/FilesystemStreamCollector.php (90%) rename src/Collector/{ => Stream}/FilesystemStreamProxy.php (99%) rename src/Collector/{ => Stream}/HttpStreamCollector.php (90%) rename src/Collector/{ => Stream}/HttpStreamProxy.php (99%) diff --git a/src/Collector/FilesystemStreamCollector.php b/src/Collector/Stream/FilesystemStreamCollector.php similarity index 90% rename from src/Collector/FilesystemStreamCollector.php rename to src/Collector/Stream/FilesystemStreamCollector.php index 5ea4bc104..06effae23 100644 --- a/src/Collector/FilesystemStreamCollector.php +++ b/src/Collector/Stream/FilesystemStreamCollector.php @@ -2,7 +2,11 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Stream; + +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class FilesystemStreamCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/FilesystemStreamProxy.php b/src/Collector/Stream/FilesystemStreamProxy.php similarity index 99% rename from src/Collector/FilesystemStreamProxy.php rename to src/Collector/Stream/FilesystemStreamProxy.php index 73548168a..6fec4c335 100644 --- a/src/Collector/FilesystemStreamProxy.php +++ b/src/Collector/Stream/FilesystemStreamProxy.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Stream; use Yiisoft\Yii\Debug\Helper\StreamWrapper\StreamWrapper; use Yiisoft\Yii\Debug\Helper\StreamWrapper\StreamWrapperInterface; diff --git a/src/Collector/HttpStreamCollector.php b/src/Collector/Stream/HttpStreamCollector.php similarity index 90% rename from src/Collector/HttpStreamCollector.php rename to src/Collector/Stream/HttpStreamCollector.php index 0a9295d53..e72c399a4 100644 --- a/src/Collector/HttpStreamCollector.php +++ b/src/Collector/Stream/HttpStreamCollector.php @@ -2,7 +2,11 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Stream; + +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class HttpStreamCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/HttpStreamProxy.php b/src/Collector/Stream/HttpStreamProxy.php similarity index 99% rename from src/Collector/HttpStreamProxy.php rename to src/Collector/Stream/HttpStreamProxy.php index 54b9da5f0..3a82fd048 100644 --- a/src/Collector/HttpStreamProxy.php +++ b/src/Collector/Stream/HttpStreamProxy.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Stream; use Yiisoft\Yii\Debug\Helper\StreamWrapper\StreamWrapper; use Yiisoft\Yii\Debug\Helper\StreamWrapper\StreamWrapperInterface; diff --git a/tests/Collector/FilesystemStreamCollectorTest.php b/tests/Collector/FilesystemStreamCollectorTest.php index 637af5240..8abfd2a50 100644 --- a/tests/Collector/FilesystemStreamCollectorTest.php +++ b/tests/Collector/FilesystemStreamCollectorTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Yii\Debug\Tests\Collector; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\FilesystemStreamCollector; +use Yiisoft\Yii\Debug\Collector\Stream\FilesystemStreamCollector; final class FilesystemStreamCollectorTest extends AbstractCollectorTestCase { diff --git a/tests/Collector/HttpStreamCollectorTest.php b/tests/Collector/HttpStreamCollectorTest.php index 9771547b1..0e378ad0c 100644 --- a/tests/Collector/HttpStreamCollectorTest.php +++ b/tests/Collector/HttpStreamCollectorTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Yii\Debug\Tests\Collector; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\HttpStreamCollector; +use Yiisoft\Yii\Debug\Collector\Stream\HttpStreamCollector; final class HttpStreamCollectorTest extends AbstractCollectorTestCase { From 2ebae3df6e531d45fb12d5a3059d47f8c299f64a Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Mon, 13 Feb 2023 13:50:08 +0300 Subject: [PATCH 08/13] Group queue --- src/Collector/{ => Queue}/QueueCollector.php | 5 ++++- src/Collector/{ => Queue}/QueueDecorator.php | 2 +- src/Collector/{ => Queue}/QueueFactoryInterfaceProxy.php | 2 +- src/Collector/{ => Queue}/QueueWorkerInterfaceProxy.php | 2 +- tests/Collector/QueueCollectorTest.php | 2 +- tests/Collector/QueueDecoratorTest.php | 4 ++-- 6 files changed, 10 insertions(+), 7 deletions(-) rename src/Collector/{ => Queue}/QueueCollector.php (92%) rename src/Collector/{ => Queue}/QueueDecorator.php (97%) rename src/Collector/{ => Queue}/QueueFactoryInterfaceProxy.php (92%) rename src/Collector/{ => Queue}/QueueWorkerInterfaceProxy.php (93%) diff --git a/src/Collector/QueueCollector.php b/src/Collector/Queue/QueueCollector.php similarity index 92% rename from src/Collector/QueueCollector.php rename to src/Collector/Queue/QueueCollector.php index 26035c3ef..d8c7720d1 100644 --- a/src/Collector/QueueCollector.php +++ b/src/Collector/Queue/QueueCollector.php @@ -2,8 +2,11 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Queue; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; use Yiisoft\Yii\Queue\Enum\JobStatus; use Yiisoft\Yii\Queue\Message\MessageInterface; use Yiisoft\Yii\Queue\Middleware\Push\MiddlewarePushInterface; diff --git a/src/Collector/QueueDecorator.php b/src/Collector/Queue/QueueDecorator.php similarity index 97% rename from src/Collector/QueueDecorator.php rename to src/Collector/Queue/QueueDecorator.php index bf0c26921..7839d6fa3 100644 --- a/src/Collector/QueueDecorator.php +++ b/src/Collector/Queue/QueueDecorator.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Queue; use Yiisoft\Yii\Queue\Adapter\AdapterInterface; use Yiisoft\Yii\Queue\Enum\JobStatus; diff --git a/src/Collector/QueueFactoryInterfaceProxy.php b/src/Collector/Queue/QueueFactoryInterfaceProxy.php similarity index 92% rename from src/Collector/QueueFactoryInterfaceProxy.php rename to src/Collector/Queue/QueueFactoryInterfaceProxy.php index 902285d89..151fcb1c0 100644 --- a/src/Collector/QueueFactoryInterfaceProxy.php +++ b/src/Collector/Queue/QueueFactoryInterfaceProxy.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Queue; use Yiisoft\Yii\Queue\QueueFactoryInterface; use Yiisoft\Yii\Queue\QueueInterface; diff --git a/src/Collector/QueueWorkerInterfaceProxy.php b/src/Collector/Queue/QueueWorkerInterfaceProxy.php similarity index 93% rename from src/Collector/QueueWorkerInterfaceProxy.php rename to src/Collector/Queue/QueueWorkerInterfaceProxy.php index c96af9c1a..f249c4f33 100644 --- a/src/Collector/QueueWorkerInterfaceProxy.php +++ b/src/Collector/Queue/QueueWorkerInterfaceProxy.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Queue; use Yiisoft\Yii\Queue\Message\MessageInterface; use Yiisoft\Yii\Queue\QueueInterface; diff --git a/tests/Collector/QueueCollectorTest.php b/tests/Collector/QueueCollectorTest.php index 7d7cdee19..207200a84 100644 --- a/tests/Collector/QueueCollectorTest.php +++ b/tests/Collector/QueueCollectorTest.php @@ -7,7 +7,7 @@ use Yiisoft\Validator\Result; use Yiisoft\Validator\Rule\Number; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\QueueCollector; +use Yiisoft\Yii\Debug\Collector\Queue\QueueCollector; use Yiisoft\Yii\Debug\Tests\Support\DummyQueue; use Yiisoft\Yii\Queue\Enum\JobStatus; use Yiisoft\Yii\Queue\Message\Message; diff --git a/tests/Collector/QueueDecoratorTest.php b/tests/Collector/QueueDecoratorTest.php index 3f8b985bf..725233923 100644 --- a/tests/Collector/QueueDecoratorTest.php +++ b/tests/Collector/QueueDecoratorTest.php @@ -5,8 +5,8 @@ namespace Yiisoft\Yii\Debug\Tests\Collector; use PHPUnit\Framework\TestCase; -use Yiisoft\Yii\Debug\Collector\QueueCollector; -use Yiisoft\Yii\Debug\Collector\QueueDecorator; +use Yiisoft\Yii\Debug\Collector\Queue\QueueCollector; +use Yiisoft\Yii\Debug\Collector\Queue\QueueDecorator; use Yiisoft\Yii\Queue\Adapter\AdapterInterface; use Yiisoft\Yii\Queue\QueueInterface; From f741a1f8056b66d97d0e4df91c9a133bd7661d80 Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Mon, 13 Feb 2023 13:50:14 +0300 Subject: [PATCH 09/13] Fix config --- config/params.php | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/config/params.php b/config/params.php index 2e1068ecf..a63fb4434 100644 --- a/config/params.php +++ b/config/params.php @@ -13,36 +13,36 @@ use Yiisoft\Injector\Injector; use Yiisoft\Router\UrlMatcherInterface; use Yiisoft\Validator\ValidatorInterface; -use Yiisoft\Yii\Debug\Collector\Database\CycleCollector; -use Yiisoft\Yii\Debug\Collector\Database\CycleORMInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\Web\AssetCollector; use Yiisoft\Yii\Debug\Collector\CommandCollector; -use Yiisoft\Yii\Debug\Collector\Database\ConnectionInterfaceProxy; use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; -use Yiisoft\Yii\Debug\Collector\Database\DatabaseCollector; use Yiisoft\Yii\Debug\Collector\ContainerInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Database\ConnectionInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Database\CycleCollector; +use Yiisoft\Yii\Debug\Collector\Database\CycleORMInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Database\DatabaseCollector; use Yiisoft\Yii\Debug\Collector\EventCollector; use Yiisoft\Yii\Debug\Collector\EventDispatcherInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\FilesystemStreamCollector; use Yiisoft\Yii\Debug\Collector\HttpClientCollector; use Yiisoft\Yii\Debug\Collector\HttpClientInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\HttpStreamCollector; use Yiisoft\Yii\Debug\Collector\LogCollector; -use Yiisoft\Yii\Debug\Collector\Web\MiddlewareCollector; use Yiisoft\Yii\Debug\Collector\LoggerInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\QueueCollector; -use Yiisoft\Yii\Debug\Collector\QueueFactoryInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\QueueWorkerInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\Web\RequestCollector; -use Yiisoft\Yii\Debug\Collector\Web\RouterCollector; +use Yiisoft\Yii\Debug\Collector\Queue\QueueCollector; +use Yiisoft\Yii\Debug\Collector\Queue\QueueFactoryInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Queue\QueueWorkerInterfaceProxy; use Yiisoft\Yii\Debug\Collector\ServiceCollector; +use Yiisoft\Yii\Debug\Collector\Stream\FilesystemStreamCollector; +use Yiisoft\Yii\Debug\Collector\Stream\HttpStreamCollector; use Yiisoft\Yii\Debug\Collector\ValidatorCollector; -use Yiisoft\Yii\Debug\Collector\Web\WebAppInfoCollector; -use Yiisoft\Yii\Debug\Collector\Web\WebViewCollector; use Yiisoft\Yii\Debug\Collector\ValidatorInterfaceProxy; -use Yiisoft\Yii\Debug\Command\ResetCommand; +use Yiisoft\Yii\Debug\Collector\Web\AssetCollector; use Yiisoft\Yii\Debug\Collector\Web\AssetLoaderInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Web\MiddlewareCollector; +use Yiisoft\Yii\Debug\Collector\Web\RequestCollector; +use Yiisoft\Yii\Debug\Collector\Web\RouterCollector; use Yiisoft\Yii\Debug\Collector\Web\UrlMatcherInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Web\WebAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\Web\WebViewCollector; +use Yiisoft\Yii\Debug\Command\ResetCommand; use Yiisoft\Yii\Queue\QueueFactoryInterface; use Yiisoft\Yii\Queue\Worker\WorkerInterface; From 1b70e1d0eba04bfb20fa3f96d78d8a6f01efbf9d Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Mon, 13 Feb 2023 14:05:36 +0300 Subject: [PATCH 10/13] Fix missed dependencies --- composer-require-checker.json | 19 +++++++++++++++++++ composer.json | 2 ++ .../Database/ConnectionInterfaceProxy.php | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/composer-require-checker.json b/composer-require-checker.json index 96393e837..2a22b70c2 100644 --- a/composer-require-checker.json +++ b/composer-require-checker.json @@ -1,5 +1,24 @@ { "symbol-whitelist": [ + "Cycle\\ORM\\FactoryInterface", + "Cycle\\ORM\\Heap\\HeapInterface", + "Cycle\\ORM\\Heap\\Node", + "Cycle\\ORM\\MapperInterface", + "Cycle\\ORM\\ORMInterface", + "Cycle\\ORM\\RelationMap", + "Cycle\\ORM\\RepositoryInterface", + "Cycle\\ORM\\SchemaInterface", + "Cycle\\ORM\\Select\\SourceInterface", + "Cycle\\ORM\\Transaction\\CommandGeneratorInterface", + "Yiisoft\\Cache\\Dependency\\Dependency", + "Yiisoft\\Db\\Command\\CommandInterface", + "Yiisoft\\Db\\Connection\\ConnectionInterface", + "Yiisoft\\Db\\QueryBuilder\\QueryBuilderInterface", + "Yiisoft\\Db\\Query\\BatchQueryResultInterface", + "Yiisoft\\Db\\Query\\QueryInterface", + "Yiisoft\\Db\\Schema\\QuoterInterface", + "Yiisoft\\Db\\Schema\\SchemaInterface", + "Yiisoft\\Db\\Transaction\\TransactionInterface", "opcache_invalidate" ] } diff --git a/composer.json b/composer.json index fb2a4bce0..5e0cf608a 100644 --- a/composer.json +++ b/composer.json @@ -48,6 +48,7 @@ "yiisoft/yii-queue": "3.0.x-dev" }, "require-dev": { + "cycle/orm": "^2.2", "maglnet/composer-require-checker": "^4.2", "nyholm/psr7": "^1.3", "phpunit/phpunit": "^9.4", @@ -55,6 +56,7 @@ "roave/infection-static-analysis-plugin": "^1.16", "spatie/phpunit-watcher": "^1.23", "vimeo/psalm": "^4.18", + "yiisoft/db": "^3.0@dev", "yiisoft/event-dispatcher": "^1.0", "yiisoft/log": "^2.0", "yiisoft/router-fastroute": "^2.0" diff --git a/src/Collector/Database/ConnectionInterfaceProxy.php b/src/Collector/Database/ConnectionInterfaceProxy.php index 1b58d52da..b437eb9ab 100644 --- a/src/Collector/Database/ConnectionInterfaceProxy.php +++ b/src/Collector/Database/ConnectionInterfaceProxy.php @@ -8,6 +8,7 @@ use Yiisoft\Cache\Dependency\Dependency; use Yiisoft\Db\Command\CommandInterface; use Yiisoft\Db\Connection\ConnectionInterface; +use Yiisoft\Db\Profiler\ProfilerInterface; use Yiisoft\Db\Query\BatchQueryResultInterface; use Yiisoft\Db\Query\QueryInterface; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; @@ -157,4 +158,9 @@ public function transaction(Closure $closure, string $isolationLevel = null): mi { return $this->connection->transaction($closure, $isolationLevel); } + + public function setProfiler(?ProfilerInterface $profiler): void + { + $this->connection->setProfiler($profiler); + } } From 785aea9cd6c833aaf47c4f8273011f1182b4c1db Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Mon, 13 Feb 2023 14:27:38 +0300 Subject: [PATCH 11/13] Fix missed dependencies --- config/common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/common.php b/config/common.php index 2607db8b7..ea22bdcc2 100644 --- a/config/common.php +++ b/config/common.php @@ -9,8 +9,8 @@ use Yiisoft\VarDumper\ClosureExporter; use Yiisoft\VarDumper\UseStatementParser; use Yiisoft\Yii\Debug\Collector\ContainerProxyConfig; -use Yiisoft\Yii\Debug\Collector\FilesystemStreamCollector; use Yiisoft\Yii\Debug\Collector\ServiceCollector; +use Yiisoft\Yii\Debug\Collector\Stream\FilesystemStreamCollector; use Yiisoft\Yii\Debug\DebuggerIdGenerator; use Yiisoft\Yii\Debug\Storage\FileStorage; use Yiisoft\Yii\Debug\Storage\StorageInterface; From cbc99e2c5fa22e6d7addd4aafd697c1ab8fcd87b Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Fri, 24 Feb 2023 20:17:33 +0300 Subject: [PATCH 12/13] Fix total --- src/Collector/Database/CycleCollector.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Collector/Database/CycleCollector.php b/src/Collector/Database/CycleCollector.php index 310e50696..dae5a63bc 100644 --- a/src/Collector/Database/CycleCollector.php +++ b/src/Collector/Database/CycleCollector.php @@ -8,7 +8,7 @@ use Yiisoft\Yii\Debug\Collector\CollectorTrait; use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; -class CycleCollector implements CollectorInterface, IndexCollectorInterface +final class CycleCollector implements CollectorInterface, IndexCollectorInterface { use CollectorTrait; @@ -38,7 +38,7 @@ public function getIndexData(): array { return [ 'cycle' => [ - 'total' => $this->queries, + 'total' => count($this->queries), ], ]; } From ffbe55ce0a52e4616e5ea2d899c807a439a43fe6 Mon Sep 17 00:00:00 2001 From: Dmitrii Derepko Date: Wed, 8 Mar 2023 21:16:27 +0300 Subject: [PATCH 13/13] Group collectors --- config/events-console.php | 4 ++-- config/params.php | 8 ++++---- src/Collector/{ => Console}/CommandCollector.php | 5 ++++- src/Collector/{ => Console}/ConsoleAppInfoCollector.php | 5 ++++- .../{ => Web}/AuthenticationMethodInterfaceProxy.php | 3 ++- src/Collector/{ => Web}/IdentityCollector.php | 5 ++++- tests/Collector/CommandCollectorTest.php | 2 +- tests/Collector/ConsoleAppInfoCollectorTest.php | 2 +- tests/Collector/UserCollectorTest.php | 2 +- 9 files changed, 23 insertions(+), 13 deletions(-) rename src/Collector/{ => Console}/CommandCollector.php (94%) rename src/Collector/{ => Console}/ConsoleAppInfoCollector.php (93%) rename src/Collector/{ => Web}/AuthenticationMethodInterfaceProxy.php (90%) rename src/Collector/{ => Web}/IdentityCollector.php (83%) diff --git a/config/events-console.php b/config/events-console.php index 652fe5465..4fd01cf8a 100644 --- a/config/events-console.php +++ b/config/events-console.php @@ -7,8 +7,8 @@ use Symfony\Component\Console\Event\ConsoleTerminateEvent; use Yiisoft\Yii\Console\Event\ApplicationShutdown; use Yiisoft\Yii\Console\Event\ApplicationStartup; -use Yiisoft\Yii\Debug\Collector\CommandCollector; -use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\Console\CommandCollector; +use Yiisoft\Yii\Debug\Collector\Console\ConsoleAppInfoCollector; use Yiisoft\Yii\Debug\Debugger; if (!(bool)($params['yiisoft/yii-debug']['enabled'] ?? false)) { diff --git a/config/params.php b/config/params.php index f0df4e9dc..2ac3fe8ae 100644 --- a/config/params.php +++ b/config/params.php @@ -14,9 +14,8 @@ use Yiisoft\Injector\Injector; use Yiisoft\Router\UrlMatcherInterface; use Yiisoft\Validator\ValidatorInterface; -use Yiisoft\Yii\Debug\Collector\CommandCollector; -use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; -use Yiisoft\Yii\Debug\Collector\AuthenticationMethodInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Console\CommandCollector; +use Yiisoft\Yii\Debug\Collector\Console\ConsoleAppInfoCollector; use Yiisoft\Yii\Debug\Collector\ContainerInterfaceProxy; use Yiisoft\Yii\Debug\Collector\Database\ConnectionInterfaceProxy; use Yiisoft\Yii\Debug\Collector\Database\CycleCollector; @@ -26,7 +25,6 @@ use Yiisoft\Yii\Debug\Collector\EventDispatcherInterfaceProxy; use Yiisoft\Yii\Debug\Collector\HttpClientCollector; use Yiisoft\Yii\Debug\Collector\HttpClientInterfaceProxy; -use Yiisoft\Yii\Debug\Collector\IdentityCollector; use Yiisoft\Yii\Debug\Collector\LogCollector; use Yiisoft\Yii\Debug\Collector\LoggerInterfaceProxy; use Yiisoft\Yii\Debug\Collector\Queue\QueueCollector; @@ -39,6 +37,8 @@ use Yiisoft\Yii\Debug\Collector\ValidatorInterfaceProxy; use Yiisoft\Yii\Debug\Collector\Web\AssetCollector; use Yiisoft\Yii\Debug\Collector\Web\AssetLoaderInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Web\AuthenticationMethodInterfaceProxy; +use Yiisoft\Yii\Debug\Collector\Web\IdentityCollector; use Yiisoft\Yii\Debug\Collector\Web\MiddlewareCollector; use Yiisoft\Yii\Debug\Collector\Web\RequestCollector; use Yiisoft\Yii\Debug\Collector\Web\RouterCollector; diff --git a/src/Collector/CommandCollector.php b/src/Collector/Console/CommandCollector.php similarity index 94% rename from src/Collector/CommandCollector.php rename to src/Collector/Console/CommandCollector.php index 0a73e85a5..f925a0d3d 100644 --- a/src/Collector/CommandCollector.php +++ b/src/Collector/Console/CommandCollector.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Console; use RuntimeException; use Symfony\Component\Console\Command\Command; @@ -10,6 +10,9 @@ use Symfony\Component\Console\Event\ConsoleErrorEvent; use Symfony\Component\Console\Event\ConsoleEvent; use Symfony\Component\Console\Event\ConsoleTerminateEvent; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; use function is_object; diff --git a/src/Collector/ConsoleAppInfoCollector.php b/src/Collector/Console/ConsoleAppInfoCollector.php similarity index 93% rename from src/Collector/ConsoleAppInfoCollector.php rename to src/Collector/Console/ConsoleAppInfoCollector.php index f8ee3a211..1c5075dad 100644 --- a/src/Collector/ConsoleAppInfoCollector.php +++ b/src/Collector/Console/ConsoleAppInfoCollector.php @@ -2,13 +2,16 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Console; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\Console\Event\ConsoleErrorEvent; use Symfony\Component\Console\Event\ConsoleTerminateEvent; use Yiisoft\Yii\Console\Event\ApplicationShutdown; use Yiisoft\Yii\Console\Event\ApplicationStartup; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class ConsoleAppInfoCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/src/Collector/AuthenticationMethodInterfaceProxy.php b/src/Collector/Web/AuthenticationMethodInterfaceProxy.php similarity index 90% rename from src/Collector/AuthenticationMethodInterfaceProxy.php rename to src/Collector/Web/AuthenticationMethodInterfaceProxy.php index 36a504873..a35fe358a 100644 --- a/src/Collector/AuthenticationMethodInterfaceProxy.php +++ b/src/Collector/Web/AuthenticationMethodInterfaceProxy.php @@ -2,12 +2,13 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Yiisoft\Auth\AuthenticationMethodInterface; use Yiisoft\Auth\IdentityInterface; +use Yiisoft\Yii\Debug\Collector\IdentityCollector; final class AuthenticationMethodInterfaceProxy implements AuthenticationMethodInterface { diff --git a/src/Collector/IdentityCollector.php b/src/Collector/Web/IdentityCollector.php similarity index 83% rename from src/Collector/IdentityCollector.php rename to src/Collector/Web/IdentityCollector.php index 5a7d6b8a0..6288ad12f 100644 --- a/src/Collector/IdentityCollector.php +++ b/src/Collector/Web/IdentityCollector.php @@ -2,9 +2,12 @@ declare(strict_types=1); -namespace Yiisoft\Yii\Debug\Collector; +namespace Yiisoft\Yii\Debug\Collector\Web; use Yiisoft\Auth\IdentityInterface; +use Yiisoft\Yii\Debug\Collector\CollectorInterface; +use Yiisoft\Yii\Debug\Collector\CollectorTrait; +use Yiisoft\Yii\Debug\Collector\IndexCollectorInterface; final class IdentityCollector implements CollectorInterface, IndexCollectorInterface { diff --git a/tests/Collector/CommandCollectorTest.php b/tests/Collector/CommandCollectorTest.php index 08f69fc8a..1aee762e4 100644 --- a/tests/Collector/CommandCollectorTest.php +++ b/tests/Collector/CommandCollectorTest.php @@ -12,7 +12,7 @@ use Symfony\Component\Console\Input\StringInput; use Yiisoft\Yii\Console\Output\ConsoleBufferedOutput; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\CommandCollector; +use Yiisoft\Yii\Debug\Collector\Console\CommandCollector; final class CommandCollectorTest extends AbstractCollectorTestCase { diff --git a/tests/Collector/ConsoleAppInfoCollectorTest.php b/tests/Collector/ConsoleAppInfoCollectorTest.php index 3ffda4b5c..53a225bed 100644 --- a/tests/Collector/ConsoleAppInfoCollectorTest.php +++ b/tests/Collector/ConsoleAppInfoCollectorTest.php @@ -7,7 +7,7 @@ use Yiisoft\Yii\Console\Event\ApplicationShutdown; use Yiisoft\Yii\Console\Event\ApplicationStartup; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\ConsoleAppInfoCollector; +use Yiisoft\Yii\Debug\Collector\Console\ConsoleAppInfoCollector; use Yiisoft\Yii\Debug\Collector\Web\WebAppInfoCollector; use function sleep; diff --git a/tests/Collector/UserCollectorTest.php b/tests/Collector/UserCollectorTest.php index f678d9fb6..963d2c6ec 100644 --- a/tests/Collector/UserCollectorTest.php +++ b/tests/Collector/UserCollectorTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Yii\Debug\Tests\Collector; use Yiisoft\Yii\Debug\Collector\CollectorInterface; -use Yiisoft\Yii\Debug\Collector\IdentityCollector; +use Yiisoft\Yii\Debug\Collector\Web\IdentityCollector; use Yiisoft\Yii\Debug\Tests\Support\FakeIdentity; final class UserCollectorTest extends AbstractCollectorTestCase