Skip to content

Commit 3d6f839

Browse files
authored
feat: Update contrib for the experimental response propagator interface (#436)
* Revise contrib for response propagator * Bumped composer.json * Updated Yii composer.json * Fixed instrumentation integration tests * Fixed Propagation tests * Fixed style issue for Symfony * Fixed semconv issue of MongoDB * Bumped sem-conv version in MongoDB to 1.36
1 parent 0e5a858 commit 3d6f839

26 files changed

+166
-258
lines changed

src/Instrumentation/CodeIgniter/composer.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@
1212
"php": "^8.1",
1313
"ext-opentelemetry": "*",
1414
"codeigniter4/framework": "^4.3",
15-
"open-telemetry/api": "^1.0",
15+
"open-telemetry/api": "^1.6",
1616
"open-telemetry/sem-conv": "^1.32"
1717
},
18+
"suggest": {
19+
"open-telemetry/opentelemetry-propagation-server-timing": "Automatically propagate the context to the client through server-timing headers.",
20+
"open-telemetry/opentelemetry-propagation-traceresponse": "Automatically propagate the context to the client through trace-response headers."
21+
},
1822
"require-dev": {
1923
"friendsofphp/php-cs-fixer": "^3.50",
20-
"open-telemetry/sdk": "^1.0",
24+
"open-telemetry/sdk": "^1.8",
2125
"phan/phan": "^5.0",
2226
"php-http/mock-client": "*",
2327
"phpstan/phpstan": "^1.1",

src/Instrumentation/CodeIgniter/src/CodeIgniterInstrumentation.php

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -128,21 +128,8 @@ public static function register(): void
128128
$span->setStatus(StatusCode::STATUS_ERROR);
129129
}
130130

131-
// Propagate server-timing header to response, if ServerTimingPropagator is present
132-
if (class_exists('OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator')) {
133-
/** @phan-suppress-next-line PhanUndeclaredClassMethod */
134-
$prop = new \OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator();
135-
/** @phan-suppress-next-line PhanUndeclaredClassMethod */
136-
$prop->inject($response, ResponsePropagationSetter::instance(), $scope->context());
137-
}
138-
139-
// Propagate traceresponse header to response, if TraceResponsePropagator is present
140-
if (class_exists('OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator')) {
141-
/** @phan-suppress-next-line PhanUndeclaredClassMethod */
142-
$prop = new \OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator();
143-
/** @phan-suppress-next-line PhanUndeclaredClassMethod */
144-
$prop->inject($response, ResponsePropagationSetter::instance(), $scope->context());
145-
}
131+
$prop = Globals::responsePropagator();
132+
$prop->inject($response, ResponsePropagationSetter::instance(), $scope->context());
146133
}
147134

148135
$controller = $controllerProperty->getValue($igniter);

src/Instrumentation/Laravel/composer.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,18 @@
1313
"ext-json": "*",
1414
"ext-opentelemetry": "*",
1515
"laravel/framework": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
16-
"open-telemetry/api": "^1.0",
16+
"open-telemetry/api": "^1.6",
1717
"open-telemetry/sem-conv": "^1.32"
1818
},
19+
"suggest": {
20+
"open-telemetry/opentelemetry-propagation-server-timing": "Automatically propagate the context to the client through server-timing headers.",
21+
"open-telemetry/opentelemetry-propagation-traceresponse": "Automatically propagate the context to the client through trace-response headers."
22+
},
1923
"require-dev": {
2024
"friendsofphp/php-cs-fixer": "^3.50",
2125
"guzzlehttp/guzzle": "*",
2226
"nunomaduro/collision": "*",
23-
"open-telemetry/sdk": "^1.0",
27+
"open-telemetry/sdk": "^1.8",
2428
"orchestra/testbench": ">=7.41.3",
2529
"phan/phan": "^5.0",
2630
"php-http/mock-client": "*",

src/Instrumentation/Laravel/src/Hooks/Illuminate/Contracts/Http/Kernel.php

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -99,21 +99,9 @@ protected function hookHandle(): bool
9999
$span->setAttribute(TraceAttributes::NETWORK_PROTOCOL_VERSION, $response->getProtocolVersion());
100100
$span->setAttribute(TraceAttributes::HTTP_RESPONSE_BODY_SIZE, $response->headers->get('Content-Length'));
101101

102-
// Propagate server-timing header to response, if ServerTimingPropagator is present
103-
if (class_exists('OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator')) {
104-
/** @phan-suppress-next-line PhanUndeclaredClassMethod */
105-
$prop = new \OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator();
106-
/** @phan-suppress-next-line PhanAccessMethodInternal,PhanUndeclaredClassMethod */
107-
$prop->inject($response, ResponsePropagationSetter::instance(), $scope->context());
108-
}
109-
110-
// Propagate traceresponse header to response, if TraceResponsePropagator is present
111-
if (class_exists('OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator')) {
112-
/** @phan-suppress-next-line PhanUndeclaredClassMethod */
113-
$prop = new \OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator();
114-
/** @phan-suppress-next-line PhanAccessMethodInternal,PhanUndeclaredClassMethod */
115-
$prop->inject($response, ResponsePropagationSetter::instance(), $scope->context());
116-
}
102+
$prop = Globals::responsePropagator();
103+
/** @phan-suppress-next-line PhanAccessMethodInternal */
104+
$prop->inject($response, ResponsePropagationSetter::instance(), $scope->context());
117105
}
118106

119107
$this->endSpan($exception);

src/Instrumentation/MongoDB/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"ext-json": "*",
1313
"mongodb/mongodb": "^1.15 || ^2.0",
1414
"open-telemetry/api": "^1.0",
15-
"open-telemetry/sem-conv": "^1.32"
15+
"open-telemetry/sem-conv": "^1.36"
1616
},
1717
"require-dev": {
1818
"friendsofphp/php-cs-fixer": "^3",

src/Instrumentation/MongoDB/src/MongoDBInstrumentationSubscriber.php

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
use OpenTelemetry\API\Trace\SpanKind;
2626
use OpenTelemetry\API\Trace\StatusCode;
2727
use OpenTelemetry\Context\Context;
28-
use OpenTelemetry\SemConv\TraceAttributes;
28+
use OpenTelemetry\SemConv\Attributes\DbAttributes;
29+
use OpenTelemetry\SemConv\Attributes\NetworkAttributes;
30+
use OpenTelemetry\SemConv\Attributes\ServerAttributes;
2931
use Throwable;
3032

3133
/**
@@ -86,14 +88,14 @@ public function commandStarted(CommandStartedEvent $event): void
8688

8789
$builder = self::startSpan($this->instrumentation, 'MongoDB ' . $scopedCommand)
8890
->setSpanKind(SpanKind::KIND_CLIENT)
89-
->setAttribute(TraceAttributes::DB_SYSTEM_NAME, 'mongodb')
90-
->setAttribute(TraceAttributes::DB_NAMESPACE, $databaseName)
91-
->setAttribute(TraceAttributes::DB_OPERATION_NAME, $commandName)
92-
->setAttribute(TraceAttributes::SERVER_ADDRESS, $isSocket ? null : $host)
93-
->setAttribute(TraceAttributes::SERVER_PORT, $isSocket ? null : $port)
94-
->setAttribute(TraceAttributes::NETWORK_TRANSPORT, $isSocket ? 'unix' : 'tcp')
95-
->setAttribute(TraceAttributes::DB_QUERY_TEXT, ($this->commandSerializer)($command))
96-
->setAttribute(TraceAttributes::DB_COLLECTION_NAME, $collectionName)
91+
->setAttribute(DbAttributes::DB_SYSTEM_NAME, 'mongodb')
92+
->setAttribute(DbAttributes::DB_NAMESPACE, $databaseName)
93+
->setAttribute(DbAttributes::DB_OPERATION_NAME, $commandName)
94+
->setAttribute(ServerAttributes::SERVER_ADDRESS, $isSocket ? null : $host)
95+
->setAttribute(ServerAttributes::SERVER_PORT, $isSocket ? null : $port)
96+
->setAttribute(NetworkAttributes::NETWORK_TRANSPORT, $isSocket ? 'unix' : 'tcp')
97+
->setAttribute(DbAttributes::DB_QUERY_TEXT, ($this->commandSerializer)($command))
98+
->setAttribute(DbAttributes::DB_COLLECTION_NAME, $collectionName)
9799
->setAttribute(MongoDBTraceAttributes::DB_MONGODB_REQUEST_ID, $event->getRequestId())
98100
->setAttribute(MongoDBTraceAttributes::DB_MONGODB_OPERATION_ID, $event->getOperationId())
99101
->setAttributes($attributes)

src/Instrumentation/MongoDB/tests/Integration/MongoDBInstrumentationTest.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
use OpenTelemetry\SDK\Trace\SpanExporter\InMemoryExporter;
1616
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
1717
use OpenTelemetry\SDK\Trace\TracerProvider;
18-
use OpenTelemetry\SemConv\TraceAttributes;
18+
use OpenTelemetry\SemConv\Attributes\DbAttributes;
19+
use OpenTelemetry\SemConv\Attributes\NetworkAttributes;
20+
use OpenTelemetry\SemConv\Attributes\ServerAttributes;
1921
use PHPUnit\Framework\TestCase;
2022

2123
class MongoDBInstrumentationTest extends TestCase
@@ -69,13 +71,13 @@ public function test_mongodb_find_one(): void
6971
self::assertSame('MongoDB coll.find', $this->span->getName());
7072
self::assertSame(SpanKind::KIND_CLIENT, $this->span->getKind());
7173
$attributes = $this->span->getAttributes();
72-
self::assertSame('mongodb', $attributes->get(TraceAttributes::DB_SYSTEM_NAME));
73-
self::assertSame(self::DATABASE_NAME, $attributes->get(TraceAttributes::DB_NAMESPACE));
74-
self::assertSame('find', $attributes->get(TraceAttributes::DB_OPERATION_NAME));
75-
self::assertSame(self::COLLECTION_NAME, $attributes->get(TraceAttributes::DB_COLLECTION_NAME));
76-
self::assertSame($this->host, $attributes->get(TraceAttributes::SERVER_ADDRESS));
77-
self::assertSame($this->port, $attributes->get(TraceAttributes::SERVER_PORT));
78-
self::assertSame('tcp', $attributes->get(TraceAttributes::NETWORK_TRANSPORT));
74+
self::assertSame('mongodb', $attributes->get(DbAttributes::DB_SYSTEM_NAME));
75+
self::assertSame(self::DATABASE_NAME, $attributes->get(DbAttributes::DB_NAMESPACE));
76+
self::assertSame('find', $attributes->get(DbAttributes::DB_OPERATION_NAME));
77+
self::assertSame(self::COLLECTION_NAME, $attributes->get(DbAttributes::DB_COLLECTION_NAME));
78+
self::assertSame($this->host, $attributes->get(ServerAttributes::SERVER_ADDRESS));
79+
self::assertSame($this->port, $attributes->get(ServerAttributes::SERVER_PORT));
80+
self::assertSame('tcp', $attributes->get(NetworkAttributes::NETWORK_TRANSPORT));
7981
self::assertTrue($attributes->get(MongoDBTraceAttributes::DB_MONGODB_MASTER));
8082
self::assertFalse($attributes->get(MongoDBTraceAttributes::DB_MONGODB_READ_ONLY));
8183
self::assertIsNumeric($attributes->get(MongoDBTraceAttributes::DB_MONGODB_CONNECTION_ID));

src/Instrumentation/Slim/composer.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,25 @@
1212
"php": "^8.1",
1313
"ext-opentelemetry": "*",
1414
"ext-reflection": "*",
15-
"open-telemetry/api": "^1.0",
15+
"open-telemetry/api": "^1.6",
1616
"open-telemetry/sem-conv": "^1.36",
1717
"slim/slim": "^4"
1818
},
19+
"suggest": {
20+
"open-telemetry/opentelemetry-propagation-server-timing": "Automatically propagate the context to the client through server-timing headers.",
21+
"open-telemetry/opentelemetry-propagation-traceresponse": "Automatically propagate the context to the client through trace-response headers."
22+
},
1923
"require-dev": {
2024
"friendsofphp/php-cs-fixer": "^3",
2125
"mockery/mockery": "^1.5",
2226
"nyholm/psr7": "*",
23-
"open-telemetry/opentelemetry-propagation-server-timing": "*",
24-
"open-telemetry/opentelemetry-propagation-traceresponse": "*",
2527
"phan/phan": "^5.0",
2628
"php-http/mock-client": "*",
2729
"phpstan/phpstan-mockery": "^1.1.0",
2830
"phpstan/phpstan": "^1.1",
2931
"phpstan/phpstan-phpunit": "^1.0",
3032
"psalm/plugin-phpunit": "^0.19.2",
31-
"open-telemetry/sdk": "^1.0",
33+
"open-telemetry/sdk": "^1.8",
3234
"phpunit/phpunit": "^9.5",
3335
"vimeo/psalm": "6.4.0"
3436
},

src/Instrumentation/Slim/src/SlimInstrumentation.php

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,8 @@ public static function register(): void
104104
$span->setAttribute(HttpIncubatingAttributes::HTTP_RESPONSE_BODY_SIZE, $response->getHeaderLine('Content-Length'));
105105

106106
if (self::$supportsResponsePropagation) {
107-
// Propagate server-timing header to response, if ServerTimingPropagator is present
108-
if (class_exists('OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator')) {
109-
$prop = new \OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator();
110-
$prop->inject($response, PsrResponsePropagationSetter::instance(), $scope->context());
111-
}
112-
113-
// Propagate traceresponse header to response, if TraceResponsePropagator is present
114-
if (class_exists('OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator')) {
115-
$prop = new \OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator();
116-
$prop->inject($response, PsrResponsePropagationSetter::instance(), $scope->context());
117-
}
107+
$prop = Globals::responsePropagator();
108+
$prop->inject($response, PsrResponsePropagationSetter::instance(), $scope->context());
118109
}
119110
}
120111
$span->end();

src/Instrumentation/Slim/tests/Integration/SlimInstrumentationTest.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,6 @@ public function test_response_propagation(): void
145145
$response = $app->handle($request);
146146
$this->assertCount(1, $this->storage);
147147
$this->assertArrayHasKey('X-Foo', $response->getHeaders());
148-
$this->assertArrayHasKey('server-timing', $response->getHeaders());
149-
$this->assertStringStartsWith('traceparent;desc=', $response->getHeaderLine('server-timing'));
150-
$this->assertArrayHasKey('traceresponse', $response->getHeaders());
151148
}
152149

153150
public function createMockStrategy(): InvocationStrategyInterface

0 commit comments

Comments
 (0)