Skip to content

Commit 2efbd3d

Browse files
authored
fix(Instrumentation/Messenger): remove TraceableStamp usage from TraceableMiddleware and TraceableStack (#165)
* fix(Instrumentation/Messenger): remove TraceableStamp usage from TraceableMiddleware and TraceableStack * chore: format * test(Instrumentation): remove messenger doctrine transport test
1 parent a1694e1 commit 2efbd3d

3 files changed

Lines changed: 56 additions & 62 deletions

File tree

src/Instrumentation/Symfony/Messenger/TraceableMessengerMiddleware.php

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
namespace FriendsOfOpenTelemetry\OpenTelemetryBundle\Instrumentation\Symfony\Messenger;
44

5-
use OpenTelemetry\API\Trace\SpanKind;
6-
use OpenTelemetry\API\Trace\StatusCode;
75
use OpenTelemetry\API\Trace\TracerInterface;
8-
use OpenTelemetry\Context\Context;
96
use Psr\Log\LoggerInterface;
107
use Symfony\Component\Messenger\Envelope;
118
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
@@ -23,51 +20,18 @@ public function __construct(
2320

2421
public function handle(Envelope $envelope, StackInterface $stack): Envelope
2522
{
26-
$scope = Context::storage()->scope();
27-
if (null !== $scope) {
28-
$this->logger?->debug(sprintf('Using scope "%s"', spl_object_id($scope)));
29-
} else {
30-
$this->logger?->debug('No active scope');
31-
}
32-
33-
$traceableStamp = $this->getTraceableStamp($envelope);
34-
if (null !== $traceableStamp && $traceableStamp->getSpan()->isRecording()) {
35-
$span = $traceableStamp->getSpan();
36-
$span->setStatus(StatusCode::STATUS_OK);
37-
$this->logger?->debug(sprintf('Ending span "%s"', $span->getContext()->getSpanId()));
38-
$span->end();
39-
}
40-
41-
$spanBuilder = $this->tracer
42-
->spanBuilder('messenger.middleware')
43-
->setSpanKind(SpanKind::KIND_INTERNAL)
44-
->setParent($scope?->context())
45-
->setAttribute('event.category', $this->eventCategory)
46-
->setAttribute('bus.name', $this->busName)
47-
;
48-
49-
$span = $spanBuilder->startSpan();
50-
51-
$this->logger?->debug(sprintf('Starting span "%s"', $span->getContext()->getSpanId()));
52-
5323
$stack = new TraceableMessengerStack(
54-
$span,
24+
$this->tracer,
5525
$stack,
5626
$this->busName,
27+
$this->eventCategory,
5728
$this->logger,
5829
);
5930

60-
$envelope = $envelope->with(new TraceableStamp($span));
61-
6231
try {
6332
return $stack->next()->handle($envelope, $stack);
6433
} finally {
6534
$stack->stop();
6635
}
6736
}
68-
69-
private function getTraceableStamp(Envelope $envelope): ?TraceableStamp
70-
{
71-
return $envelope->last(TraceableStamp::class);
72-
}
7337
}

src/Instrumentation/Symfony/Messenger/TraceableMessengerStack.php

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
namespace FriendsOfOpenTelemetry\OpenTelemetryBundle\Instrumentation\Symfony\Messenger;
44

5-
use OpenTelemetry\API\Trace\SpanInterface;
5+
use OpenTelemetry\API\Trace\SpanKind;
66
use OpenTelemetry\API\Trace\StatusCode;
7+
use OpenTelemetry\API\Trace\TracerInterface;
8+
use OpenTelemetry\Context\Context;
9+
use OpenTelemetry\SDK\Trace\Span;
710
use Psr\Log\LoggerInterface;
811
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
912
use Symfony\Component\Messenger\Middleware\StackInterface;
@@ -13,32 +16,77 @@ class TraceableMessengerStack implements StackInterface
1316
private ?string $currentEvent = null;
1417

1518
public function __construct(
16-
private SpanInterface $span,
19+
private TracerInterface $tracer,
1720
private StackInterface $stack,
1821
private string $busName,
22+
private string $eventCategory,
1923
private ?LoggerInterface $logger = null,
2024
) {
2125
}
2226

2327
public function next(): MiddlewareInterface
2428
{
29+
$scope = Context::storage()->scope();
30+
if (null !== $scope) {
31+
$this->logger?->debug(sprintf('Using scope "%s"', spl_object_id($scope)));
32+
} else {
33+
$this->logger?->debug('No active scope');
34+
}
35+
36+
/* if (null !== $scope) {
37+
$span = Span::fromContext($scope->context());
38+
39+
if ($span->isRecording()) {
40+
$scope->detach();
41+
42+
$span->setStatus(StatusCode::STATUS_OK);
43+
$this->logger?->debug(sprintf('Ending span "%s"', $span->getContext()->getSpanId()));
44+
$span->end();
45+
}
46+
}*/
47+
48+
$spanBuilder = $this->tracer
49+
->spanBuilder('messenger.middleware')
50+
->setSpanKind(SpanKind::KIND_INTERNAL)
51+
->setParent($scope?->context())
52+
->setAttribute('event.category', $this->eventCategory)
53+
->setAttribute('bus.name', $this->busName)
54+
;
55+
56+
$parent = Context::getCurrent();
57+
58+
$span = $spanBuilder->setParent($parent)->startSpan();
59+
60+
$this->logger?->debug(sprintf('Starting span "%s"', $span->getContext()->getSpanId()));
61+
2562
if ($this->stack === $nextMiddleware = $this->stack->next()) {
2663
$this->currentEvent = 'Tail';
2764
} else {
2865
$this->currentEvent = sprintf('"%s"', get_debug_type($nextMiddleware));
2966
}
3067
$this->currentEvent .= sprintf(' on "%s"', $this->busName);
3168

32-
$this->span->setAttribute('event.current', $this->currentEvent);
69+
$span->setAttribute('event.current', $this->currentEvent);
70+
71+
$context = $span->storeInContext($parent);
72+
Context::storage()->attach($context);
3373

3474
return $nextMiddleware;
3575
}
3676

3777
public function stop(): void
3878
{
39-
$this->span->setStatus(StatusCode::STATUS_OK);
40-
$this->logger?->debug(sprintf('Ending span "%s"', $this->span->getContext()->getSpanId()));
41-
$this->span->end();
79+
$scope = Context::storage()->scope();
80+
if (null === $scope) {
81+
return;
82+
}
83+
84+
$scope->detach();
85+
86+
$span = Span::fromContext($scope->context());
87+
$span->setStatus(StatusCode::STATUS_OK);
88+
$this->logger?->debug(sprintf('Ending span "%s"', $span->getContext()->getSpanId()));
89+
$span->end();
4290
$this->currentEvent = null;
4391
}
4492

src/Instrumentation/Symfony/Messenger/TraceableStamp.php

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)