diff --git a/.gitsplit.yml b/.gitsplit.yml index 9f7eb8289..eab23219a 100644 --- a/.gitsplit.yml +++ b/.gitsplit.yml @@ -28,8 +28,6 @@ splits: target: "https://${GH_TOKEN}@github.com/opentelemetry-php/extension-propagator-b3.git" - prefix: "src/Extension/Propagator/CloudTrace" target: "https://${GH_TOKEN}@github.com/opentelemetry-php/extension-propagator-cloudtrace.git" - - prefix: "src/Extension/Propagator/Jaeger" - target: "https://${GH_TOKEN}@github.com/opentelemetry-php/extension-propagator-jaeger.git" # List of references to split (defined as regexp) origins: diff --git a/composer.json b/composer.json index 2dddaf1a9..3d1241a47 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,6 @@ "open-telemetry/exporter-zipkin": "1.0.x-dev", "open-telemetry/extension-propagator-b3": "1.0.x-dev", "open-telemetry/extension-propagator-cloudtrace": "1.0.x-dev", - "open-telemetry/extension-propagator-jaeger": "0.0.2", "open-telemetry/gen-otlp-protobuf": "1.0.x-dev", "open-telemetry/sdk": "1.0.x-dev", "open-telemetry/sdk-configuration": "0.1.x-dev", @@ -69,7 +68,6 @@ "src/Contrib/Zipkin/_register.php", "src/Extension/Propagator/B3/_register.php", "src/Extension/Propagator/CloudTrace/_register.php", - "src/Extension/Propagator/Jaeger/_register.php", "src/SDK/Logs/Exporter/_register.php", "src/SDK/Metrics/MetricExporter/_register.php", "src/SDK/Propagation/_register.php", @@ -135,7 +133,6 @@ "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorB3Multi", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorBaggage", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorComposite", - "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorJaeger", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorTraceContext", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SamplerAlwaysOff", diff --git a/deptrac.baseline.yaml b/deptrac.baseline.yaml index e3fa01b34..dbb647f8c 100644 --- a/deptrac.baseline.yaml +++ b/deptrac.baseline.yaml @@ -4,8 +4,6 @@ deptrac: - OpenTelemetry\SDK\Registry /src/Extension/Propagator/CloudTrace/_register.php: - OpenTelemetry\SDK\Registry - /src/Extension/Propagator/Jaeger/_register.php: - - OpenTelemetry\SDK\Registry OpenTelemetry\API\Configuration\Config\ComponentProvider: - Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition - Symfony\Component\Config\Definition\Builder\NodeBuilder diff --git a/src/Config/SDK/ComponentProvider/Propagator/TextMapPropagatorJaeger.php b/src/Config/SDK/ComponentProvider/Propagator/TextMapPropagatorJaeger.php deleted file mode 100644 index 16aa19812..000000000 --- a/src/Config/SDK/ComponentProvider/Propagator/TextMapPropagatorJaeger.php +++ /dev/null @@ -1,36 +0,0 @@ - - */ -#[PackageDependency('open-telemetry/extension-propagator-jaeger', '0.0.2 || 0.0.3')] -final class TextMapPropagatorJaeger implements ComponentProvider -{ - /** - * @param array{} $properties - */ - #[\Override] - public function createPlugin(array $properties, Context $context): TextMapPropagatorInterface - { - return JaegerPropagator::getInstance(); - } - - #[\Override] - public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition - { - return $builder->arrayNode('jaeger'); - } -} diff --git a/src/Config/SDK/composer.json b/src/Config/SDK/composer.json index f30dbfcea..87de6d155 100644 --- a/src/Config/SDK/composer.json +++ b/src/Config/SDK/composer.json @@ -45,7 +45,6 @@ "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorB3Multi", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorBaggage", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorComposite", - "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorJaeger", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorTraceContext", "OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SamplerAlwaysOff", diff --git a/src/Extension/Propagator/Jaeger/JaegerBaggagePropagator.php b/src/Extension/Propagator/Jaeger/JaegerBaggagePropagator.php deleted file mode 100644 index 48eeec1ca..000000000 --- a/src/Extension/Propagator/Jaeger/JaegerBaggagePropagator.php +++ /dev/null @@ -1,88 +0,0 @@ -isEmpty()) { - return; - } - - /** @var Entry $entry */ - foreach ($baggage->getAll() as $key => $entry) { - $key = self::UBER_BAGGAGE_HEADER_PREFIX . $key; - $value = rawurlencode((string) $entry->getValue()); - $setter->set($carrier, $key, $value); - } - } - - /** {@inheritdoc} */ - #[\Override] - public function extract($carrier, ?PropagationGetterInterface $getter = null, ?ContextInterface $context = null): ContextInterface - { - $getter ??= ArrayAccessGetterSetter::getInstance(); - $context ??= Context::getCurrent(); - - $baggageKeys = $getter->keys($carrier); - - if ($baggageKeys === []) { - return $context; - } - - $baggageBuilder = Baggage::getBuilder(); - - foreach ($baggageKeys as $key) { - if (str_starts_with($key, self::UBER_BAGGAGE_HEADER_PREFIX)) { - $baggageKey = substr($key, strlen(self::UBER_BAGGAGE_HEADER_PREFIX)); - $value = $getter->get($carrier, $key) ?? ''; - $baggageBuilder->set($baggageKey, rawurldecode($value)); - } - } - - return $context->withContextValue($baggageBuilder->build()); - } -} diff --git a/src/Extension/Propagator/Jaeger/JaegerDebugFlagContextKey.php b/src/Extension/Propagator/Jaeger/JaegerDebugFlagContextKey.php deleted file mode 100644 index 8133aa70b..000000000 --- a/src/Extension/Propagator/Jaeger/JaegerDebugFlagContextKey.php +++ /dev/null @@ -1,27 +0,0 @@ -getContext(); - - if (!$spanContext->isValid()) { - return; - } - - $flag = $this->getFlag($spanContext, $context); - - $uberTraceId = sprintf( - '%s:%s:%d:%d', - $spanContext->getTraceId(), - $spanContext->getSpanId(), - self::DEFAULT_PARENT_SPAN_ID, - $flag - ); - - $setter->set($carrier, self::UBER_TRACE_ID_HEADER, $uberTraceId); - } - - /** {@inheritdoc} */ - #[\Override] - public function extract($carrier, ?PropagationGetterInterface $getter = null, ?ContextInterface $context = null): ContextInterface - { - $getter ??= ArrayAccessGetterSetter::getInstance(); - $context ??= Context::getCurrent(); - - $spanContext = self::extractImpl($carrier, $getter, $context); - if (!$spanContext->isValid()) { - return $context; - } - - return $context->withContextValue(Span::wrap($spanContext)); - } - - private function getFlag(SpanContextInterface $spanContext, ContextInterface $context): int - { - if ($spanContext->isSampled()) { - if ($context->get(JaegerDebugFlagContextKey::instance())) { - return self::IS_DEBUG | self::IS_SAMPLED; - } - - return self::IS_SAMPLED; - } - - return self::IS_NOT_SAMPLED; - } - - private static function extractImpl($carrier, PropagationGetterInterface $getter, ContextInterface &$context): SpanContextInterface - { - $headerValue = $getter->get($carrier, self::UBER_TRACE_ID_HEADER); - - if ($headerValue === null) { - return SpanContext::getInvalid(); - } - - $pieces = explode(':', $headerValue); - - if (count($pieces) != 4) { - return SpanContext::getInvalid(); - } - - [$traceId, $spanId, $parentSpanId, $traceFlags] = $pieces; - - $traceId = str_pad($traceId, SpanContextValidator::TRACE_LENGTH, '0', STR_PAD_LEFT); - $spanId = str_pad($spanId, SpanContextValidator::SPAN_LENGTH, '0', STR_PAD_LEFT); - - if (!SpanContextValidator::isValidTraceId($traceId) || !SpanContextValidator::isValidSpanId($spanId)) { - return SpanContext::getInvalid(); - } - - if ((int) $traceFlags & self::IS_DEBUG) { - $context = $context->with(JaegerDebugFlagContextKey::instance(), true); - } - - $isSampled = ((int) $traceFlags) & 1; - - return SpanContext::createFromRemoteParent( - $traceId, - $spanId, - $isSampled ? TraceFlags::SAMPLED : TraceFlags::DEFAULT - ); - } -} diff --git a/src/Extension/Propagator/Jaeger/README.md b/src/Extension/Propagator/Jaeger/README.md deleted file mode 100644 index 6dec0c0c1..000000000 --- a/src/Extension/Propagator/Jaeger/README.md +++ /dev/null @@ -1,31 +0,0 @@ -[![Releases](https://img.shields.io/badge/releases-purple)](https://github.com/opentelemetry-php/extension-propagator-jaeger/releases) -[![Source](https://img.shields.io/badge/source-extension--propagator--jaeger-green)](https://github.com/open-telemetry/opentelemetry-php/tree/main/src/Extension/Propagator/Jaeger) -[![Mirror](https://img.shields.io/badge/mirror-opentelemetry--php:extension--propagator--jaeger-blue)](https://github.com/opentelemetry-php/extension-propagator-jaeger) -[![Latest Version](http://poser.pugx.org/open-telemetry/extension-propagator-jaeger/v/unstable)](https://packagist.org/packages/open-telemetry/extension-propagator-jaeger/) -[![Stable](http://poser.pugx.org/open-telemetry/extension-propagator-jaeger/v/stable)](https://packagist.org/packages/open-telemetry/extension-propagator-jaeger/) - -# OpenTelemetry Extension -### Jaeger Propagator - -Jaeger is a propagator that supports the specification for the header "uber-trace-id" used for trace context propagation across -service boundaries.(https://www.jaegertracing.io/docs/1.52/client-libraries/#propagation-format). -OpenTelemetry PHP Jaeger Propagator Extension provides option to use Jaeger Baggage (https://www.jaegertracing.io/docs/1.52/client-libraries/#baggage) propagator. - -### Usage -For Jaeger trace propagator: -```text -JaegerPropagator::getInstance() -``` - -For Jaeger baggage propagator: -```text -JaegerBaggagePropagator::getInstance() -``` - -Both of the above have `extract` and `inject` methods available to extract and inject respectively into the -header. - -## Contributing - -This repository is a read-only git subtree split. -To contribute, please see the main [OpenTelemetry PHP monorepo](https://github.com/open-telemetry/opentelemetry-php). diff --git a/src/Extension/Propagator/Jaeger/_register.php b/src/Extension/Propagator/Jaeger/_register.php deleted file mode 100644 index f1b7eb2c6..000000000 --- a/src/Extension/Propagator/Jaeger/_register.php +++ /dev/null @@ -1,21 +0,0 @@ -propagator = JaegerBaggagePropagator::getInstance(); - } - - public function test_fields(): void - { - $this->assertSame( - [], - $this->propagator->fields() - ); - } - - public function test_inject_empty_baggage(): void - { - $carrier = []; - $this->propagator->inject($carrier); - - $this->assertEmpty($carrier); - } - - public function test_inject_baggage(): void - { - $carrier = []; - $this->propagator->inject( - $carrier, - null, - Context::getCurrent()->withContextValue( - Baggage::getBuilder() - ->set('foo', 'bar') - ->build() - ) - ); - - $this->assertSame( - ['uberctx-foo' => 'bar'], - $carrier - ); - } - - public function test_inject_baggage_encoding(): void - { - $carrier = []; - $this->propagator->inject( - $carrier, - null, - Context::getCurrent()->withContextValue( - Baggage::getBuilder() - ->set('foo', 'foo / bar') - ->build() - ) - ); - - $this->assertSame( - ['uberctx-foo' => 'foo%20%2F%20bar'], - $carrier - ); - } - - public function test_extract_empty_baggage(): void - { - $this->assertEquals( - Context::getCurrent(), - $this->propagator->extract([]) - ); - } - - public function test_extract_baggage(): void - { - $carrier = [ - 'uberctx-foo' => 'bar', - 'uberctxfoo' => 'bar', - 'another' => 'foo', - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertEquals( - Baggage::getBuilder()->set('foo', 'bar')->build(), - Baggage::fromContext($context) - ); - } -} diff --git a/tests/Unit/Extension/Propagator/Jaeger/JaegerDebugFlagContextKeyTest.php b/tests/Unit/Extension/Propagator/Jaeger/JaegerDebugFlagContextKeyTest.php deleted file mode 100644 index 51c7fd1e7..000000000 --- a/tests/Unit/Extension/Propagator/Jaeger/JaegerDebugFlagContextKeyTest.php +++ /dev/null @@ -1,21 +0,0 @@ -assertSame( - JaegerDebugFlagContextKey::instance(), - JaegerDebugFlagContextKey::instance() - ); - } -} diff --git a/tests/Unit/Extension/Propagator/Jaeger/JaegerPropagatorTest.php b/tests/Unit/Extension/Propagator/Jaeger/JaegerPropagatorTest.php deleted file mode 100644 index 2ad2c50b2..000000000 --- a/tests/Unit/Extension/Propagator/Jaeger/JaegerPropagatorTest.php +++ /dev/null @@ -1,364 +0,0 @@ -withContextValue(Span::wrap($spanContext)); - } - - private function generateTraceIdHeaderValue( - string $traceId, - string $spanId, - string $flag, - ): string { - return sprintf( - '%s:%s:0:%s', - $traceId, - $spanId, - $flag - ); - } - - /** - * @psalm-suppress PossiblyUndefinedArrayOffset - */ - #[\Override] - protected function setUp(): void - { - $this->propagator = JaegerPropagator::getInstance(); - [$this->fields] = $this->propagator->fields(); - } - - public function test_fields(): void - { - $this->assertSame( - ['uber-trace-id'], - $this->propagator->fields() - ); - } - - public function test_inject_invalid_context(): void - { - $carrier = []; - $this->propagator->inject( - $carrier, - null, - $this->withSpanContext( - SpanContext::create( - SpanContextValidator::INVALID_TRACE, - SpanContextValidator::INVALID_SPAN, - TraceFlags::SAMPLED - ), - Context::getCurrent() - ) - ); - - $this->assertEmpty($carrier); - } - - public function test_inject_sampled_context(): void - { - $carrier = []; - $this->propagator->inject( - $carrier, - null, - $this->withSpanContext( - SpanContext::create( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - TraceFlags::SAMPLED - ), - Context::getCurrent() - ) - ); - - $this->assertSame( - [$this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - '1' - )], - $carrier - ); - } - - public function test_inject_not_sampled_context(): void - { - $carrier = []; - $this->propagator->inject( - $carrier, - null, - $this->withSpanContext( - SpanContext::create( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - ), - Context::getCurrent() - ) - ); - - $this->assertSame( - [$this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - '0' - )], - $carrier - ); - } - - public function test_inject_null_context(): void - { - $carrier = []; - $this->propagator->inject( - $carrier - ); - - $this->assertEmpty($carrier); - } - - public function test_inject_sampled_with_debug_context(): void - { - $carrier = []; - $this->propagator->inject( - $carrier, - null, - $this->withSpanContext( - SpanContext::create( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - TraceFlags::SAMPLED - ), - Context::getCurrent() - )->with(JaegerDebugFlagContextKey::instance(), self::DEBUG_FLAG) - ); - - $this->assertSame( - [$this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - '3' - )], - $carrier - ); - } - - public function test_inject_not_sampled_with_debug_context(): void - { - $carrier = []; - $this->propagator->inject( - $carrier, - null, - $this->withSpanContext( - SpanContext::create( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - ), - Context::getCurrent() - )->with(JaegerDebugFlagContextKey::instance(), self::DEBUG_FLAG) - ); - - $this->assertSame( - [$this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - '0' - )], - $carrier - ); - } - - public function test_extract_nothing(): void - { - $this->assertSame( - Context::getCurrent(), - $this->propagator->extract([]) - ); - } - - public function test_extract_sampled_context(): void - { - $carrier = [ - $this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - '1' - ), - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertEquals( - SpanContext::createFromRemoteParent( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - TraceFlags::SAMPLED - ), - Span::fromContext($context)->getContext() - ); - } - - public function test_extract_not_sampled_context(): void - { - $carrier = [ - $this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - '0' - ), - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertEquals( - SpanContext::createFromRemoteParent( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16 - ), - Span::fromContext($context)->getContext() - ); - } - - public function test_extract_debug_context(): void - { - $carrier = [ - $this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16, - '2' - ), - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertEquals( - SpanContext::createFromRemoteParent( - self::TRACE_ID_BASE16, - self::SPAN_ID_BASE16 - ), - Span::fromContext($context)->getContext() - ); - } - - public function test_extract_invalid_uber_trace_id(): void - { - $carrier = [ - $this->fields => '000000000000000000000000deadbeef:00000000deadbef0:00', - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertSame( - Context::getCurrent(), - $context - ); - } - - public function test_extract_invalid_trace_id(): void - { - $carrier = [ - $this->fields => $this->generateTraceIdHeaderValue( - SpanContextValidator::INVALID_TRACE, - '00000000deadbef0', - '1' - ), - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertSame( - Context::getCurrent(), - $context - ); - } - - public function test_extract_invalid_span_id(): void - { - $carrier = [ - $this->fields => $this->generateTraceIdHeaderValue( - '000000000000000053ce929d0e0e4736', - SpanContextValidator::INVALID_SPAN, - '1' - ), - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertSame( - Context::getCurrent(), - $context - ); - } - - public function test_extract_short_trace_id(): void - { - $carrier = [ - $this->fields => $this->generateTraceIdHeaderValue( - self::TRACE_ID_SHORT, - '00000000deadbef0', - '1' - ), - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertEquals( - SpanContext::createFromRemoteParent( - '000000000000000053ce929d0e0e4736', - '00000000deadbef0', - TraceFlags::SAMPLED - ), - Span::fromContext($context)->getContext() - ); - } - - public function test_extract_short_span_id(): void - { - $carrier = [ - $this->fields => $this->generateTraceIdHeaderValue( - '000000000000000053ce929d0e0e4736', - self::SPAN_ID_SHORT, - '1' - ), - ]; - - $context = $this->propagator->extract($carrier); - - $this->assertEquals( - SpanContext::createFromRemoteParent( - '000000000000000053ce929d0e0e4736', - '00000000deadbef0', - TraceFlags::SAMPLED - ), - Span::fromContext($context)->getContext() - ); - } -} diff --git a/tests/Unit/SDK/FactoryRegistryTest.php b/tests/Unit/SDK/FactoryRegistryTest.php index d823e4da9..20f887bbc 100644 --- a/tests/Unit/SDK/FactoryRegistryTest.php +++ b/tests/Unit/SDK/FactoryRegistryTest.php @@ -102,8 +102,6 @@ public static function textMapPropagator(): array ['b3multi'], ['cloudtrace'], ['cloudtrace-oneway'], - ['jaeger'], - ['jaeger-baggage'], ]; } diff --git a/tests/Unit/SDK/Propagation/PropagatorFactoryTest.php b/tests/Unit/SDK/Propagation/PropagatorFactoryTest.php index 489163e59..476f2eb31 100644 --- a/tests/Unit/SDK/Propagation/PropagatorFactoryTest.php +++ b/tests/Unit/SDK/Propagation/PropagatorFactoryTest.php @@ -12,8 +12,6 @@ use OpenTelemetry\Context\Propagation\NoopTextMapPropagator; use OpenTelemetry\Extension\Propagator\B3\B3Propagator; use OpenTelemetry\Extension\Propagator\CloudTrace\CloudTracePropagator; -use OpenTelemetry\Extension\Propagator\Jaeger\JaegerBaggagePropagator; -use OpenTelemetry\Extension\Propagator\Jaeger\JaegerPropagator; use OpenTelemetry\SDK\Common\Configuration\KnownValues; use OpenTelemetry\SDK\Common\Configuration\Variables; use OpenTelemetry\SDK\Propagation\PropagatorFactory; @@ -53,8 +51,6 @@ public static function propagatorsProvider(): array [KnownValues::VALUE_B3, B3Propagator::class], [KnownValues::VALUE_CLOUD_TRACE, CloudTracePropagator::class], [KnownValues::VALUE_CLOUD_TRACE_ONEWAY, CloudTracePropagator::class], - [KnownValues::VALUE_JAEGER, JaegerPropagator::class], - [KnownValues::VALUE_JAEGER_BAGGAGE, JaegerBaggagePropagator::class], [KnownValues::VALUE_B3_MULTI, B3Propagator::class], [KnownValues::VALUE_NONE, NoopTextMapPropagator::class], [sprintf('%s,%s', KnownValues::VALUE_B3, KnownValues::VALUE_BAGGAGE), MultiTextMapPropagator::class],