Skip to content

Commit 8cb2c4b

Browse files
jeremyFreeAgenttyx
authored andcommitted
[HttpClient] Added TraceableHttpClient and WebProfiler panel
Co-authored-by: Jérémy Romey <jeremy@free-agent.fr> Co-authored-by: Timothée Barray <tim@amicalement-web.net>
1 parent 2d0aa18 commit 8cb2c4b

File tree

6 files changed

+36
-8
lines changed

6 files changed

+36
-8
lines changed

DependencyInjection/Compiler/UnusedTagsPass.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class UnusedTagsPass implements CompilerPassInterface
3535
'form.type',
3636
'form.type_extension',
3737
'form.type_guesser',
38+
'http_client.client',
3839
'kernel.cache_clearer',
3940
'kernel.cache_warmer',
4041
'kernel.event_listener',

DependencyInjection/FrameworkExtension.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ class FrameworkExtension extends Extension
150150
private $validatorConfigEnabled = false;
151151
private $messengerConfigEnabled = false;
152152
private $mailerConfigEnabled = false;
153+
private $httpClientConfigEnabled = false;
153154

154155
/**
155156
* Responds to the app.config configuration parameter.
@@ -311,6 +312,10 @@ public function load(array $configs, ContainerBuilder $container)
311312
$container->removeDefinition('console.command.messenger_failed_messages_remove');
312313
}
313314

315+
if ($this->httpClientConfigEnabled = $this->isConfigEnabled($container, $config['http_client'])) {
316+
$this->registerHttpClientConfiguration($config['http_client'], $container, $loader, $config['profiler']);
317+
}
318+
314319
$propertyInfoEnabled = $this->isConfigEnabled($container, $config['property_info']);
315320
$this->registerValidationConfiguration($config['validation'], $container, $loader, $propertyInfoEnabled);
316321
$this->registerEsiConfiguration($config['esi'], $container, $loader);
@@ -341,10 +346,6 @@ public function load(array $configs, ContainerBuilder $container)
341346
$this->registerLockConfiguration($config['lock'], $container, $loader);
342347
}
343348

344-
if ($this->isConfigEnabled($container, $config['http_client'])) {
345-
$this->registerHttpClientConfiguration($config['http_client'], $container, $loader);
346-
}
347-
348349
if ($this->mailerConfigEnabled = $this->isConfigEnabled($container, $config['mailer'])) {
349350
$this->registerMailerConfiguration($config['mailer'], $container, $loader);
350351
}
@@ -562,6 +563,10 @@ private function registerProfilerConfiguration(array $config, ContainerBuilder $
562563
$loader->load('mailer_debug.xml');
563564
}
564565

566+
if ($this->httpClientConfigEnabled) {
567+
$loader->load('http_client_debug.xml');
568+
}
569+
565570
$container->setParameter('profiler_listener.only_exceptions', $config['only_exceptions']);
566571
$container->setParameter('profiler_listener.only_master_requests', $config['only_master_requests']);
567572

@@ -1915,7 +1920,7 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
19151920
}
19161921
}
19171922

1918-
private function registerHttpClientConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
1923+
private function registerHttpClientConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader, array $profilerConfig)
19191924
{
19201925
$loader->load('http_client.xml');
19211926

@@ -1930,6 +1935,8 @@ private function registerHttpClientConfiguration(array $config, ContainerBuilder
19301935
$container->removeDefinition(HttpClient::class);
19311936
}
19321937

1938+
$httpClientId = $this->isConfigEnabled($container, $profilerConfig) ? '.debug.http_client.inner' : 'http_client';
1939+
19331940
foreach ($config['scoped_clients'] as $name => $scopeConfig) {
19341941
if ('http_client' === $name) {
19351942
throw new InvalidArgumentException(sprintf('Invalid scope name: "%s" is reserved.', $name));
@@ -1941,10 +1948,14 @@ private function registerHttpClientConfiguration(array $config, ContainerBuilder
19411948
if (null === $scope) {
19421949
$container->register($name, ScopingHttpClient::class)
19431950
->setFactory([ScopingHttpClient::class, 'forBaseUri'])
1944-
->setArguments([new Reference('http_client'), $scopeConfig['base_uri'], $scopeConfig]);
1951+
->setArguments([new Reference($httpClientId), $scopeConfig['base_uri'], $scopeConfig])
1952+
->addTag('http_client.client')
1953+
;
19451954
} else {
19461955
$container->register($name, ScopingHttpClient::class)
1947-
->setArguments([new Reference('http_client'), [$scope => $scopeConfig], $scope]);
1956+
->setArguments([new Reference($httpClientId), [$scope => $scopeConfig], $scope])
1957+
->addTag('http_client.client')
1958+
;
19481959
}
19491960

19501961
$container->registerAliasForArgument($name, HttpClientInterface::class);

FrameworkBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
use Symfony\Component\ErrorRenderer\DependencyInjection\ErrorRendererPass;
3737
use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
3838
use Symfony\Component\Form\DependencyInjection\FormPass;
39+
use Symfony\Component\HttpClient\DependencyInjection\HttpClientPass;
3940
use Symfony\Component\HttpFoundation\Request;
4041
use Symfony\Component\HttpKernel\Bundle\Bundle;
4142
use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass;
@@ -129,6 +130,7 @@ public function build(ContainerBuilder $container)
129130
$container->addCompilerPass(new TestServiceContainerRealRefPass(), PassConfig::TYPE_AFTER_REMOVING);
130131
$this->addCompilerPassIfExists($container, AddMimeTypeGuesserPass::class);
131132
$this->addCompilerPassIfExists($container, MessengerPass::class);
133+
$this->addCompilerPassIfExists($container, HttpClientPass::class);
132134
$this->addCompilerPassIfExists($container, AddAutoMappingConfigurationPass::class);
133135
$container->addCompilerPass(new RegisterReverseContainerPass(true));
134136
$container->addCompilerPass(new RegisterReverseContainerPass(false), PassConfig::TYPE_AFTER_REMOVING);

Resources/config/http_client.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<services>
88
<service id="http_client" class="Symfony\Contracts\HttpClient\HttpClientInterface">
99
<tag name="monolog.logger" channel="http_client" />
10+
<tag name="http_client.client" />
1011
<factory class="Symfony\Component\HttpClient\HttpClient" method="create" />
1112
<argument type="collection" /> <!-- default options -->
1213
<argument /> <!-- max host connections -->
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
<service id="data_collector.http_client" class="Symfony\Component\HttpClient\DataCollector\HttpClientDataCollector">
9+
<tag name="data_collector" template="@WebProfiler/Collector/http_client.html.twig" id="http_client" priority="250" />
10+
</service>
11+
</services>
12+
</container>

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"symfony/polyfill-intl-icu": "~1.0",
4141
"symfony/form": "^4.3.4|^5.0",
4242
"symfony/expression-language": "^3.4|^4.0|^5.0",
43-
"symfony/http-client": "^4.3|^5.0",
43+
"symfony/http-client": "^4.4|^5.0",
4444
"symfony/lock": "^4.4|^5.0",
4545
"symfony/mailer": "^4.4|^5.0",
4646
"symfony/messenger": "^4.3|^5.0",
@@ -71,6 +71,7 @@
7171
"symfony/console": "<4.3",
7272
"symfony/dotenv": "<4.2",
7373
"symfony/dom-crawler": "<4.3",
74+
"symfony/http-client": "<4.4",
7475
"symfony/form": "<4.3",
7576
"symfony/lock": "<4.4",
7677
"symfony/mailer": "<4.4",

0 commit comments

Comments
 (0)