diff options
author | Andrew Dolgov <[email protected]> | 2023-10-20 17:12:29 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2023-10-20 21:13:39 +0300 |
commit | cdd7ad020e165fe680703b6d3319b908b682fb7a (patch) | |
tree | b51eb09b7b4587e8fbc5624ac8d88d28cfcd0b04 /vendor/open-telemetry/exporter-otlp/SpanExporterFactory.php | |
parent | 45a9ff0c88cbd33892ff16ab837e9059937d656e (diff) |
jaeger-client -> opentelemetry
Diffstat (limited to 'vendor/open-telemetry/exporter-otlp/SpanExporterFactory.php')
-rw-r--r-- | vendor/open-telemetry/exporter-otlp/SpanExporterFactory.php | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/vendor/open-telemetry/exporter-otlp/SpanExporterFactory.php b/vendor/open-telemetry/exporter-otlp/SpanExporterFactory.php new file mode 100644 index 000000000..ce0550735 --- /dev/null +++ b/vendor/open-telemetry/exporter-otlp/SpanExporterFactory.php @@ -0,0 +1,96 @@ +<?php + +declare(strict_types=1); + +namespace OpenTelemetry\Contrib\Otlp; + +use OpenTelemetry\API\Behavior\LogsMessagesTrait; +use OpenTelemetry\API\Signals; +use OpenTelemetry\SDK\Common\Configuration\Configuration; +use OpenTelemetry\SDK\Common\Configuration\Defaults; +use OpenTelemetry\SDK\Common\Configuration\Variables; +use OpenTelemetry\SDK\Common\Export\TransportFactoryInterface; +use OpenTelemetry\SDK\Common\Export\TransportInterface; +use OpenTelemetry\SDK\Registry; +use OpenTelemetry\SDK\Trace\SpanExporter\SpanExporterFactoryInterface; +use OpenTelemetry\SDK\Trace\SpanExporterInterface; + +class SpanExporterFactory implements SpanExporterFactoryInterface +{ + use LogsMessagesTrait; + + private ?TransportFactoryInterface $transportFactory; + + private const DEFAULT_COMPRESSION = 'none'; + + public function __construct(?TransportFactoryInterface $transportFactory = null) + { + $this->transportFactory = $transportFactory; + } + + /** + * @psalm-suppress ArgumentTypeCoercion + */ + public function create(): SpanExporterInterface + { + $transport = $this->buildTransport(); + + return new SpanExporter($transport); + } + + /** + * @psalm-suppress ArgumentTypeCoercion + * @psalm-suppress UndefinedClass + */ + private function buildTransport(): TransportInterface + { + $protocol = $this->getProtocol(); + $contentType = Protocols::contentType($protocol); + $endpoint = $this->getEndpoint($protocol); + $headers = $this->getHeaders(); + $compression = $this->getCompression(); + + $factoryClass = Registry::transportFactory($protocol); + $factory = $this->transportFactory ?: new $factoryClass(); + + return $factory->create($endpoint, $contentType, $headers, $compression); + } + + private function getProtocol(): string + { + return Configuration::has(Variables::OTEL_EXPORTER_OTLP_TRACES_PROTOCOL) ? + Configuration::getEnum(Variables::OTEL_EXPORTER_OTLP_TRACES_PROTOCOL) : + Configuration::getEnum(Variables::OTEL_EXPORTER_OTLP_PROTOCOL); + } + + private function getEndpoint(string $protocol): string + { + if (Configuration::has(Variables::OTEL_EXPORTER_OTLP_TRACES_ENDPOINT)) { + return Configuration::getString(Variables::OTEL_EXPORTER_OTLP_TRACES_ENDPOINT); + } + $endpoint = Configuration::has(Variables::OTEL_EXPORTER_OTLP_ENDPOINT) + ? Configuration::getString(Variables::OTEL_EXPORTER_OTLP_ENDPOINT) + : Defaults::OTEL_EXPORTER_OTLP_ENDPOINT; + if ($protocol === Protocols::GRPC) { + return $endpoint . OtlpUtil::method(Signals::TRACE); + } + + return HttpEndpointResolver::create()->resolveToString($endpoint, Signals::TRACE); + } + + private function getHeaders(): array + { + $headers = Configuration::has(Variables::OTEL_EXPORTER_OTLP_TRACES_HEADERS) ? + Configuration::getMap(Variables::OTEL_EXPORTER_OTLP_TRACES_HEADERS) : + Configuration::getMap(Variables::OTEL_EXPORTER_OTLP_HEADERS); + + return $headers + OtlpUtil::getUserAgentHeader(); + } + + private function getCompression(): string + { + return Configuration::has(Variables::OTEL_EXPORTER_OTLP_TRACES_COMPRESSION) ? + Configuration::getEnum(Variables::OTEL_EXPORTER_OTLP_TRACES_COMPRESSION) : + Configuration::getEnum(Variables::OTEL_EXPORTER_OTLP_COMPRESSION, self::DEFAULT_COMPRESSION); + } +} |