feat(config): Add exporter customizers for declarative config (#6576)#8081
feat(config): Add exporter customizers for declarative config (#6576)#8081MikeGoldsmith wants to merge 12 commits intoopen-telemetry:mainfrom
Conversation
- Add SpanExporter/MetricExporter/LogRecordExporter customizers to DeclarativeConfigurationCustomizer - Customizers compose in SPI registration order - Apply in factories after component creation, before return - Null returns throw DeclarativeConfigException - Tests: factory unit tests, builder composition tests, integration tests
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #8081 +/- ##
=========================================
Coverage 90.32% 90.32%
- Complexity 7607 7617 +10
=========================================
Files 839 839
Lines 22888 22940 +52
Branches 2283 2289 +6
=========================================
+ Hits 20673 20721 +48
- Misses 1506 1508 +2
- Partials 709 711 +2 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
…nto mike/exporter-customizers-clean
jack-berg
left a comment
There was a problem hiding this comment.
I'm supportive of these customizers because even though we want to encourage modeling all properties that matter in the opentelemetry-configuration schema, it will never be possible to cover all cases (e.g. think the executor service used to eval async requests), and we'll want an escape hatch to leverage when a a property hasn't yet been modeled in declarative config but will be.
The exporters are a good place to start because there are known gaps in the what can be expressed in declarative config (i.e. authenticators).
Let's hold off modeling additional customizers (e.g. span processors, propagators, etc) until there are concrete requests by end users or distributions which require them.
.../main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java
Outdated
Show resolved
Hide resolved
.../io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCustomizer.java
Outdated
Show resolved
Hide resolved
Reduces noise of 3 separate setter calls for exporter customizers. Context stores builder ref and delegates customizer access. Note: Built using Claude Sonnet 4.5
…nto mike/exporter-customizers-clean
…nfig - Change customizer signature to use Class<T> for type-safe filtering - Add DeclarativeConfigProperties parameter for access to config - Consolidate type cast in ExporterCustomizer constructor - Handle null returns gracefully with logging instead of exception
…nto mike/exporter-customizers-clean
.../main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordExporterFactory.java
Outdated
Show resolved
Hide resolved
.../main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordExporterFactory.java
Show resolved
Hide resolved
...metry/sdk/extension/incubator/fileconfig/TestDeclarativeConfigurationCustomizerProvider.java
Outdated
Show resolved
Hide resolved
.../io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java
Outdated
Show resolved
Hide resolved
.../io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java
Outdated
Show resolved
Hide resolved
...c/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanExporterFactoryTest.java
Outdated
Show resolved
Hide resolved
...ava/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationBuilder.java
Outdated
Show resolved
Hide resolved
…ilder - Rename ExporterCustomizer -> Customizer (concept isn't exporter-specific) - Move null-check/type-check into Customizer.maybeCustomize(); throw DeclarativeConfigException if customizer returns null (fail-fast) - Add exporter customizer methods to DeclarativeConfigurationCustomizer interface and DeclarativeConfigurationBuilder - Add setBuilder/getBuilder to DeclarativeConfigContext; getBuilder uses requireNonNull (missing builder is a programming error) - Wire builder into DeclarativeConfiguration.create() and all three exporter factory classes Claude Sonnet 4.6 assisted with this change.
Each factory test now has four new cases: - create_Customizer: generic customizer applied to all exporters - create_Customizer_TypeSafe: type-specific customizer with builder access - create_Customizer_TypeMismatch: verifies customizer not called for wrong type - create_Customizer_ReturnsNull: verifies DeclarativeConfigException thrown Claude Sonnet 4.6 assisted with this change.
- Update file_format from 1.0-rc.1 to 1.0-rc.3 in create tests - Add context.setBuilder() to @beforeeach in all factory tests that indirectly call exporter factories (processor, reader, provider tests) Claude Sonnet 4.6 assisted with this change.
…nto mike/exporter-customizers-clean # Conflicts: # sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigContext.java
|
I think I've worked through all of your feedback @jack-berg, please take another look 😄 |
...test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MetricExporterFactoryTest.java
Show resolved
Hide resolved
Claude Sonnet 4.6 assisted with this change.
Summary
Adds exporter customizers to
DeclarativeConfigurationCustomizerfor programmatic customization ofSpanExporter,MetricExporter, andLogRecordExporterinstances created from declarative configuration.Fixes #6576
Changes
addSpanExporterCustomizer(),addMetricExporterCustomizer(),addLogRecordExporterCustomizer()toDeclarativeConfigurationCustomizermergeBiFunctionCustomizer()inDeclarativeConfigurationBuilder