Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/Contracts/TransporterPluginInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Upstash\Vector\Contracts;

use Upstash\Vector\Transporter\TransporterRequest;

interface TransporterPluginInterface
{
public function expandRequest(TransporterRequest $request): TransporterRequest;
}
9 changes: 8 additions & 1 deletion src/Index.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@
use Upstash\Vector\Operations\GetIndexInfoOperation;
use Upstash\Vector\Operations\ListNamespacesOperation;
use Upstash\Vector\Operations\ResetAllNamespacesOperation;
use Upstash\Vector\Telemetry\SdkVersion;
use Upstash\Vector\Transporter\BaseUri;
use Upstash\Vector\Transporter\Headers;
use Upstash\Vector\Transporter\HttpTransporter;
use Upstash\Vector\Transporter\Plugins\TelemetryPlugin;

final class Index implements IndexInterface
{
Expand Down Expand Up @@ -69,7 +71,12 @@ protected function getTransporter(): TransporterInterface
baseUri: new BaseUri($this->url),
headers: new Headers([
'Authorization' => "Bearer {$this->token}",
])
]),
plugins: [
new TelemetryPlugin(
sdkVersion: SdkVersion::resolve(),
),
],
);
}

Expand Down
33 changes: 0 additions & 33 deletions src/Telemetry/SdkTelemetryReporter.php

This file was deleted.

20 changes: 10 additions & 10 deletions src/Transporter/HttpTransporter.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Upstash\Vector\Contracts\TransporterInterface;
use Upstash\Vector\Telemetry\SdkTelemetryReporter;
use Upstash\Vector\Contracts\TransporterPluginInterface;

/**
* @internal
Expand All @@ -16,10 +16,14 @@
{
private Uri $uri;

/**
* @param TransporterPluginInterface[] $plugins
*/
public function __construct(
private ClientInterface $client,
BaseUri $baseUri,
private Headers $headers = new Headers,
private array $plugins = [],
) {
$this->uri = new Uri($baseUri);
}
Expand All @@ -43,6 +47,11 @@ private function transformRequest(TransporterRequest $request): RequestInterface

$factory = Psr17FactoryDiscovery::findRequestFactory();

// run expandRequest plugins
foreach ($this->plugins as $plugin) {
$request = $plugin->expandRequest($request);
}

// Create PSR-17 Request
$psr17Request = $factory->createRequest(
$request->method->value,
Expand All @@ -59,9 +68,6 @@ private function transformRequest(TransporterRequest $request): RequestInterface
$psr17Request = $psr17Request->withHeader($header, $value);
}

// Add Telemetry Headers
$psr17Request = $this->addTelemetryHeaders($psr17Request);

// Add Content type
$psr17Request = $psr17Request->withHeader('Content-Type', $request->contentType->value);

Expand Down Expand Up @@ -90,10 +96,4 @@ private function transformResponse(ResponseInterface $response): TransporterResp
data: $response->getBody()->getContents(),
);
}

private function addTelemetryHeaders(RequestInterface $psr17Request): RequestInterface
{
return (new SdkTelemetryReporter)
->appendHeaders($psr17Request);
}
}
27 changes: 27 additions & 0 deletions src/Transporter/Plugins/TelemetryPlugin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Upstash\Vector\Transporter\Plugins;

use Upstash\Vector\Contracts\TransporterPluginInterface;
use Upstash\Vector\Transporter\TransporterRequest;

readonly class TelemetryPlugin implements TransporterPluginInterface
{
private string $runtime;

public function __construct(
private string $sdkVersion,
?string $runtime = '',
) {
$this->runtime = $runtime ?? sprintf('php%s', phpversion());
}

public function expandRequest(TransporterRequest $request): TransporterRequest
{
$headers = $request->headers
->withHeader('Upstash-Telemetry-Runtime', $this->runtime)
->withHeader('Upstash-Telemetry-Sdk', $this->sdkVersion);

return $request->withHeaders($headers);
}
}
12 changes: 12 additions & 0 deletions src/Transporter/TransporterRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,16 @@ public function hasBody(): bool
{
return ! empty($this->data);
}

public function withHeaders(Headers $headers): self
{
return new self(
contentType: $this->contentType,
method: $this->method,
path: $this->path,
headers: $headers,
data: $this->data,
searchParams: $this->searchParams,
);
}
}
30 changes: 0 additions & 30 deletions tests/Unit/Telemetry/SdkTelemetryReporterTest.php

This file was deleted.