Skip to content

Commit 39891a4

Browse files
committed
Make the request tracing enableable
1 parent 56f7d9f commit 39891a4

File tree

12 files changed

+92
-9
lines changed

12 files changed

+92
-9
lines changed

phpstan-baseline.neon

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ parameters:
1111
path: src/DependencyInjection/Configuration.php
1212

1313
-
14-
message: "#^Call to an undefined method Symfony\\\\Component\\\\Config\\\\Definition\\\\Builder\\\\NodeParentInterface\\:\\:end\\(\\)\\.$#"
14+
message: "#^Call to an undefined method Symfony\\\\Component\\\\Config\\\\Definition\\\\Builder\\\\NodeParentInterface\\:\\:arrayNode\\(\\)\\.$#"
1515
count: 1
1616
path: src/DependencyInjection/Configuration.php
1717

@@ -106,17 +106,17 @@ parameters:
106106
path: src/aliases.php
107107

108108
-
109-
message: "#^Class Symfony\\\\Component\\\\HttpKernel\\\\Event\\\\FilterResponseEvent not found\\.$#"
109+
message: "#^Class Symfony\\\\Component\\\\HttpKernel\\\\Event\\\\FilterControllerEvent not found\\.$#"
110110
count: 1
111111
path: src/aliases.php
112112

113113
-
114-
message: "#^Class Symfony\\\\Component\\\\HttpKernel\\\\Event\\\\PostResponseEvent not found\\.$#"
114+
message: "#^Class Symfony\\\\Component\\\\HttpKernel\\\\Event\\\\FilterResponseEvent not found\\.$#"
115115
count: 1
116116
path: src/aliases.php
117117

118118
-
119-
message: "#^Class Symfony\\\\Component\\\\HttpKernel\\\\Event\\\\FilterControllerEvent not found\\.$#"
119+
message: "#^Class Symfony\\\\Component\\\\HttpKernel\\\\Event\\\\PostResponseEvent not found\\.$#"
120120
count: 1
121121
path: src/aliases.php
122122

src/DependencyInjection/Configuration.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ private function addDistributedTracingSection(ArrayNodeDefinition $rootNode): vo
153153
->arrayNode('tracing')
154154
->addDefaultsIfNotSet()
155155
->children()
156+
->arrayNode('request')
157+
->canBeEnabled()
158+
->end()
156159
->arrayNode('dbal')
157160
->canBeEnabled()
158161
->fixXmlConfig('connection')

src/DependencyInjection/SentryExtension.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
use Sentry\Options;
1717
use Sentry\SentryBundle\EventListener\ErrorListener;
1818
use Sentry\SentryBundle\EventListener\MessengerListener;
19+
use Sentry\SentryBundle\EventListener\TracingRequestListener;
20+
use Sentry\SentryBundle\EventListener\TracingSubRequestListener;
1921
use Sentry\SentryBundle\SentryBundle;
2022
use Sentry\SentryBundle\Tracing\Doctrine\DBAL\ConnectionConfigurator;
2123
use Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware;
@@ -62,8 +64,9 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container
6264
$this->registerConfiguration($container, $mergedConfig);
6365
$this->registerErrorListenerConfiguration($container, $mergedConfig);
6466
$this->registerMessengerListenerConfiguration($container, $mergedConfig['messenger']);
65-
$this->registerTracingConfiguration($container, $mergedConfig['tracing']);
66-
$this->registerTracingTwigExtensionConfiguration($container, $mergedConfig['tracing']);
67+
$this->registerRequestTracingConfigurtion($container, $mergedConfig['tracing']);
68+
$this->registerDbalTracingConfiguration($container, $mergedConfig['tracing']);
69+
$this->registerTwigTracingConfiguration($container, $mergedConfig['tracing']);
6770
}
6871

6972
/**
@@ -159,7 +162,20 @@ private function registerMessengerListenerConfiguration(ContainerBuilder $contai
159162
/**
160163
* @param array<string, mixed> $config
161164
*/
162-
private function registerTracingConfiguration(ContainerBuilder $container, array $config): void
165+
private function registerRequestTracingConfigurtion(ContainerBuilder $container, array $config): void
166+
{
167+
$isConfigEnabled = $this->isConfigEnabled($container, $config['request']);
168+
169+
if (!$isConfigEnabled) {
170+
$container->removeDefinition(TracingRequestListener::class);
171+
$container->removeDefinition(TracingSubRequestListener::class);
172+
}
173+
}
174+
175+
/**
176+
* @param array<string, mixed> $config
177+
*/
178+
private function registerDbalTracingConfiguration(ContainerBuilder $container, array $config): void
163179
{
164180
$isConfigEnabled = $this->isConfigEnabled($container, $config['dbal']);
165181

@@ -178,7 +194,7 @@ private function registerTracingConfiguration(ContainerBuilder $container, array
178194
/**
179195
* @param array<string, mixed> $config
180196
*/
181-
private function registerTracingTwigExtensionConfiguration(ContainerBuilder $container, array $config): void
197+
private function registerTwigTracingConfiguration(ContainerBuilder $container, array $config): void
182198
{
183199
$isConfigEnabled = $this->isConfigEnabled($container, $config['twig']);
184200

src/Resources/config/schema/sentry-1.0.xsd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,16 @@
8383

8484
<xsd:complexType name="tracing">
8585
<xsd:choice maxOccurs="unbounded">
86+
<xsd:element name="request" type="tracing-request" minOccurs="0" maxOccurs="1" />
8687
<xsd:element name="dbal" type="tracing-dbal" minOccurs="0" maxOccurs="1" />
8788
<xsd:element name="twig" type="tracing-twig" minOccurs="0" maxOccurs="1" />
8889
</xsd:choice>
8990
</xsd:complexType>
9091

92+
<xsd:complexType name="tracing-request">
93+
<xsd:attribute name="enabled" type="xsd:boolean" />
94+
</xsd:complexType>
95+
9196
<xsd:complexType name="tracing-dbal">
9297
<xsd:sequence maxOccurs="unbounded">
9398
<xsd:element name="connection" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />

tests/DependencyInjection/ConfigurationTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public function testProcessConfigurationWithDefaultConfiguration(): void
3737
'capture_soft_fails' => true,
3838
],
3939
'tracing' => [
40+
'request' => [
41+
'enabled' => false,
42+
],
4043
'dbal' => [
4144
'enabled' => false,
4245
'connections' => class_exists(DoctrineBundle::class) ? ['%doctrine.default_connection%'] : [],

tests/DependencyInjection/Fixtures/php/full.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@
4343
'capture_soft_fails' => false,
4444
],
4545
'tracing' => [
46+
'request' => [
47+
'enabled' => false,
48+
],
4649
'dbal' => [
4750
'enabled' => false,
4851
'connections' => ['default'],
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Symfony\Component\DependencyInjection\ContainerBuilder;
6+
7+
/** @var ContainerBuilder $container */
8+
$container->loadFromExtension('sentry', [
9+
'tracing' => [
10+
'request' => [
11+
'enabled' => true,
12+
],
13+
],
14+
]);

tests/DependencyInjection/Fixtures/xml/full.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
</sentry:options>
3939
<sentry:messenger enabled="true" capture-soft-fails="false" />
4040
<sentry:tracing>
41+
<sentry:request enabled="false" />
4142
<sentry:dbal enabled="false">
4243
<sentry:connection>default</sentry:connection>
4344
</sentry:dbal>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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+
xmlns:sentry="https://sentry.io/schema/dic/sentry-symfony"
6+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
7+
https://sentry.io/schema/dic/sentry-symfony https://sentry.io/schema/dic/sentry-symfony/sentry-1.0.xsd">
8+
9+
<sentry:config>
10+
<sentry:tracing>
11+
<sentry:request enabled="true" />
12+
</sentry:tracing>
13+
</sentry:config>
14+
</container>

tests/DependencyInjection/Fixtures/yml/full.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ sentry:
3838
enabled: true
3939
capture_soft_fails: false
4040
tracing:
41+
request:
42+
enabled: false
4143
dbal:
4244
enabled: false
4345
connections:
44-
- enabled
46+
- default
4547
twig:
4648
enabled: false
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
sentry:
2+
tracing:
3+
request:
4+
enabled: true

tests/DependencyInjection/SentryExtensionTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
use Sentry\SentryBundle\EventListener\MessengerListener;
1717
use Sentry\SentryBundle\EventListener\RequestListener;
1818
use Sentry\SentryBundle\EventListener\SubRequestListener;
19+
use Sentry\SentryBundle\EventListener\TracingRequestListener;
20+
use Sentry\SentryBundle\EventListener\TracingSubRequestListener;
1921
use Sentry\SentryBundle\SentryBundle;
2022
use Sentry\SentryBundle\Tracing\Doctrine\DBAL\ConnectionConfigurator;
2123
use Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware;
@@ -265,6 +267,22 @@ public function testIgnoreErrorsIntegrationIsNotAddedTwiceIfAlreadyConfigured():
265267
$this->assertSame(1, $ignoreErrorsIntegrationsCount);
266268
}
267269

270+
public function testRequestTracingEventListenersAreConfiguredWhenRequestTracingIsEnabled(): void
271+
{
272+
$container = $this->createContainerFromFixture('request_tracing_enabled');
273+
274+
$this->assertTrue($container->hasDefinition(TracingRequestListener::class));
275+
$this->assertTrue($container->hasDefinition(TracingSubRequestListener::class));
276+
}
277+
278+
public function testRequestTracingEventListenersAreRemovedWhenRequestTracingIsDisabled(): void
279+
{
280+
$container = $this->createContainerFromFixture('full');
281+
282+
$this->assertFalse($container->hasDefinition(TracingRequestListener::class));
283+
$this->assertFalse($container->hasDefinition(TracingSubRequestListener::class));
284+
}
285+
268286
public function testTracingDriverMiddlewareIsConfiguredWhenDbalTracingIsEnable(): void
269287
{
270288
if (!class_exists(DoctrineBundle::class)) {

0 commit comments

Comments
 (0)