Skip to content

Commit a0c508b

Browse files
authored
refactor: move telemetry to a transport plugin
1 parent cb1bac7 commit a0c508b

7 files changed

Lines changed: 67 additions & 74 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Upstash\Vector\Contracts;
4+
5+
use Upstash\Vector\Transporter\TransporterRequest;
6+
7+
interface TransporterPluginInterface
8+
{
9+
public function expandRequest(TransporterRequest $request): TransporterRequest;
10+
}

src/Index.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
use Upstash\Vector\Operations\GetIndexInfoOperation;
1212
use Upstash\Vector\Operations\ListNamespacesOperation;
1313
use Upstash\Vector\Operations\ResetAllNamespacesOperation;
14+
use Upstash\Vector\Telemetry\SdkVersion;
1415
use Upstash\Vector\Transporter\BaseUri;
1516
use Upstash\Vector\Transporter\Headers;
1617
use Upstash\Vector\Transporter\HttpTransporter;
18+
use Upstash\Vector\Transporter\Plugins\TelemetryPlugin;
1719

1820
final class Index implements IndexInterface
1921
{
@@ -69,7 +71,12 @@ protected function getTransporter(): TransporterInterface
6971
baseUri: new BaseUri($this->url),
7072
headers: new Headers([
7173
'Authorization' => "Bearer {$this->token}",
72-
])
74+
]),
75+
plugins: [
76+
new TelemetryPlugin(
77+
sdkVersion: SdkVersion::resolve(),
78+
),
79+
],
7380
);
7481
}
7582

src/Telemetry/SdkTelemetryReporter.php

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/Transporter/HttpTransporter.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Psr\Http\Message\RequestInterface;
88
use Psr\Http\Message\ResponseInterface;
99
use Upstash\Vector\Contracts\TransporterInterface;
10-
use Upstash\Vector\Telemetry\SdkTelemetryReporter;
10+
use Upstash\Vector\Contracts\TransporterPluginInterface;
1111

1212
/**
1313
* @internal
@@ -16,10 +16,14 @@
1616
{
1717
private Uri $uri;
1818

19+
/**
20+
* @param TransporterPluginInterface[] $plugins
21+
*/
1922
public function __construct(
2023
private ClientInterface $client,
2124
BaseUri $baseUri,
2225
private Headers $headers = new Headers,
26+
private array $plugins = [],
2327
) {
2428
$this->uri = new Uri($baseUri);
2529
}
@@ -43,6 +47,11 @@ private function transformRequest(TransporterRequest $request): RequestInterface
4347

4448
$factory = Psr17FactoryDiscovery::findRequestFactory();
4549

50+
// run expandRequest plugins
51+
foreach ($this->plugins as $plugin) {
52+
$request = $plugin->expandRequest($request);
53+
}
54+
4655
// Create PSR-17 Request
4756
$psr17Request = $factory->createRequest(
4857
$request->method->value,
@@ -59,9 +68,6 @@ private function transformRequest(TransporterRequest $request): RequestInterface
5968
$psr17Request = $psr17Request->withHeader($header, $value);
6069
}
6170

62-
// Add Telemetry Headers
63-
$psr17Request = $this->addTelemetryHeaders($psr17Request);
64-
6571
// Add Content type
6672
$psr17Request = $psr17Request->withHeader('Content-Type', $request->contentType->value);
6773

@@ -90,10 +96,4 @@ private function transformResponse(ResponseInterface $response): TransporterResp
9096
data: $response->getBody()->getContents(),
9197
);
9298
}
93-
94-
private function addTelemetryHeaders(RequestInterface $psr17Request): RequestInterface
95-
{
96-
return (new SdkTelemetryReporter)
97-
->appendHeaders($psr17Request);
98-
}
9999
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace Upstash\Vector\Transporter\Plugins;
4+
5+
use Upstash\Vector\Contracts\TransporterPluginInterface;
6+
use Upstash\Vector\Transporter\TransporterRequest;
7+
8+
readonly class TelemetryPlugin implements TransporterPluginInterface
9+
{
10+
private string $runtime;
11+
12+
public function __construct(
13+
private string $sdkVersion,
14+
?string $runtime = '',
15+
) {
16+
$this->runtime = $runtime ?? sprintf('php%s', phpversion());
17+
}
18+
19+
public function expandRequest(TransporterRequest $request): TransporterRequest
20+
{
21+
$headers = $request->headers
22+
->withHeader('Upstash-Telemetry-Runtime', $this->runtime)
23+
->withHeader('Upstash-Telemetry-Sdk', $this->sdkVersion);
24+
25+
return $request->withHeaders($headers);
26+
}
27+
}

src/Transporter/TransporterRequest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,16 @@ public function hasBody(): bool
2020
{
2121
return ! empty($this->data);
2222
}
23+
24+
public function withHeaders(Headers $headers): self
25+
{
26+
return new self(
27+
contentType: $this->contentType,
28+
method: $this->method,
29+
path: $this->path,
30+
headers: $headers,
31+
data: $this->data,
32+
searchParams: $this->searchParams,
33+
);
34+
}
2335
}

tests/Unit/Telemetry/SdkTelemetryReporterTest.php

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)