From 7e03cb5c53f5c1d92b2d804fda01b1f695572344 Mon Sep 17 00:00:00 2001 From: Jorge Lapa <2780099+heyjorgedev@users.noreply.github.com> Date: Fri, 14 Mar 2025 18:31:57 +0800 Subject: [PATCH] wip --- src/Contracts/TransporterPluginInterface.php | 10 ++++++ src/Index.php | 9 ++++- src/Telemetry/SdkTelemetryReporter.php | 33 ------------------- src/Transporter/HttpTransporter.php | 20 +++++------ src/Transporter/Plugins/TelemetryPlugin.php | 27 +++++++++++++++ src/Transporter/TransporterRequest.php | 12 +++++++ .../Telemetry/SdkTelemetryReporterTest.php | 30 ----------------- 7 files changed, 67 insertions(+), 74 deletions(-) create mode 100644 src/Contracts/TransporterPluginInterface.php delete mode 100644 src/Telemetry/SdkTelemetryReporter.php create mode 100644 src/Transporter/Plugins/TelemetryPlugin.php delete mode 100644 tests/Unit/Telemetry/SdkTelemetryReporterTest.php diff --git a/src/Contracts/TransporterPluginInterface.php b/src/Contracts/TransporterPluginInterface.php new file mode 100644 index 0000000..da26918 --- /dev/null +++ b/src/Contracts/TransporterPluginInterface.php @@ -0,0 +1,10 @@ +url), headers: new Headers([ 'Authorization' => "Bearer {$this->token}", - ]) + ]), + plugins: [ + new TelemetryPlugin( + sdkVersion: SdkVersion::resolve(), + ), + ], ); } diff --git a/src/Telemetry/SdkTelemetryReporter.php b/src/Telemetry/SdkTelemetryReporter.php deleted file mode 100644 index d25bab0..0000000 --- a/src/Telemetry/SdkTelemetryReporter.php +++ /dev/null @@ -1,33 +0,0 @@ -withHeader('Upstash-Telemetry-Runtime', $this->getRuntime()) - ->withHeader('Upstash-Telemetry-Sdk', $this->getPackageVersion()); - } - - public function getRuntime(): string - { - try { - return sprintf('php%s', phpversion()); - } catch (Throwable $e) { - return 'php'; - } - } - - public function getPackageVersion(): string - { - return sprintf('vector-php@%s', SdkVersion::resolve()); - } -} diff --git a/src/Transporter/HttpTransporter.php b/src/Transporter/HttpTransporter.php index 3ae9afb..fb58b35 100644 --- a/src/Transporter/HttpTransporter.php +++ b/src/Transporter/HttpTransporter.php @@ -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 @@ -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); } @@ -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, @@ -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); @@ -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); - } } diff --git a/src/Transporter/Plugins/TelemetryPlugin.php b/src/Transporter/Plugins/TelemetryPlugin.php new file mode 100644 index 0000000..0920ea0 --- /dev/null +++ b/src/Transporter/Plugins/TelemetryPlugin.php @@ -0,0 +1,27 @@ +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); + } +} diff --git a/src/Transporter/TransporterRequest.php b/src/Transporter/TransporterRequest.php index 7a1451c..94adc48 100644 --- a/src/Transporter/TransporterRequest.php +++ b/src/Transporter/TransporterRequest.php @@ -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, + ); + } } diff --git a/tests/Unit/Telemetry/SdkTelemetryReporterTest.php b/tests/Unit/Telemetry/SdkTelemetryReporterTest.php deleted file mode 100644 index e1f56bf..0000000 --- a/tests/Unit/Telemetry/SdkTelemetryReporterTest.php +++ /dev/null @@ -1,30 +0,0 @@ -getRuntime(); - - $this->assertSame("php$version", $runtime); - } - - public function test_package_version_is_correct(): void - { - $reporter = new SdkTelemetryReporter; - /** @phpstan-ignore argument.type */ - $version = json_decode(file_get_contents(__DIR__.'/../../../composer.json'), true)['version']; - - $packageVersion = $reporter->getPackageVersion(); - - $this->assertSame("vector-php@$version", $packageVersion); - } -}