Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
47367ac
support opentelemetry/configuration 0.4
brettmc Apr 11, 2025
5285f76
implement resource detectors
brettmc Apr 11, 2025
cde67f1
green checks
brettmc Apr 11, 2025
dbdac4a
implement configurators
brettmc Apr 11, 2025
c293570
implement resources and detectors
brettmc Apr 12, 2025
237bdef
tidy
brettmc Apr 14, 2025
6f6b293
fix include/exclude pattern matching, fix todo
brettmc Apr 15, 2025
0ff767b
move attribute processing into a class, add unit tests
brettmc Apr 15, 2025
5cca3d1
allow null includes, treat as 'include all'
brettmc Apr 15, 2025
c1cae48
remove useless noop propagator
brettmc Apr 15, 2025
fe1fde5
fix cardinality_limits config
brettmc Apr 15, 2025
971792b
dont reference config in closure
brettmc Apr 15, 2025
50b0f6b
remove env detector component
brettmc Apr 15, 2025
93b57c6
add memory exporters
brettmc Apr 15, 2025
b57af0c
rework composite_list
brettmc Apr 15, 2025
1ce4d5a
improve test
brettmc Apr 15, 2025
50507ab
fix unstable test
brettmc Apr 15, 2025
97b72d3
composite_list is string
brettmc Apr 15, 2025
4fc63d2
revert configurator changes
brettmc Apr 16, 2025
943e47e
Merge branch 'main' into decl-config-0.4
brettmc May 1, 2025
96abdf0
enforce mandatory resource attributes
brettmc May 1, 2025
565a49e
remove mandatory detector component providers
brettmc May 8, 2025
ab2563b
remove null attributes + array values
brettmc May 8, 2025
75a018a
disabled is required, remove no-op normalization
brettmc May 8, 2025
1b7b2ad
rector
brettmc May 8, 2025
f94543e
remove duplicate propagators from composite_list
brettmc May 8, 2025
4ac74b8
Merge branch 'main' into decl-config-0.4
brettmc May 8, 2025
a12c337
update semconv schema versions
brettmc May 8, 2025
000e483
fix test
brettmc May 8, 2025
84ef050
Apply suggestions from code review
brettmc May 12, 2025
3be2ca3
Merge branch 'open-telemetry:main' into decl-config-0.4
brettmc May 12, 2025
2d5923a
dont allow attribute removal from mandatory detectors
brettmc May 12, 2025
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
9 changes: 9 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SamplerParentBased",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SamplerTraceIdRatioBased",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterConsole",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterMemory",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterOtlpFile",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterOtlpGrpc",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Trace\\SpanExporterOtlpHttp",
Expand All @@ -148,23 +149,31 @@

"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\AggregationResolverDefault",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricExporterConsole",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricExporterMemory",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricExporterOtlpFile",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricExporterOtlpGrpc",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricExporterOtlpHttp",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Metrics\\MetricReaderPeriodic",

"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordExporterConsole",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordExporterMemory",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordExporterOtlpFile",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordExporterOtlpGrpc",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordExporterOtlpHttp",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordProcessorBatch",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Logs\\LogRecordProcessorSimple",

"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Detector\\Composer",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Detector\\Host",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Detector\\Process",

"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Instrumentation\\General\\HttpConfigProvider",
"OpenTelemetry\\Config\\SDK\\ComponentProvider\\Instrumentation\\General\\PeerConfigProvider",

"OpenTelemetry\\Example\\ExampleConfigProvider",

"OpenTelemetry\\Tests\\Integration\\Config\\ComponentProvider\\Detector\\Container",
"OpenTelemetry\\Tests\\Integration\\Config\\ComponentProvider\\Detector\\Os",
"OpenTelemetry\\Tests\\Integration\\Config\\ComponentProvider\\Metrics\\AggregationResolverExplicitBucketHistogram",
"OpenTelemetry\\Tests\\Integration\\Config\\ComponentProvider\\Metrics\\MetricExporterPrometheus",
"OpenTelemetry\\Tests\\Integration\\Config\\ComponentProvider\\Metrics\\MetricReaderPull",
Expand Down
32 changes: 32 additions & 0 deletions src/Config/SDK/ComponentProvider/Detector/Composer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace OpenTelemetry\Config\SDK\ComponentProvider\Detector;

use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
use OpenTelemetry\Config\SDK\Configuration\Context;
use OpenTelemetry\SDK\Resource\Detectors\Composer as ComposerDetector;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\NodeBuilder;

/**
* @implements ComponentProvider<ResourceDetectorInterface>
*/
final class Composer implements ComponentProvider
{
/**
* @param array{} $properties
*/
public function createPlugin(array $properties, Context $context): ResourceDetectorInterface
{
return new ComposerDetector();
}

public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
{
return $builder->arrayNode('composer');
}
}
32 changes: 32 additions & 0 deletions src/Config/SDK/ComponentProvider/Detector/Host.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace OpenTelemetry\Config\SDK\ComponentProvider\Detector;

use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
use OpenTelemetry\Config\SDK\Configuration\Context;
use OpenTelemetry\SDK\Resource\Detectors\Host as HostDetector;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\NodeBuilder;

/**
* @implements ComponentProvider<ResourceDetectorInterface>
*/
final class Host implements ComponentProvider
{
/**
* @param array{} $properties
*/
public function createPlugin(array $properties, Context $context): ResourceDetectorInterface
{
return new HostDetector();
}

public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
{
return $builder->arrayNode('host');
}
}
32 changes: 32 additions & 0 deletions src/Config/SDK/ComponentProvider/Detector/Process.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace OpenTelemetry\Config\SDK\ComponentProvider\Detector;

use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
use OpenTelemetry\Config\SDK\Configuration\Context;
use OpenTelemetry\SDK\Resource\Detectors\Process as ProcessDetector;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\NodeBuilder;

/**
* @implements ComponentProvider<ResourceDetectorInterface>
*/
final class Process implements ComponentProvider
{
/**
* @param array{} $properties
*/
public function createPlugin(array $properties, Context $context): ResourceDetectorInterface
{
return new ProcessDetector();
}

public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
{
return $builder->arrayNode('process');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace OpenTelemetry\Config\SDK\ComponentProvider\Logs;

use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
use OpenTelemetry\Config\SDK\Configuration\Context;
use OpenTelemetry\SDK\Logs\Exporter\InMemoryExporter;
use OpenTelemetry\SDK\Logs\LogRecordExporterInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\NodeBuilder;

/**
* @implements ComponentProvider<LogRecordExporterInterface>
*/
final class LogRecordExporterMemory implements ComponentProvider
{
/**
* @param array{} $properties
*/
public function createPlugin(array $properties, Context $context): LogRecordExporterInterface
{
return new InMemoryExporter();
}

public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
{
return $builder->arrayNode('memory/development');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public function createPlugin(array $properties, Context $context): LogRecordExpo

public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
{
$node = $builder->arrayNode('otlp_file');
$node = $builder->arrayNode('otlp_file/development');
$node
->children()
->scalarNode('output_stream')->defaultValue('stdout')->validate()->always(Validation::ensureString())->end()->end()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
* @implements ComponentProvider<LogRecordExporterInterface>
*/
#[PackageDependency('open-telemetry/exporter-otlp', '^1.0.5')]
#[PackageDependency('open-telemetry/transport-grpc', '^1')]

Check failure on line 27 in src/Config/SDK/ComponentProvider/Logs/LogRecordExporterOtlpGrpc.php

View workflow job for this annotation

GitHub Actions / php (8.5, true, --ignore-platform-reqs)

Attribute class Nevay\SPI\ServiceProviderDependency\PackageDependency is not repeatable but is already present above the class.

Check failure on line 27 in src/Config/SDK/ComponentProvider/Logs/LogRecordExporterOtlpGrpc.php

View workflow job for this annotation

GitHub Actions / php (8.5, true, --ignore-platform-reqs)

InvalidAttribute

src/Config/SDK/ComponentProvider/Logs/LogRecordExporterOtlpGrpc.php:27:3: InvalidAttribute: Attribute PackageDependency is not repeatable (see https://psalm.dev/242)
final class LogRecordExporterOtlpGrpc implements ComponentProvider
{
/**
* @param array{
* endpoint: string,
* certificate: ?string,
* client_key: ?string,
* client_certificate: ?string,
* certificate_file: ?string,
* client_key_file: ?string,
* client_certificate_file: ?string,
* headers: list<array{name: string, value: string}>,
* headers_list: ?string,
* compression: 'gzip'|null,
Expand All @@ -51,9 +51,9 @@
headers: $headers,
compression: $properties['compression'],
timeout: $properties['timeout'] / ClockInterface::MILLIS_PER_SECOND,
cacert: $properties['certificate'],
cert: $properties['client_certificate'],
key: $properties['client_certificate'],
cacert: $properties['certificate_file'],
cert: $properties['client_certificate_file'],
key: $properties['client_certificate_file'],
));
}

Expand All @@ -63,9 +63,9 @@
$node
->children()
->scalarNode('endpoint')->defaultValue('http://localhost:4317')->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('certificate')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_key')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_certificate')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('certificate_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_key_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_certificate_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->arrayNode('headers')
->arrayPrototype()
->children()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ final class LogRecordExporterOtlpHttp implements ComponentProvider
/**
* @param array{
* endpoint: string,
* certificate: ?string,
* client_key: ?string,
* client_certificate: ?string,
* certificate_file: ?string,
* client_key_file: ?string,
* client_certificate_file: ?string,
* headers: list<array{name: string, value: string}>,
* headers_list: ?string,
* compression: 'gzip'|null,
Expand All @@ -50,9 +50,9 @@ public function createPlugin(array $properties, Context $context): LogRecordExpo
headers: $headers,
compression: $properties['compression'],
timeout: $properties['timeout'] / ClockInterface::MILLIS_PER_SECOND,
cacert: $properties['certificate'],
cert: $properties['client_certificate'],
key: $properties['client_certificate'],
cacert: $properties['certificate_file'],
cert: $properties['client_certificate_file'],
key: $properties['client_certificate_file'],
));
}

Expand All @@ -63,9 +63,9 @@ public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $buil
->children()
->enumNode('encoding')->defaultValue('protobuf')->values(['protobuf', 'json'])->end()
->scalarNode('endpoint')->defaultValue('http://localhost:4318/v1/logs')->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('certificate')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_key')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_certificate')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('certificate_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_key_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_certificate_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->arrayNode('headers')
->arrayPrototype()
->children()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace OpenTelemetry\Config\SDK\ComponentProvider\Metrics;

use OpenTelemetry\Config\SDK\Configuration\ComponentProvider;
use OpenTelemetry\Config\SDK\Configuration\ComponentProviderRegistry;
use OpenTelemetry\Config\SDK\Configuration\Context;
use OpenTelemetry\SDK\Metrics\MetricExporter\InMemoryExporter;
use OpenTelemetry\SDK\Metrics\MetricExporterInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\NodeBuilder;

/**
* @implements ComponentProvider<MetricExporterInterface>
*/
final class MetricExporterMemory implements ComponentProvider
{
/**
* @param array{} $properties
*/
public function createPlugin(array $properties, Context $context): MetricExporterInterface
{
return new InMemoryExporter();
}

public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
{
return $builder->arrayNode('memory/development');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public function createPlugin(array $properties, Context $context): MetricExporte

public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
{
$node = $builder->arrayNode('otlp_file');
$node = $builder->arrayNode('otlp_file/development');
$node
->children()
->scalarNode('output_stream')->defaultValue('stdout')->validate()->always(Validation::ensureString())->end()->end()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@
* @implements ComponentProvider<MetricExporterInterface>
*/
#[PackageDependency('open-telemetry/exporter-otlp', '^1.0.5')]
#[PackageDependency('open-telemetry/transport-grpc', '^1')]

Check failure on line 28 in src/Config/SDK/ComponentProvider/Metrics/MetricExporterOtlpGrpc.php

View workflow job for this annotation

GitHub Actions / php (8.5, true, --ignore-platform-reqs)

Attribute class Nevay\SPI\ServiceProviderDependency\PackageDependency is not repeatable but is already present above the class.

Check failure on line 28 in src/Config/SDK/ComponentProvider/Metrics/MetricExporterOtlpGrpc.php

View workflow job for this annotation

GitHub Actions / php (8.5, true, --ignore-platform-reqs)

InvalidAttribute

src/Config/SDK/ComponentProvider/Metrics/MetricExporterOtlpGrpc.php:28:3: InvalidAttribute: Attribute PackageDependency is not repeatable (see https://psalm.dev/242)
final class MetricExporterOtlpGrpc implements ComponentProvider
{
/**
* @param array{
* endpoint: string,
* certificate: ?string,
* client_key: ?string,
* client_certificate: ?string,
* certificate_file: ?string,
* client_key_file: ?string,
* client_certificate_file: ?string,
* headers: list<array{name: string, value: string}>,
* headers_list: ?string,
* compression: 'gzip'|null,
Expand Down Expand Up @@ -61,9 +61,9 @@
headers: $headers,
compression: $properties['compression'],
timeout: $properties['timeout'] / ClockInterface::MILLIS_PER_SECOND,
cacert: $properties['certificate'],
cert: $properties['client_certificate'],
key: $properties['client_certificate'],
cacert: $properties['certificate_file'],
cert: $properties['client_certificate_file'],
key: $properties['client_certificate_file'],
), $temporality);
}

Expand All @@ -73,9 +73,9 @@
$node
->children()
->scalarNode('endpoint')->defaultValue('http://localhost:4317')->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('certificate')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_key')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_certificate')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('certificate_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_key_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->scalarNode('client_certificate_file')->defaultNull()->validate()->always(Validation::ensureString())->end()->end()
->arrayNode('headers')
->arrayPrototype()
->children()
Expand Down
Loading
Loading