Skip to content

Commit caf990c

Browse files
committed
Fixes after code review
1 parent f9d9d7e commit caf990c

File tree

3 files changed

+45
-30
lines changed

3 files changed

+45
-30
lines changed

src/Instrumentation/Curl/src/CurlHandleMetadata.php

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ public function updateFromCurlOption(int $option, mixed $value)
120120

121121
break;
122122
case CURLOPT_URL:
123-
// $this->setAttribute(TraceAttributes::URL_FULL, self::redactUrlString($value));
123+
$this->setAttribute(TraceAttributes::URL_FULL, self::redactUrlString($value));
124+
124125
break;
125126
case CURLOPT_USERAGENT:
126127
$this->setAttribute(TraceAttributes::USER_AGENT_ORIGINAL, $value);
@@ -132,9 +133,34 @@ public function updateFromCurlOption(int $option, mixed $value)
132133
break;
133134
case CURLOPT_HEADERFUNCTION:
134135
$this->originalHeaderFunction = $value;
135-
// no break
136-
case CURLOPT_VERBOSE:
137136
$this->verboseEnabled = false;
137+
138+
break;
139+
case CURLOPT_VERBOSE:
140+
$this->verboseEnabled = $value;
141+
142+
break;
138143
}
139144
}
145+
146+
public static function redactUrlString(string $fullUrl)
147+
{
148+
$urlParts = parse_url($fullUrl);
149+
if ($urlParts == false) {
150+
return;
151+
}
152+
153+
$scheme = isset($urlParts['scheme']) ? $urlParts['scheme'] . '://' : '';
154+
$host = isset($urlParts['host']) ? $urlParts['host'] : '';
155+
$port = isset($urlParts['port']) ? ':' . $urlParts['port'] : '';
156+
$user = isset($urlParts['user']) ? 'REDACTED' : '';
157+
$pass = isset($urlParts['pass']) ? ':' . 'REDACTED' : '';
158+
$pass = ($user || $pass) ? "$pass@" : '';
159+
$path = isset($urlParts['path']) ? $urlParts['path'] : '';
160+
$query = isset($urlParts['query']) ? '?' . $urlParts['query'] : '';
161+
$fragment = isset($urlParts['fragment']) ? '#' . $urlParts['fragment'] : '';
162+
163+
return $scheme . $user . $pass . $host . $port . $path . $query . $fragment;
164+
}
165+
140166
}

src/Instrumentation/Curl/src/CurlInstrumentation.php

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static function register(): void
5757
if ($retVal instanceof CurlHandle) {
5858
$curlHandleToAttributes[$retVal] = new CurlHandleMetadata();
5959
if (($fullUrl = $params[0] ?? null) !== null) {
60-
$curlHandleToAttributes[$retVal]->setAttribute(TraceAttributes::URL_FULL, self::redactUrlString($fullUrl));
60+
$curlHandleToAttributes[$retVal]->setAttribute(TraceAttributes::URL_FULL, CurlHandleMetadata::redactUrlString($fullUrl));
6161
}
6262
}
6363
}
@@ -380,41 +380,21 @@ private static function finishMultiSpan(int $curlResult, CurlHandle $curlHandle,
380380
$span->end();
381381
}
382382

383-
private static function redactUrlString(string $fullUrl)
384-
{
385-
$urlParts = parse_url($fullUrl);
386-
if ($urlParts == false) {
387-
return;
388-
}
389-
390-
$scheme = isset($urlParts['scheme']) ? $urlParts['scheme'] . '://' : '';
391-
$host = isset($urlParts['host']) ? $urlParts['host'] : '';
392-
$port = isset($urlParts['port']) ? ':' . $urlParts['port'] : '';
393-
$user = isset($urlParts['user']) ? 'REDACTED' : '';
394-
$pass = isset($urlParts['pass']) ? ':' . 'REDACTED' : '';
395-
$pass = ($user || $pass) ? "$pass@" : '';
396-
$path = isset($urlParts['path']) ? $urlParts['path'] : '';
397-
$query = isset($urlParts['query']) ? '?' . $urlParts['query'] : '';
398-
$fragment = isset($urlParts['fragment']) ? '#' . $urlParts['fragment'] : '';
399-
400-
return $scheme . $user . $pass . $host . $port . $path . $query . $fragment;
401-
}
402-
403383
private static function transformHeaderStringToArray(string $header): array
404384
{
405385
$lines = explode("\n", $header);
406386
array_shift($lines); // skip request line
407387

408388
$headersResult = [];
409389
foreach ($lines as $line) {
410-
$line = trim($line, "\r");
390+
$line = trim($line, "\r");
411391
if (empty($line)) {
412392
continue;
413393
}
414394

415395
if (strpos($line, ': ') !== false) {
416396
/** @psalm-suppress PossiblyUndefinedArrayOffset */
417-
list($key, $value) = explode(': ', $line, 2);
397+
[$key, $value] = explode(': ', $line, 2);
418398
$headersResult[strtolower($key)] = $value;
419399
}
420400
}
@@ -444,10 +424,6 @@ private static function setAttributesFromCurlGetInfo(CurlHandle $handle, SpanInt
444424
$span->setAttribute(TraceAttributes::SERVER_PORT, $value);
445425
}
446426

447-
if (($value = $info['primary_port']) != 0) {
448-
$span->setAttribute(TraceAttributes::SERVER_PORT, $value);
449-
}
450-
451427
/** @phpstan-ignore-next-line */
452428
if (($requestHeader = $info['request_header'] ?? null) != null) {
453429
$capturedHeaders = self::transformHeaderStringToArray($requestHeader);

src/Instrumentation/Curl/tests/Integration/CurlInstrumentationTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,24 @@ public function test_curl_setopt(): void
6565

6666
$this->assertCount(1, $this->storage);
6767
$span = $this->storage->offsetGet(0);
68+
$this->assertEquals('http://gugugaga.gugugaga/', $span->getAttributes()->get(TraceAttributes::URL_FULL));
6869
$this->assertSame('POST', $span->getName());
6970
$this->assertSame('Error', $span->getStatus()->getCode());
7071
$this->assertStringContainsString('resolve host', $span->getStatus()->getDescription());
7172
}
7273

74+
public function test_curl_setopt_overrides_url(): void
75+
{
76+
$ch = curl_init('http://example.com');
77+
curl_setopt($ch, CURLOPT_POST, 1);
78+
curl_setopt($ch, CURLOPT_URL, 'http://gugugaga.gugugaga/');
79+
curl_exec($ch);
80+
81+
$this->assertCount(1, $this->storage);
82+
$span = $this->storage->offsetGet(0);
83+
$this->assertEquals('http://gugugaga.gugugaga/', $span->getAttributes()->get(TraceAttributes::URL_FULL));
84+
}
85+
7386
public function test_curl_setopt_array(): void
7487
{
7588
$ch = curl_init();

0 commit comments

Comments
 (0)