Skip to content

Commit

Permalink
use _register.php to register SPI classes
Browse files Browse the repository at this point in the history
in most cases, we can use existing _register.php files rather than using
config.spi - this removes some repetition, and means the experience without
SPI plugin enabled should be closer to when it is enabled.
Merge 3x different _register.php's from SDK into one at the top level.
  • Loading branch information
brettmc committed Jan 13, 2025
1 parent 7dbe592 commit b506de9
Show file tree
Hide file tree
Showing 11 changed files with 106 additions and 103 deletions.
62 changes: 62 additions & 0 deletions src/Config/SDK/_register.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php

declare(strict_types=1);

use Nevay\SPI\ServiceLoader;
use OpenTelemetry\Config\SDK\ComponentProvider\Instrumentation\General\HttpConfigProvider;
use OpenTelemetry\Config\SDK\ComponentProvider\Instrumentation\General\PeerConfigProvider;
use OpenTelemetry\Config\SDK\ComponentProvider\Logs\LogRecordExporterConsole;
use OpenTelemetry\Config\SDK\ComponentProvider\Logs\LogRecordExporterOtlp;
use OpenTelemetry\Config\SDK\ComponentProvider\Logs\LogRecordProcessorBatch;
use OpenTelemetry\Config\SDK\ComponentProvider\Logs\LogRecordProcessorSimple;
use OpenTelemetry\Config\SDK\ComponentProvider\Metrics\AggregationResolverDefault;
use OpenTelemetry\Config\SDK\ComponentProvider\Metrics\MetricExporterConsole;
use OpenTelemetry\Config\SDK\ComponentProvider\Metrics\MetricExporterOtlp;
use OpenTelemetry\Config\SDK\ComponentProvider\Metrics\MetricReaderPeriodic;
use OpenTelemetry\Config\SDK\ComponentProvider\Propagator\TextMapPropagatorB3;
use OpenTelemetry\Config\SDK\ComponentProvider\Propagator\TextMapPropagatorB3Multi;
use OpenTelemetry\Config\SDK\ComponentProvider\Propagator\TextMapPropagatorBaggage;
use OpenTelemetry\Config\SDK\ComponentProvider\Propagator\TextMapPropagatorComposite;
use OpenTelemetry\Config\SDK\ComponentProvider\Propagator\TextMapPropagatorJaeger;
use OpenTelemetry\Config\SDK\ComponentProvider\Propagator\TextMapPropagatorTraceContext;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SamplerAlwaysOff;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SamplerAlwaysOn;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SamplerParentBased;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SamplerTraceIdRatioBased;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SpanExporterConsole;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SpanExporterOtlp;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SpanExporterZipkin;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SpanProcessorBatch;
use OpenTelemetry\Config\SDK\ComponentProvider\Trace\SpanProcessorSimple;
use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;

ServiceLoader::register(ComponentProvider::class, TextMapPropagatorB3::class);
ServiceLoader::register(ComponentProvider::class, TextMapPropagatorB3Multi::class);
ServiceLoader::register(ComponentProvider::class, TextMapPropagatorBaggage::class);
ServiceLoader::register(ComponentProvider::class, TextMapPropagatorComposite::class);
ServiceLoader::register(ComponentProvider::class, TextMapPropagatorJaeger::class);
ServiceLoader::register(ComponentProvider::class, TextMapPropagatorTraceContext::class);

ServiceLoader::register(ComponentProvider::class, SamplerAlwaysOff::class);
ServiceLoader::register(ComponentProvider::class, SamplerAlwaysOn::class);
ServiceLoader::register(ComponentProvider::class, SamplerParentBased::class);
ServiceLoader::register(ComponentProvider::class, SamplerTraceIdRatioBased::class);

ServiceLoader::register(ComponentProvider::class, SpanExporterConsole::class);
ServiceLoader::register(ComponentProvider::class, SpanExporterOtlp::class);
ServiceLoader::register(ComponentProvider::class, SpanExporterZipkin::class);
ServiceLoader::register(ComponentProvider::class, SpanProcessorBatch::class);
ServiceLoader::register(ComponentProvider::class, SpanProcessorSimple::class);

ServiceLoader::register(ComponentProvider::class, AggregationResolverDefault::class);
ServiceLoader::register(ComponentProvider::class, MetricExporterConsole::class);
ServiceLoader::register(ComponentProvider::class, MetricExporterOtlp::class);
ServiceLoader::register(ComponentProvider::class, MetricReaderPeriodic::class);

ServiceLoader::register(ComponentProvider::class, LogRecordExporterConsole::class);
ServiceLoader::register(ComponentProvider::class, LogRecordExporterOtlp::class);
ServiceLoader::register(ComponentProvider::class, LogRecordProcessorBatch::class);
ServiceLoader::register(ComponentProvider::class, LogRecordProcessorSimple::class);

ServiceLoader::register(ComponentProvider::class, HttpConfigProvider::class);
ServiceLoader::register(ComponentProvider::class, PeerConfigProvider::class);
38 changes: 6 additions & 32 deletions src/Config/SDK/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
"tbachert/spi": "^1.0.1"
},
"autoload": {
"files": [
"_register.php"
],
"psr-4": {
"OpenTelemetry\\Config\\SDK\\": ""
}
Expand All @@ -38,38 +41,9 @@
"dev-main": "0.1.x-dev",
"dev-2.x": "2.x-dev"
},
"spi": {
"OpenTelemetry\\Config\\SDK\\Configuration\\ComponentProvider": [
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Propagator\\TextMapPropagatorB3",
"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",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SamplerAlwaysOn",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SamplerParentBased",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SamplerTraceIdRatioBased",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterConsole",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterOtlp",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterZipkin",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanProcessorBatch",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanProcessorSimple",

"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\AggregationResolverDefault",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricExporterConsole",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricExporterOtlp",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricReaderPeriodic",

"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordExporterConsole",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordExporterOtlp",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordProcessorBatch",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordProcessorSimple",

"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Instrumentation\\General\\HttpConfigProvider",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Instrumentation\\General\\PeerConfigProvider"
]
"spi-config": {
"autoload-files": true,
"prune-autoload-files": true
}
}
}
6 changes: 1 addition & 5 deletions src/Contrib/Grpc/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,8 @@
]
},
"extra": {
"spi": {
"OpenTelemetry\\SDK\\Common\\Export\\TransportFactoryInterface": [
"OpenTelemetry\\Contrib\\Grpc\\GrpcTransportFactory"
]
},
"spi-config": {
"autoload-files": true,
"prune-autoload-files": true
},
"branch-alias": {
Expand Down
15 changes: 1 addition & 14 deletions src/Contrib/Otlp/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,8 @@
"dev-main": "1.0.x-dev",
"dev-2.x": "2.x-dev"
},
"spi": {
"OpenTelemetry\\SDK\\Trace\\SpanExporter\\SpanExporterFactoryInterface": [
"OpenTelemetry\\Contrib\\Otlp\\StdoutSpanExporterFactory",
"OpenTelemetry\\Contrib\\Otlp\\SpanExporterFactory"
],
"OpenTelemetry\\SDK\\Metrics\\MetricExporterFactoryInterface": [
"OpenTelemetry\\Contrib\\Otlp\\StdoutMetricExporterFactory",
"OpenTelemetry\\Contrib\\Otlp\\MetricExporterFactory"
],
"OpenTelemetry\\SDK\\Logs\\LogRecordExporterFactoryInterface": [
"OpenTelemetry\\Contrib\\Otlp\\StdoutLogsExporterFactory",
"OpenTelemetry\\Contrib\\Otlp\\LogsExporterFactory"
]
},
"spi-config": {
"autoload-files": true,
"prune-autoload-files": true
}
}
Expand Down
6 changes: 1 addition & 5 deletions src/Contrib/Zipkin/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,8 @@
"dev-main": "1.0.x-dev",
"dev-2.x": "2.x-dev"
},
"spi": {
"OpenTelemetry\\SDK\\Trace\\SpanExporter\\SpanExporterFactoryInterface": [
"OpenTelemetry\\Contrib\\Zipkin\\SpanExporterFactory"
]
},
"spi-config": {
"autoload-files": true,
"prune-autoload-files": true
}
}
Expand Down
7 changes: 1 addition & 6 deletions src/Extension/Propagator/B3/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,8 @@
"dev-main": "1.0.x-dev",
"dev-2.x": "2.x-dev"
},
"spi": {
"OpenTelemetry\\Context\\Propagation\\TextMapPropagatorFactoryInterface": [
"OpenTelemetry\\Extension\\Propagator\\B3\\B3PropagatorFactory",
"OpenTelemetry\\Extension\\Propagator\\B3\\B3MultiPropagatorFactory"
]
},
"spi-config": {
"autoload-files": true,
"prune-autoload-files": true
}
}
Expand Down
7 changes: 1 addition & 6 deletions src/Extension/Propagator/CloudTrace/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,8 @@
"dev-main": "1.0.x-dev",
"dev-2.x": "2.x-dev"
},
"spi": {
"OpenTelemetry\\Context\\Propagation\\TextMapPropagatorFactoryInterface": [
"OpenTelemetry\\Extension\\Propagator\\CloudTrace\\CloudTracePropagatorFactory",
"OpenTelemetry\\Extension\\Propagator\\CloudTrace\\CloudTraceOneWayPropagatorFactory"
]
},
"spi-config": {
"autoload-files": true,
"prune-autoload-files": true
}
}
Expand Down
7 changes: 1 addition & 6 deletions src/Extension/Propagator/Jaeger/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,8 @@
"dev-main": "1.0.x-dev",
"dev-2.x": "2.x-dev"
},
"spi": {
"OpenTelemetry\\Context\\Propagation\\TextMapPropagatorFactoryInterface": [
"OpenTelemetry\\Extension\\Propagator\\Jaeger\\JaegerPropagatorFactory",
"OpenTelemetry\\Extension\\Propagator\\Jaeger\\JaegerBaggagePropagatorFactory"
]
},
"spi-config": {
"autoload-files": true,
"prune-autoload-files": true
}
}
Expand Down
27 changes: 27 additions & 0 deletions src/SDK/_register.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

use Nevay\SPI\ServiceLoader;
use OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory;
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
use OpenTelemetry\SDK\Common\Export\TransportFactoryInterface;
use OpenTelemetry\SDK\Logs\Exporter as LogsExporter;
use OpenTelemetry\SDK\Logs\LogRecordExporterFactoryInterface;
use OpenTelemetry\SDK\Metrics\MetricExporter;
use OpenTelemetry\SDK\Metrics\MetricExporterFactoryInterface;
use OpenTelemetry\SDK\Trace\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanExporter\SpanExporterFactoryInterface;

ServiceLoader::register(LogRecordExporterFactoryInterface::class, LogsExporter\ConsoleExporterFactory::class);
ServiceLoader::register(LogRecordExporterFactoryInterface::class, LogsExporter\InMemoryExporterFactory::class);

ServiceLoader::register(MetricExporterFactoryInterface::class, MetricExporter\InMemoryExporterFactory::class);
ServiceLoader::register(MetricExporterFactoryInterface::class, MetricExporter\ConsoleMetricExporterFactory::class);
ServiceLoader::register(MetricExporterFactoryInterface::class, MetricExporter\NoopMetricExporterFactory::class);

ServiceLoader::register(SpanExporterFactoryInterface::class, SpanExporter\ConsoleSpanExporterFactory::class);
ServiceLoader::register(SpanExporterFactoryInterface::class, SpanExporter\InMemorySpanExporterFactory::class);

ServiceLoader::register(TransportFactoryInterface::class, StreamTransportFactory::class);
ServiceLoader::register(TransportFactoryInterface::class, PsrTransportFactory::class);
30 changes: 3 additions & 27 deletions src/SDK/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@
},
"files": [
"Common/Util/functions.php",
"Logs/Exporter/_register.php",
"Metrics/MetricExporter/_register.php",
"Trace/SpanExporter/_register.php",
"_register.php",
"Common/Dev/Compatibility/_load.php",
"_autoload.php"
]
Expand All @@ -56,31 +54,9 @@
"dev-main": "1.0.x-dev",
"dev-2.x": "2.x-dev"
},
"spi": {
"OpenTelemetry\\SDK\\Common\\Export\\TransportFactoryInterface": [
"OpenTelemetry\\SDK\\Common\\Export\\Http\\PsrTransportFactory",
"OpenTelemetry\\SDK\\Common\\Export\\Stream\\StreamTransportFactory"
],
"OpenTelemetry\\SDK\\Trace\\SpanExporter\\SpanExporterFactoryInterface": [
"OpenTelemetry\\SDK\\Trace\\SpanExporter\\ConsoleSpanExporterFactory",
"OpenTelemetry\\SDK\\Trace\\SpanExporter\\InMemorySpanExporterFactory"
],
"OpenTelemetry\\SDK\\Metrics\\MetricExporterFactoryInterface": [
"OpenTelemetry\\SDK\\Metrics\\MetricExporter\\InMemoryExporterFactory",
"OpenTelemetry\\SDK\\Metrics\\MetricExporter\\ConsoleMetricExporterFactory",
"OpenTelemetry\\SDK\\Metrics\\MetricExporter\\NoopMetricExporterFactory"
],
"OpenTelemetry\\SDK\\Logs\\LogRecordExporterFactoryInterface": [
"OpenTelemetry\\SDK\\Logs\\Exporter\\ConsoleExporterFactory",
"OpenTelemetry\\SDK\\Logs\\Exporter\\InMemoryExporterFactory"
]
},
"spi-config": {
"prune-autoload-files": [
"Logs/Exporter/_register.php",
"Metrics/MetricExporter/_register.php",
"Trace/SpanExporter/_register.php"
]
"autoload-files": true,
"prune-autoload-files": true
}
}
}
4 changes: 2 additions & 2 deletions tests/Unit/SDK/Resource/ResourceInfoFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public function test_resource_from_environment_resource_attribute_takes_preceden
$this->assertEquals('foo', $resource->getAttributes()->get('service.name'));
}

public function test_all_resources_uses_extra_resource_from_registry(): void
public function test_all_resources_uses_extra_resource_from_spi(): void
{
$this->setEnvironmentVariable('OTEL_PHP_DETECTORS', 'all');

Expand All @@ -127,7 +127,7 @@ public function test_all_resources_uses_extra_resource_from_registry(): void
$this->assertSame('test-value', $resource->getAttributes()->get('test-resource'));
}

public function test_composite_default_with_extra_resource_from_registry(): void
public function test_composite_default_with_extra_resource_from_spi(): void
{
$this->setEnvironmentVariable('OTEL_PHP_DETECTORS', 'test,sdk');
$resource = ResourceInfoFactory::defaultResource();
Expand Down

0 comments on commit b506de9

Please sign in to comment.