Skip to content

Commit 9b97522

Browse files
authored
Fix: ignore redirection error (#291)
1 parent 89117db commit 9b97522

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/Instrumentation/Laravel/src/Watchers/ClientRequestWatcher.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ private function maybeRecordError(SpanInterface $span, Response $response): void
112112
return;
113113
}
114114

115+
// HTTP status code 3xx is not really error
116+
// See https://www.rfc-editor.org/rfc/rfc9110.html#name-redirection-3xx
117+
if ($response->redirect()) {
118+
return;
119+
}
120+
115121
$span->setStatus(
116122
StatusCode::STATUS_ERROR,
117123
HttpResponse::$statusTexts[$response->status()] ?? (string) $response->status()

src/Instrumentation/Laravel/tests/Integration/Http/ClientTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,29 @@ public function test_it_records_requests(): void
2020
Http::fake([
2121
'ok.opentelemetry.io/*' => Http::response(status: 201),
2222
'missing.opentelemetry.io' => Http::response(status: 404),
23+
'redirect.opentelemetry.io' => Http::response(status: 302),
2324
]);
2425

2526
$response = Http::get('missing.opentelemetry.io');
2627
$span = $this->storage[0];
2728
self::assertEquals(404, $response->status());
2829
self::assertEquals('GET', $span->getName());
2930
self::assertEquals('missing.opentelemetry.io', $span->getAttributes()->get(TraceAttributes::URL_PATH));
31+
self::assertEquals(StatusCode::STATUS_ERROR, $span->getStatus()->getCode());
3032

3133
$response = Http::post('ok.opentelemetry.io/foo?param=bar');
3234
$span = $this->storage[1];
3335
self::assertEquals(201, $response->status());
3436
self::assertEquals('POST', $span->getName());
3537
self::assertEquals('ok.opentelemetry.io/foo', $span->getAttributes()->get(TraceAttributes::URL_PATH));
38+
self::assertEquals(StatusCode::STATUS_UNSET, $span->getStatus()->getCode());
39+
40+
$response = Http::get('redirect.opentelemetry.io');
41+
$span = $this->storage[2];
42+
self::assertEquals(302, $response->status());
43+
self::assertEquals('GET', $span->getName());
44+
self::assertEquals('redirect.opentelemetry.io', $span->getAttributes()->get(TraceAttributes::URL_PATH));
45+
self::assertEquals(StatusCode::STATUS_UNSET, $span->getStatus()->getCode());
3646
}
3747

3848
public function test_it_records_connection_failures(): void

0 commit comments

Comments
 (0)