Skip to content

Commit ee17d93

Browse files
jerrytfleungbrettmcNevay
authored
feat: Add experimental response propagator interface (#1712)
* Added experimental response propagator * Added response propagator interface to Globals * changed to experimental_response_propagator * Update src/API/Globals.php Co-authored-by: Brett McBride <[email protected]> * Update src/Context/Propagation/ResponsePropagatorInterface.php Co-authored-by: Brett McBride <[email protected]> * Update src/Config/SDK/ComponentProvider/OpenTelemetrySdk.php Co-authored-by: Tobias Bachert <[email protected]> * Changed experimental_response_propagator to response_propagator/development * Cleaned up the comment * Bumped context and api version * Bumped open-telemetry/sdk in open-telemetry/sdk-configuration --------- Co-authored-by: Brett McBride <[email protected]> Co-authored-by: Tobias Bachert <[email protected]>
1 parent 7692075 commit ee17d93

File tree

7 files changed

+62
-3
lines changed

7 files changed

+62
-3
lines changed

Globals.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use OpenTelemetry\API\Metrics\MeterProviderInterface;
1515
use OpenTelemetry\API\Trace\TracerProviderInterface;
1616
use OpenTelemetry\Context\Context;
17+
use OpenTelemetry\Context\Propagation\ResponsePropagatorInterface;
1718
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
1819
use function sprintf;
1920
use Throwable;
@@ -35,6 +36,7 @@ public function __construct(
3536
private readonly LoggerProviderInterface $loggerProvider,
3637
private readonly EventLoggerProviderInterface $eventLoggerProvider,
3738
private readonly TextMapPropagatorInterface $propagator,
39+
private readonly ResponsePropagatorInterface $responsePropagator,
3840
) {
3941
}
4042

@@ -53,6 +55,14 @@ public static function propagator(): TextMapPropagatorInterface
5355
return Context::getCurrent()->get(ContextKeys::propagator()) ?? self::globals()->propagator;
5456
}
5557

58+
/**
59+
* @experimental
60+
*/
61+
public static function responsePropagator(): ResponsePropagatorInterface
62+
{
63+
return Context::getCurrent()->get(ContextKeys::responsePropagator()) ?? self::globals()->responsePropagator;
64+
}
65+
5666
public static function loggerProvider(): LoggerProviderInterface
5767
{
5868
return Context::getCurrent()->get(ContextKeys::loggerProvider()) ?? self::globals()->loggerProvider;
@@ -107,12 +117,13 @@ private static function globals(): self
107117
$tracerProvider = $context->get(ContextKeys::tracerProvider());
108118
$meterProvider = $context->get(ContextKeys::meterProvider());
109119
$propagator = $context->get(ContextKeys::propagator());
120+
$responsePropagator = $context->get(ContextKeys::responsePropagator());
110121
$loggerProvider = $context->get(ContextKeys::loggerProvider());
111122
$eventLoggerProvider = $context->get(ContextKeys::eventLoggerProvider());
112123

113-
assert(isset($tracerProvider, $meterProvider, $loggerProvider, $eventLoggerProvider, $propagator));
124+
assert(isset($tracerProvider, $meterProvider, $loggerProvider, $eventLoggerProvider, $propagator, $responsePropagator));
114125

115-
return self::$globals = new self($tracerProvider, $meterProvider, $loggerProvider, $eventLoggerProvider, $propagator);
126+
return self::$globals = new self($tracerProvider, $meterProvider, $loggerProvider, $eventLoggerProvider, $propagator, $responsePropagator);
116127
}
117128

118129
/**

Instrumentation/AutoInstrumentation/Context.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
use OpenTelemetry\API\Metrics\Noop\NoopMeterProvider;
1111
use OpenTelemetry\API\Trace\NoopTracerProvider;
1212
use OpenTelemetry\API\Trace\TracerProviderInterface;
13+
use OpenTelemetry\Context\Propagation\NoopResponsePropagator;
1314
use OpenTelemetry\Context\Propagation\NoopTextMapPropagator;
15+
use OpenTelemetry\Context\Propagation\ResponsePropagatorInterface;
1416
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
1517

1618
/**
@@ -23,6 +25,7 @@ public function __construct(
2325
public readonly MeterProviderInterface $meterProvider = new NoopMeterProvider(),
2426
public readonly LoggerProviderInterface $loggerProvider = new NoopLoggerProvider(),
2527
public readonly TextMapPropagatorInterface $propagator = new NoopTextMapPropagator(),
28+
public readonly ResponsePropagatorInterface $responsePropagator = new NoopResponsePropagator(),
2629
) {
2730
}
2831
}

Instrumentation/Configurator.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
use OpenTelemetry\Context\Context;
1616
use OpenTelemetry\Context\ContextInterface;
1717
use OpenTelemetry\Context\ImplicitContextKeyedInterface;
18+
use OpenTelemetry\Context\Propagation\NoopResponsePropagator;
1819
use OpenTelemetry\Context\Propagation\NoopTextMapPropagator;
20+
use OpenTelemetry\Context\Propagation\ResponsePropagatorInterface;
1921
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
2022
use OpenTelemetry\Context\ScopeInterface;
2123

@@ -31,6 +33,7 @@ final class Configurator implements ImplicitContextKeyedInterface
3133
private ?TextMapPropagatorInterface $propagator = null;
3234
private ?LoggerProviderInterface $loggerProvider = null;
3335
private ?EventLoggerProviderInterface $eventLoggerProvider = null;
36+
private ?ResponsePropagatorInterface $responsePropagator = null;
3437

3538
private function __construct()
3639
{
@@ -56,6 +59,7 @@ public static function createNoop(): Configurator
5659
->withPropagator(new NoopTextMapPropagator())
5760
->withLoggerProvider(NoopLoggerProvider::getInstance())
5861
->withEventLoggerProvider(new NoopEventLoggerProvider())
62+
->withResponsePropagator(new NoopResponsePropagator())
5963
;
6064
}
6165

@@ -88,6 +92,9 @@ public function storeInContext(?ContextInterface $context = null): ContextInterf
8892
if ($this->eventLoggerProvider !== null) {
8993
$context = $context->with(ContextKeys::eventLoggerProvider(), $this->eventLoggerProvider);
9094
}
95+
if ($this->responsePropagator !== null) {
96+
$context = $context->with(ContextKeys::responsePropagator(), $this->responsePropagator);
97+
}
9198

9299
return $context;
93100
}
@@ -134,4 +141,12 @@ public function withEventLoggerProvider(?EventLoggerProviderInterface $eventLogg
134141

135142
return $self;
136143
}
144+
145+
public function withResponsePropagator(?ResponsePropagatorInterface $responsePropagator): Configurator
146+
{
147+
$self = clone $this;
148+
$self->responsePropagator = $responsePropagator;
149+
150+
return $self;
151+
}
137152
}

Instrumentation/ContextKeys.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use OpenTelemetry\API\Trace\TracerProviderInterface;
1111
use OpenTelemetry\Context\Context;
1212
use OpenTelemetry\Context\ContextKeyInterface;
13+
use OpenTelemetry\Context\Propagation\ResponsePropagatorInterface;
1314
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
1415

1516
/**
@@ -47,6 +48,16 @@ public static function propagator(): ContextKeyInterface
4748
return $instance ??= Context::createKey(TextMapPropagatorInterface::class);
4849
}
4950

51+
/**
52+
* @return ContextKeyInterface<ResponsePropagatorInterface>
53+
*/
54+
public static function responsePropagator(): ContextKeyInterface
55+
{
56+
static $instance;
57+
58+
return $instance ??= Context::createKey(ResponsePropagatorInterface::class);
59+
}
60+
5061
/**
5162
* @return ContextKeyInterface<LoggerProviderInterface>
5263
*/

Instrumentation/InstrumentationInterface.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use OpenTelemetry\API\Metrics\MeterProviderInterface;
99
use OpenTelemetry\API\Trace\TracerInterface;
1010
use OpenTelemetry\API\Trace\TracerProviderInterface;
11+
use OpenTelemetry\Context\Propagation\ResponsePropagatorInterface;
1112
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
1213
use Psr\Log\LoggerInterface;
1314

@@ -40,4 +41,8 @@ public function getMeter(): MeterInterface;
4041
public function setLogger(LoggerInterface $logger): void;
4142

4243
public function getLogger(): LoggerInterface;
44+
45+
public function setResponsePropagator(ResponsePropagatorInterface $responsePropagator): void;
46+
47+
public function getResponsePropagator(): ResponsePropagatorInterface;
4348
}

Instrumentation/InstrumentationTrait.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
use OpenTelemetry\API\Trace\NoopTracerProvider;
1212
use OpenTelemetry\API\Trace\TracerInterface;
1313
use OpenTelemetry\API\Trace\TracerProviderInterface;
14+
use OpenTelemetry\Context\Propagation\NoopResponsePropagator;
1415
use OpenTelemetry\Context\Propagation\NoopTextMapPropagator;
16+
use OpenTelemetry\Context\Propagation\ResponsePropagatorInterface;
1517
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
1618
use Psr\Log\LoggerInterface;
1719
use Psr\Log\NullLogger;
@@ -68,6 +70,7 @@ trait InstrumentationTrait
6870
private TracerInterface $tracer;
6971
private MeterInterface $meter;
7072
private LoggerInterface $logger;
73+
private ResponsePropagatorInterface $responsePropagator;
7174

7275
public function __construct()
7376
{
@@ -171,6 +174,16 @@ public function getLogger(): LoggerInterface
171174
return $this->logger;
172175
}
173176

177+
public function setResponsePropagator(ResponsePropagatorInterface $responsePropagator): void
178+
{
179+
$this->responsePropagator = $responsePropagator;
180+
}
181+
182+
public function getResponsePropagator(): ResponsePropagatorInterface
183+
{
184+
return $this->responsePropagator;
185+
}
186+
174187
private function validateImplementation(): void
175188
{
176189
if (!$this instanceof InstrumentationInterface) {
@@ -190,5 +203,6 @@ private function initDefaults(): void
190203
/** @phan-suppress-next-line PhanAccessMethodInternal */
191204
$this->meter = new NoopMeter();
192205
$this->logger = new NullLogger();
206+
$this->responsePropagator = new NoopResponsePropagator();
193207
}
194208
}

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
],
1919
"require": {
2020
"php": "^8.1",
21-
"open-telemetry/context": "^1.0",
21+
"open-telemetry/context": "^1.4",
2222
"psr/log": "^1.1|^2.0|^3.0",
2323
"symfony/polyfill-php82": "^1.26"
2424
},

0 commit comments

Comments
 (0)