Skip to content

Commit 9d2c286

Browse files
authored
Add ServerTiming response propagator (#213)
* Add ServerTiming response propagator * Add ServerTimingPropagator * Amend Symfony tests to include server-timing tests * Amend composer.json * Reference correct class * Add package to .gitsplit.yml * Add ServerTiming to tested packages
1 parent f7a133e commit 9d2c286

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

composer.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
"symfony/http-client-contracts": "*"
1717
},
1818
"suggest": {
19-
"open-telemetry/opentelemetry-propagation-traceresponse": "Automatically propagate the context to the client."
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."
2021
},
2122
"require-dev": {
2223
"friendsofphp/php-cs-fixer": "^3",
@@ -29,7 +30,8 @@
2930
"phpunit/phpunit": "^9.5",
3031
"vimeo/psalm": "^4.0",
3132
"symfony/http-client": "^5.4||^6.0",
32-
"open-telemetry/opentelemetry-propagation-traceresponse": "*"
33+
"open-telemetry/opentelemetry-propagation-traceresponse": "*",
34+
"open-telemetry/opentelemetry-propagation-server-timing": "*"
3335
},
3436
"autoload": {
3537
"psr-4": {

src/SymfonyInstrumentation.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ public static function register(): void
120120

121121
$span->setAttribute(TraceAttributes::HTTP_RESPONSE_BODY_SIZE, $contentLength);
122122

123+
// Propagate server-timing header to response, if ServerTimingPropagator is present
124+
if (class_exists('OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator')) {
125+
$prop = new \OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator();
126+
$prop->inject($response, ResponsePropagationSetter::instance(), $scope->context());
127+
}
128+
123129
// Propagate traceresponse header to response, if TraceResponsePropagator is present
124130
if (class_exists('OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator')) {
125131
$prop = new \OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator();

tests/Integration/SymfonyInstrumentationTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace OpenTelemetry\Tests\Instrumentation\Symfony\tests\Integration;
66

7+
use OpenTelemetry\Contrib\Propagation\ServerTiming\ServerTimingPropagator;
78
use OpenTelemetry\Contrib\Propagation\TraceResponse\TraceResponsePropagator;
89
use OpenTelemetry\SemConv\TraceAttributes;
910
use Symfony\Component\EventDispatcher\EventDispatcher;
@@ -62,6 +63,12 @@ public function test_http_kernel_handle_attributes(): void
6263
$response->headers->all(),
6364
'traceresponse header is present if TraceResponsePropagator is present'
6465
);
66+
67+
$this->assertArrayHasKey(
68+
ServerTimingPropagator::SERVER_TIMING,
69+
$response->headers->all(),
70+
'server-timings header is present if ServerTimingPropagator is present'
71+
);
6572
}
6673

6774
public function test_http_kernel_handle_stream_response(): void
@@ -81,6 +88,12 @@ public function test_http_kernel_handle_stream_response(): void
8188
$response->headers->all(),
8289
'traceresponse header is present if TraceResponsePropagator is present'
8390
);
91+
92+
$this->assertArrayHasKey(
93+
ServerTimingPropagator::SERVER_TIMING,
94+
$response->headers->all(),
95+
'server-timings header is present if ServerTimingPropagator is present'
96+
);
8497
}
8598

8699
public function test_http_kernel_handle_binary_file_response(): void
@@ -97,6 +110,12 @@ public function test_http_kernel_handle_binary_file_response(): void
97110
$response->headers->all(),
98111
'traceresponse header is present if TraceResponsePropagator is present'
99112
);
113+
114+
$this->assertArrayHasKey(
115+
ServerTimingPropagator::SERVER_TIMING,
116+
$response->headers->all(),
117+
'server-timings header is present if ServerTimingPropagator is present'
118+
);
100119
}
101120

102121
public function test_http_kernel_handle_with_empty_route(): void
@@ -115,6 +134,12 @@ public function test_http_kernel_handle_with_empty_route(): void
115134
$response->headers->all(),
116135
'traceresponse header is present if TraceResponsePropagator is present'
117136
);
137+
138+
$this->assertArrayHasKey(
139+
ServerTimingPropagator::SERVER_TIMING,
140+
$response->headers->all(),
141+
'server-timings header is present if ServerTimingPropagator is present'
142+
);
118143
}
119144

120145
public function test_http_kernel_handle_without_route(): void
@@ -131,6 +156,12 @@ public function test_http_kernel_handle_without_route(): void
131156
$response->headers->all(),
132157
'traceresponse header is present if TraceResponsePropagator is present'
133158
);
159+
160+
$this->assertArrayHasKey(
161+
ServerTimingPropagator::SERVER_TIMING,
162+
$response->headers->all(),
163+
'server-timings header is present if ServerTimingPropagator is present'
164+
);
134165
}
135166

136167
private function getHttpKernel(EventDispatcherInterface $eventDispatcher, $controller = null, RequestStack $requestStack = null, array $arguments = []): HttpKernel

0 commit comments

Comments
 (0)