Skip to content

Commit 84a7fac

Browse files
committed
Tracing without Performance
1 parent 6a89399 commit 84a7fac

File tree

5 files changed

+84
-89
lines changed

5 files changed

+84
-89
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"guzzlehttp/psr7": "^1.7 || ^2.0",
2929
"jean85/pretty-package-versions": "^1.5 || ^2.0",
3030
"sentry/sdk": "^3.4",
31-
"sentry/sentry": "^3.19",
31+
"sentry/sentry": "^3.20",
3232
"symfony/cache-contracts": "^1.1||^2.4||^3.0",
3333
"symfony/config": "^4.4.20||^5.0.11||^6.0",
3434
"symfony/console": "^4.4.20||^5.0.11||^6.0",

src/EventListener/TracingRequestListener.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
namespace Sentry\SentryBundle\EventListener;
66

7-
use Sentry\Tracing\Transaction;
8-
use Sentry\Tracing\TransactionContext;
97
use Sentry\Tracing\TransactionSource;
108
use Symfony\Component\HttpFoundation\Request;
119
use Symfony\Component\HttpKernel\Event\RequestEvent;
1210
use Symfony\Component\HttpKernel\Event\TerminateEvent;
1311

12+
use function Sentry\continueTrace;
13+
1414
/**
1515
* This event listener acts on the master requests and starts a transaction
1616
* to report performance data to Sentry. It gathers useful data like the
@@ -37,7 +37,7 @@ public function handleKernelRequestEvent(RequestEvent $event): void
3737
/** @var float $requestStartTime */
3838
$requestStartTime = $request->server->get('REQUEST_TIME_FLOAT', microtime(true));
3939

40-
$context = TransactionContext::fromHeaders(
40+
$context = continueTrace(
4141
$request->headers->get('sentry-trace', ''),
4242
$request->headers->get('baggage', '')
4343
);

src/Resources/config/services.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,6 @@
132132
</service>
133133

134134
<service id="Sentry\SentryBundle\Twig\SentryExtension" class="Sentry\SentryBundle\Twig\SentryExtension">
135-
<argument type="service" id="Sentry\State\HubInterface" />
136-
137135
<tag name="twig.extension" />
138136
</service>
139137
</services>

src/Twig/SentryExtension.php

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,14 @@
44

55
namespace Sentry\SentryBundle\Twig;
66

7-
use Sentry\State\HubInterface;
87
use Twig\Extension\AbstractExtension;
98
use Twig\TwigFunction;
109

10+
use function Sentry\getBaggage;
11+
use function Sentry\getTraceparent;
12+
1113
final class SentryExtension extends AbstractExtension
1214
{
13-
/**
14-
* @var HubInterface The current hub
15-
*/
16-
private $hub;
17-
18-
/**
19-
* @param HubInterface $hub The current hub
20-
*/
21-
public function __construct(HubInterface $hub)
22-
{
23-
$this->hub = $hub;
24-
}
25-
2615
/**
2716
* {@inheritdoc}
2817
*/
@@ -39,18 +28,14 @@ public function getFunctions(): array
3928
*/
4029
public function getTraceMeta(): string
4130
{
42-
$span = $this->hub->getSpan();
43-
44-
return sprintf('<meta name="sentry-trace" content="%s" />', null !== $span ? $span->toTraceparent() : '');
31+
return sprintf('<meta name="sentry-trace" content="%s" />', getTraceparent());
4532
}
4633

4734
/**
4835
* Returns an HTML meta tag named `baggage`.
4936
*/
5037
public function getBaggageMeta(): string
5138
{
52-
$span = $this->hub->getSpan();
53-
54-
return sprintf('<meta name="baggage" content="%s" />', null !== $span ? $span->toBaggage() : '');
39+
return sprintf('<meta name="baggage" content="%s" />', getBaggage());
5540
}
5641
}

tests/Twig/SentryExtensionTest.php

Lines changed: 75 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44

55
namespace Sentry\SentryBundle\Tests\Twig;
66

7-
use PHPUnit\Framework\MockObject\MockObject;
87
use PHPUnit\Framework\TestCase;
8+
use Sentry\ClientInterface;
9+
use Sentry\Options;
910
use Sentry\SentryBundle\Twig\SentryExtension;
10-
use Sentry\State\HubInterface;
11-
use Sentry\Tracing\DynamicSamplingContext;
12-
use Sentry\Tracing\Span;
11+
use Sentry\SentrySdk;
12+
use Sentry\State\Hub;
13+
use Sentry\State\Scope;
14+
use Sentry\Tracing\PropagationContext;
1315
use Sentry\Tracing\SpanId;
1416
use Sentry\Tracing\TraceId;
1517
use Sentry\Tracing\Transaction;
@@ -20,92 +22,102 @@
2022

2123
final class SentryExtensionTest extends TestCase
2224
{
23-
/**
24-
* @var MockObject&HubInterface
25-
*/
26-
private $hub;
27-
2825
public static function setUpBeforeClass(): void
2926
{
3027
if (!self::isTwigBundlePackageInstalled()) {
3128
self::markTestSkipped('This test requires the "symfony/twig-bundle" Composer package to be installed.');
3229
}
3330
}
3431

35-
protected function setUp(): void
32+
public function testTraceMetaFunctionWithNoActiveSpan(): void
3633
{
37-
$this->hub = $this->createMock(HubInterface::class);
38-
}
34+
$environment = new Environment(new ArrayLoader(['foo.twig' => '{{ sentry_trace_meta() }}']));
35+
$environment->addExtension(new SentryExtension());
3936

40-
/**
41-
* @dataProvider traceMetaFunctionDataProvider
42-
*/
43-
public function testTraceMetaFunction(?Span $span, string $expectedTemplate): void
44-
{
45-
$this->hub->expects($this->once())
46-
->method('getSpan')
47-
->willReturn($span);
37+
$propagationContext = PropagationContext::fromDefaults();
38+
$propagationContext->setTraceId(new TraceId('566e3688a61d4bc888951642d6f14a19'));
39+
$propagationContext->setSpanId(new SpanId('566e3688a61d4bc8'));
4840

49-
$environment = new Environment(new ArrayLoader(['foo.twig' => '{{ sentry_trace_meta() }}']));
50-
$environment->addExtension(new SentryExtension($this->hub));
41+
$hub = new Hub(null, new Scope($propagationContext));
42+
43+
SentrySdk::setCurrentHub($hub);
5144

52-
$this->assertSame($expectedTemplate, $environment->render('foo.twig'));
45+
$this->assertSame('<meta name="sentry-trace" content="566e3688a61d4bc888951642d6f14a19-566e3688a61d4bc8" />', $environment->render('foo.twig'));
5346
}
5447

55-
/**
56-
* @return \Generator<mixed>
57-
*/
58-
public function traceMetaFunctionDataProvider(): \Generator
48+
public function testTraceMetaFunctionWithActiveSpan(): void
5949
{
60-
yield [
61-
null,
62-
'<meta name="sentry-trace" content="" />',
63-
];
50+
$environment = new Environment(new ArrayLoader(['foo.twig' => '{{ sentry_trace_meta() }}']));
51+
$environment->addExtension(new SentryExtension());
6452

6553
$transaction = new Transaction(new TransactionContext());
6654
$transaction->setTraceId(new TraceId('a3c01c41d7b94b90aee23edac90f4319'));
6755
$transaction->setSpanId(new SpanId('e69c2aef0ec34f2a'));
6856

69-
yield [
70-
$transaction,
71-
'<meta name="sentry-trace" content="a3c01c41d7b94b90aee23edac90f4319-e69c2aef0ec34f2a" />',
72-
];
57+
$client = $this->createMock(ClientInterface::class);
58+
$client->expects($this->atLeastOnce())
59+
->method('getOptions')
60+
->willReturn(new Options([
61+
'traces_sample_rate' => 1.0,
62+
'release' => '1.0.0',
63+
'environment' => 'development',
64+
]));
65+
66+
$hub = new Hub($client);
67+
$hub->setSpan($transaction);
68+
69+
SentrySdk::setCurrentHub($hub);
70+
71+
$this->assertSame('<meta name="sentry-trace" content="a3c01c41d7b94b90aee23edac90f4319-e69c2aef0ec34f2a" />', $environment->render('foo.twig'));
7372
}
7473

75-
/**
76-
* @dataProvider baggageMetaFunctionDataProvider
77-
*/
78-
public function testBaggageMetaFunction(?Span $span, string $expectedTemplate): void
74+
public function testBaggageMetaFunctionWithNoActiveSpan(): void
7975
{
80-
$this->hub->expects($this->once())
81-
->method('getSpan')
82-
->willReturn($span);
83-
8476
$environment = new Environment(new ArrayLoader(['foo.twig' => '{{ sentry_baggage_meta() }}']));
85-
$environment->addExtension(new SentryExtension($this->hub));
77+
$environment->addExtension(new SentryExtension());
78+
79+
$propagationContext = PropagationContext::fromDefaults();
80+
$propagationContext->setTraceId(new TraceId('566e3688a61d4bc888951642d6f14a19'));
8681

87-
$this->assertSame($expectedTemplate, $environment->render('foo.twig'));
82+
$client = $this->createMock(ClientInterface::class);
83+
$client->expects($this->atLeastOnce())
84+
->method('getOptions')
85+
->willReturn(new Options([
86+
'traces_sample_rate' => 1.0,
87+
'release' => '1.0.0',
88+
'environment' => 'development',
89+
]));
90+
91+
$hub = new Hub($client, new Scope($propagationContext));
92+
93+
SentrySdk::setCurrentHub($hub);
94+
95+
$this->assertSame('<meta name="baggage" content="sentry-trace_id=566e3688a61d4bc888951642d6f14a19,sentry-sample_rate=1,sentry-release=1.0.0,sentry-environment=development" />', $environment->render('foo.twig'));
8896
}
8997

90-
/**
91-
* @return \Generator<mixed>
92-
*/
93-
public function baggageMetaFunctionDataProvider(): \Generator
98+
public function testBaggageMetaFunctionWithActiveSpan(): void
9499
{
95-
yield [
96-
null,
97-
'<meta name="baggage" content="" />',
98-
];
99-
100-
$samplingContext = DynamicSamplingContext::fromHeader('sentry-trace_id=566e3688a61d4bc888951642d6f14a19,sentry-public_key=public,sentry-sample_rate=1');
101-
$transactionContext = new TransactionContext();
102-
$transactionContext->getMetadata()->setDynamicSamplingContext($samplingContext);
103-
$transaction = new Transaction($transactionContext);
104-
105-
yield [
106-
$transaction,
107-
'<meta name="baggage" content="sentry-trace_id=566e3688a61d4bc888951642d6f14a19,sentry-public_key=public,sentry-sample_rate=1" />',
108-
];
100+
$environment = new Environment(new ArrayLoader(['foo.twig' => '{{ sentry_baggage_meta() }}']));
101+
$environment->addExtension(new SentryExtension());
102+
103+
$transaction = new Transaction(new TransactionContext());
104+
$transaction->setTraceId(new TraceId('a3c01c41d7b94b90aee23edac90f4319'));
105+
106+
$client = $this->createMock(ClientInterface::class);
107+
$client->expects($this->atLeastOnce())
108+
->method('getOptions')
109+
->willReturn(new Options([
110+
'traces_sample_rate' => 1.0,
111+
'release' => '1.0.0',
112+
'environment' => 'development',
113+
]));
114+
115+
$hub = new Hub($client);
116+
$hub->setSpan($transaction);
117+
118+
SentrySdk::setCurrentHub($hub);
119+
120+
$this->assertSame('<meta name="baggage" content="sentry-trace_id=a3c01c41d7b94b90aee23edac90f4319,sentry-sample_rate=1,sentry-release=1.0.0,sentry-environment=development" />', $environment->render('foo.twig'));
109121
}
110122

111123
private static function isTwigBundlePackageInstalled(): bool

0 commit comments

Comments
 (0)