Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/sentry/src/Constants.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,10 @@ class Constants
public const CRON_CHECKIN_ID = 'sentry.crons.checkin_id';

public const DISABLE_COROUTINE_TRACING = 'sentry.tracing.disable_coroutine_tracing';

public const SENTRY_TRACE = 'sentry-trace';

public const BAGGAGE = 'baggage';

public const TRACEPARENT = 'traceparent';
}
6 changes: 3 additions & 3 deletions src/sentry/src/Tracing/Aspect/GrpcAspect.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace FriendsOfHyperf\Sentry\Tracing\Aspect;

use FriendsOfHyperf\Sentry\Constants;
use FriendsOfHyperf\Sentry\Feature;
use Hyperf\Di\Aop\AbstractAspect;
use Hyperf\Di\Aop\ProceedingJoinPoint;
Expand Down Expand Up @@ -53,9 +54,8 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint)

// Inject sentry-trace header for distributed tracing
$options['headers'] = ($options['headers'] ?? []) + [
'sentry-trace' => $parent->toTraceparent(),
'baggage' => $parent->toBaggage(),
'traceparent' => $parent->toW3CTraceparent(),
Constants::SENTRY_TRACE => $parent->toTraceparent(),
Constants::BAGGAGE => $parent->toBaggage(),
];

// Inject tracing headers
Expand Down
6 changes: 3 additions & 3 deletions src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace FriendsOfHyperf\Sentry\Tracing\Aspect;

use FriendsOfHyperf\Sentry\Constants;
use FriendsOfHyperf\Sentry\Feature;
use GuzzleHttp\Client;
use GuzzleHttp\TransferStats;
Expand Down Expand Up @@ -75,9 +76,8 @@ function (Scope $scope) use ($proceedingJoinPoint, $options, $guzzleConfig) {

// Inject trace context
$options['headers'] = array_replace($options['headers'] ?? [], [
'sentry-trace' => $span->toTraceparent(),
'baggage' => $span->toBaggage(),
'traceparent' => $span->toW3CTraceparent(),
Constants::BAGGAGE => $span->toBaggage(),
Constants::SENTRY_TRACE => $span->toTraceparent(),
]);

// Override the headers
Expand Down
7 changes: 4 additions & 3 deletions src/sentry/src/Tracing/Aspect/RpcAspect.php
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,14 @@ private function handleSend(ProceedingJoinPoint $proceedingJoinPoint)
function (Scope $scope) use ($proceedingJoinPoint) {
$span = $scope->getSpan();
if ($span && $this->container->has(Rpc\Context::class)) {
$rpcCtx = $this->container->get(Rpc\Context::class);
$carrier = Carrier::fromSpan($span);
// Inject the RPC context data into span.
$span->setData([
'rpc.context' => $this->container->get(Rpc\Context::class)->getData(),
'rpc.context' => $rpcCtx->getData(),
]);
// Inject the tracing carrier into RPC context.
$this->container->get(Rpc\Context::class)
->set(Constants::TRACE_CARRIER, Carrier::fromSpan($span)->toJson());
$rpcCtx->set(Constants::TRACE_CARRIER, $carrier->toJson());
}
return tap($proceedingJoinPoint->process(), function ($result) use ($span) {
if ($span && $this->feature->isTracingExtraTagEnabled('rpc.result')) {
Expand Down
27 changes: 13 additions & 14 deletions src/sentry/src/Util/Carrier.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@

class Carrier implements JsonSerializable, Arrayable, Stringable, Jsonable
{
public function __construct(
protected array $data = []
) {
public function __construct(protected array $data = [])
{
}

public function __toString(): string
Expand Down Expand Up @@ -56,21 +55,21 @@ public static function fromJson(string $json): static
public static function fromSpan(Span $span): static
{
return new static([
'sentry-trace' => $span->toTraceparent(),
'baggage' => $span->toBaggage(),
'traceparent' => $span->toW3CTraceparent(),
Constants::SENTRY_TRACE => $span->toTraceparent(),
Constants::BAGGAGE => $span->toBaggage(),
Constants::TRACEPARENT => $span->toW3CTraceparent(),
]);
}

public static function fromRequest(ServerRequestInterface $request): static
{
// Get sentry-trace and baggage
$sentryTrace = match (true) {
$request->hasHeader('sentry-trace') => $request->getHeaderLine('sentry-trace'),
$request->hasHeader('traceparent') => $request->getHeaderLine('traceparent'),
$request->hasHeader(Constants::SENTRY_TRACE) => $request->getHeaderLine(Constants::SENTRY_TRACE),
$request->hasHeader(Constants::TRACEPARENT) => $request->getHeaderLine(Constants::TRACEPARENT),
default => '',
};
$baggage = $request->getHeaderLine('baggage');
$baggage = $request->getHeaderLine(Constants::BAGGAGE);
$container = ApplicationContext::getContainer();

// Rpc Context
Expand All @@ -85,8 +84,8 @@ public static function fromRequest(ServerRequestInterface $request): static
}

return new static([
'sentry-trace' => $sentryTrace,
'baggage' => $baggage,
Constants::SENTRY_TRACE => $sentryTrace,
Constants::BAGGAGE => $baggage,
]);
}

Expand All @@ -99,17 +98,17 @@ public function with(array $data): static

public function getSentryTrace(): string
{
return $this->data['sentry-trace'] ?? '';
return $this->data[Constants::SENTRY_TRACE] ?? '';
}

public function getBaggage(): string
{
return $this->data['baggage'] ?? '';
return $this->data[Constants::BAGGAGE] ?? '';
}

public function getTraceparent(): string
{
return $this->data['traceparent'] ?? '';
return $this->data[Constants::TRACEPARENT] ?? '';
}

public function has(string $key): bool
Expand Down
13 changes: 7 additions & 6 deletions src/sentry/src/Util/CarrierPacker.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace FriendsOfHyperf\Sentry\Util;

use FriendsOfHyperf\Sentry\Constants;
use Sentry\Tracing\Span;
use Throwable;

Expand All @@ -28,9 +29,9 @@ public function unpack(string $data): array
$carrier = json_decode($data, true, flags: JSON_THROW_ON_ERROR);

return [
$carrier['sentry-trace'] ?? $carrier['traceparent'] ?? '',
$carrier['baggage'] ?? '',
$carrier['traceparent'] ?? '',
$carrier[Constants::SENTRY_TRACE] ?? $carrier[Constants::TRACEPARENT] ?? '',
$carrier[Constants::BAGGAGE] ?? '',
$carrier[Constants::TRACEPARENT] ?? '',
];
} catch (Throwable) {
return ['', '', ''];
Expand All @@ -40,9 +41,9 @@ public function unpack(string $data): array
public function pack(Span $span, array $extra = []): string
{
return json_encode([
'sentry-trace' => $span->toTraceparent(),
'baggage' => $span->toBaggage(),
'traceparent' => $span->toW3CTraceparent(),
Constants::SENTRY_TRACE => $span->toTraceparent(),
Constants::BAGGAGE => $span->toBaggage(),
Constants::TRACEPARENT => $span->toW3CTraceparent(),
...$extra,
]);
}
Expand Down