From 76aaa9a11ddaac9d38bf0663bfa0955b3f2cd5be Mon Sep 17 00:00:00 2001 From: Martynas Sudintas Date: Fri, 10 Apr 2026 09:34:50 +0300 Subject: [PATCH] fix: make profiler configurable and disable it by default in non-debug mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The profiler.yaml was loaded unconditionally, causing GraphQLCollector's event listener to run on every GraphQL request in production — parsing queries and deep-cloning results for data that was never consumed. Add an `enabled` option to the `profiler` configuration section, defaulting to `kernel.debug`. This allows explicit control while ensuring profiler services are only registered in dev/test by default. --- src/DependencyInjection/Configuration.php | 1 + .../OverblogGraphQLExtension.php | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index a8c4c707e..2cbef7b94 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -311,6 +311,7 @@ private function profilerSection(): ArrayNodeDefinition // @phpstan-ignore-next-line $node + ->{$this->debug ? 'canBeDisabled' : 'canBeEnabled'}() ->addDefaultsIfNotSet() ->children() ->scalarNode('query_match')->defaultNull()->end() diff --git a/src/DependencyInjection/OverblogGraphQLExtension.php b/src/DependencyInjection/OverblogGraphQLExtension.php index 82dfe196a..7191c3466 100644 --- a/src/DependencyInjection/OverblogGraphQLExtension.php +++ b/src/DependencyInjection/OverblogGraphQLExtension.php @@ -38,10 +38,10 @@ final class OverblogGraphQLExtension extends Extension { public function load(array $configs, ContainerBuilder $container): void { - $this->loadConfigFiles($container); $configuration = $this->getConfiguration($configs, $container); $config = $this->processConfiguration($configuration, $configs); + $this->loadConfigFiles($config, $container); $this->setBatchingMethod($config, $container); $this->setServicesAliases($config, $container); $this->setSchemaBuilderArguments($config, $container); @@ -75,7 +75,7 @@ public function getConfiguration(array $config, ContainerBuilder $container): Co ); } - private function loadConfigFiles(ContainerBuilder $container): void + private function loadConfigFiles(array $config, ContainerBuilder $container): void { $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yaml'); @@ -86,7 +86,10 @@ private function loadConfigFiles(ContainerBuilder $container): void $loader->load('expression_language_functions.yaml'); $loader->load('definition_config_processors.yaml'); $loader->load('aliases.yaml'); - $loader->load('profiler.yaml'); + + if ($config['profiler']['enabled']) { + $loader->load('profiler.yaml'); + } } private function registerForAutoconfiguration(ContainerBuilder $container): void @@ -143,6 +146,10 @@ private function setDefinitionParameters(array $config, ContainerBuilder $contai private function setProfilerParameters(array $config, ContainerBuilder $container): void { + if (!$config['profiler']['enabled']) { + return; + } + $container->setParameter($this->getAlias().'.profiler.query_match', $config['profiler']['query_match']); }