From 020e719c3336bb31d09819e464c6de2111b718d2 Mon Sep 17 00:00:00 2001 From: Jack Berg <34418638+jack-berg@users.noreply.github.com> Date: Fri, 27 Feb 2026 15:07:16 -0600 Subject: [PATCH 1/4] Incubator build passing --- sdk-extensions/incubator/build.gradle.kts | 2 +- .../fileconfig/LoggerProviderFactory.java | 2 +- .../fileconfig/MeterProviderFactory.java | 2 +- .../fileconfig/TracerProviderFactory.java | 2 +- .../DeclarativeConfigurationParseTest.java | 837 ------------------ .../fileconfig/LoggerProviderFactoryTest.java | 4 +- .../fileconfig/MeterProviderFactoryTest.java | 4 +- .../fileconfig/MetricReaderFactoryTest.java | 4 +- .../fileconfig/TracerProviderFactoryTest.java | 4 +- 9 files changed, 12 insertions(+), 849 deletions(-) diff --git a/sdk-extensions/incubator/build.gradle.kts b/sdk-extensions/incubator/build.gradle.kts index cc1bd3e6d07..62f60b45335 100644 --- a/sdk-extensions/incubator/build.gradle.kts +++ b/sdk-extensions/incubator/build.gradle.kts @@ -57,7 +57,7 @@ dependencies { // 6. deleteJs2pTmp - delete tmp directory // ... proceed with normal sourcesJar, compileJava, etc -val configurationTag = "1.0.0-rc.3" +val configurationTag = "1.0.0" val configurationRef = "refs/tags/v$configurationTag" // Replace with commit SHA to point to experiment with a specific commit val configurationRepoZip = "https://github.com/open-telemetry/opentelemetry-configuration/archive/$configurationRef.zip" val buildDirectory = layout.buildDirectory.asFile.get() diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java index b206b4937a6..7c948fd8116 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactory.java @@ -103,7 +103,7 @@ private static class LoggerConfigFactory public LoggerConfig create( ExperimentalLoggerConfigModel model, DeclarativeConfigContext context) { LoggerConfigBuilder configBuilder = LoggerConfig.builder(); - if (model.getDisabled() != null && model.getDisabled()) { + if (model.getEnabled() != null && !model.getEnabled()) { configBuilder.setEnabled(false); } if (model.getTraceBased() != null && model.getTraceBased()) { diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java index 2156fa2bba7..25d365ab866 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactory.java @@ -112,7 +112,7 @@ private static class MeterConfigFactory @Override public MeterConfig create( ExperimentalMeterConfigModel model, DeclarativeConfigContext context) { - if (model.getDisabled() != null && model.getDisabled()) { + if (model.getEnabled() != null && !model.getEnabled()) { return MeterConfig.disabled(); } return MeterConfig.defaultConfig(); diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java index 6fcf4034609..59fcfa4ab27 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactory.java @@ -104,7 +104,7 @@ private static class TracerConfigFactory @Override public TracerConfig create( ExperimentalTracerConfigModel model, DeclarativeConfigContext context) { - if (model.getDisabled() != null && model.getDisabled()) { + if (model.getEnabled() != null && !model.getEnabled()) { return TracerConfig.disabled(); } return TracerConfig.defaultConfig(); diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java index f256b9ca466..289e06200bc 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java @@ -10,101 +10,18 @@ import io.opentelemetry.api.incubator.config.DeclarativeConfigException; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AggregationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AlwaysOffSamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AlwaysOnSamplerModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeLimitsModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AttributeNameValueModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.B3MultiPropagatorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.B3PropagatorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BaggagePropagatorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.CardinalityLimitsModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ConsoleExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ConsoleMetricExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.DistributionModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.DistributionPropertyModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableAlwaysOffSamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableAlwaysOnSamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableProbabilitySamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableRuleBasedSamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableRuleBasedSamplerRuleAttributePatternsModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableRuleBasedSamplerRuleAttributeValuesModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableRuleBasedSamplerRuleModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalComposableSamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalContainerResourceDetectorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalGeneralInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalHostResourceDetectorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalHttpClientInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalHttpInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalHttpServerInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationPropertyModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLoggerConfigModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLoggerConfiguratorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLoggerMatcherAndConfigModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalMeterConfigModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalMeterConfiguratorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalMeterMatcherAndConfigModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalOtlpFileExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalOtlpFileMetricExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalPeerInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalPeerServiceMappingModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalProbabilitySamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalProcessResourceDetectorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalPrometheusMetricExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalResourceDetectionModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalResourceDetectorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalServiceResourceDetectorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalSpanParent; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalTracerConfigModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalTracerConfiguratorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalTracerMatcherAndConfigModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExplicitBucketHistogramAggregationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.GrpcTlsModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.HttpTlsModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.IncludeExcludeModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.JaegerPropagatorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordLimitsModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProviderModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MeterProviderModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricProducerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricReaderModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.NameStringValuePairModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenCensusMetricProducerModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTracingPropagatorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpGrpcExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpGrpcMetricExporterModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpHttpExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpHttpMetricExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ParentBasedSamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PeriodicMetricReaderModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PropagatorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PullMetricExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PullMetricReaderModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PushMetricExporterModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ResourceModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SamplerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleLogRecordProcessorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleSpanProcessorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanExporterModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanKind; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanLimitsModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TextMapPropagatorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TraceContextPropagatorModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TraceIdRatioBasedSamplerModel; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ViewModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ViewSelectorModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ViewStreamModel; import java.io.ByteArrayInputStream; -import java.io.FileInputStream; -import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.AbstractMap; import java.util.Arrays; @@ -131,760 +48,6 @@ void parse_BadInputStream() { .hasMessage("Unable to parse configuration input stream"); } - @Test - void parse_KitchenSinkExampleFile() throws IOException { - OpenTelemetryConfigurationModel expected = new OpenTelemetryConfigurationModel(); - - expected.withFileFormat("1.0-rc.3"); - expected.withDisabled(false); - expected.withLogLevel(OpenTelemetryConfigurationModel.SeverityNumber.INFO); - - // General config - ResourceModel resource = - new ResourceModel() - .withAttributes( - Arrays.asList( - new AttributeNameValueModel() - .withName("service.name") - .withValue("unknown_service"), - new AttributeNameValueModel() - .withName("string_key") - .withValue("value") - .withType(AttributeNameValueModel.AttributeType.STRING), - new AttributeNameValueModel() - .withName("bool_key") - .withValue(true) - .withType(AttributeNameValueModel.AttributeType.BOOL), - new AttributeNameValueModel() - .withName("int_key") - .withValue(1) - .withType(AttributeNameValueModel.AttributeType.INT), - new AttributeNameValueModel() - .withName("double_key") - .withValue(1.1) - .withType(AttributeNameValueModel.AttributeType.DOUBLE), - new AttributeNameValueModel() - .withName("string_array_key") - .withValue(Arrays.asList("value1", "value2")) - .withType(AttributeNameValueModel.AttributeType.STRING_ARRAY), - new AttributeNameValueModel() - .withName("bool_array_key") - .withValue(Arrays.asList(true, false)) - .withType(AttributeNameValueModel.AttributeType.BOOL_ARRAY), - new AttributeNameValueModel() - .withName("int_array_key") - .withValue(Arrays.asList(1, 2)) - .withType(AttributeNameValueModel.AttributeType.INT_ARRAY), - new AttributeNameValueModel() - .withName("double_array_key") - .withValue(Arrays.asList(1.1, 2.2)) - .withType(AttributeNameValueModel.AttributeType.DOUBLE_ARRAY))) - .withAttributesList("service.namespace=my-namespace,service.version=1.0.0") - .withDetectionDevelopment( - new ExperimentalResourceDetectionModel() - .withAttributes( - new IncludeExcludeModel() - .withIncluded(Collections.singletonList("process.*")) - .withExcluded(Collections.singletonList("process.command_args"))) - .withDetectors( - Arrays.asList( - new ExperimentalResourceDetectorModel() - .withContainer(new ExperimentalContainerResourceDetectorModel()), - new ExperimentalResourceDetectorModel() - .withHost(new ExperimentalHostResourceDetectorModel()), - new ExperimentalResourceDetectorModel() - .withProcess(new ExperimentalProcessResourceDetectorModel()), - new ExperimentalResourceDetectorModel() - .withService(new ExperimentalServiceResourceDetectorModel())))) - .withSchemaUrl("https://opentelemetry.io/schemas/1.16.0"); - expected.withResource(resource); - - AttributeLimitsModel attributeLimits = - new AttributeLimitsModel().withAttributeValueLengthLimit(4096).withAttributeCountLimit(128); - expected.withAttributeLimits(attributeLimits); - - PropagatorModel propagator = - new PropagatorModel() - .withComposite( - Arrays.asList( - new TextMapPropagatorModel() - .withTracecontext(new TraceContextPropagatorModel()), - new TextMapPropagatorModel().withBaggage(new BaggagePropagatorModel()), - new TextMapPropagatorModel().withB3(new B3PropagatorModel()), - new TextMapPropagatorModel().withB3multi(new B3MultiPropagatorModel()), - new TextMapPropagatorModel().withJaeger(new JaegerPropagatorModel()), - new TextMapPropagatorModel().withOttrace(new OpenTracingPropagatorModel()))) - .withCompositeList("tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray"); - expected.withPropagator(propagator); - - // TracerProvider config - TracerProviderModel tracerProvider = new TracerProviderModel(); - - SpanLimitsModel spanLimits = - new SpanLimitsModel() - .withAttributeValueLengthLimit(4096) - .withAttributeCountLimit(128) - .withEventCountLimit(128) - .withLinkCountLimit(128) - .withEventAttributeCountLimit(128) - .withLinkAttributeCountLimit(128); - tracerProvider.withLimits(spanLimits); - - SamplerModel sampler = - new SamplerModel() - .withParentBased( - new ParentBasedSamplerModel() - .withRoot( - new SamplerModel() - .withTraceIdRatioBased( - new TraceIdRatioBasedSamplerModel().withRatio(0.0001))) - .withRemoteParentSampled( - new SamplerModel().withAlwaysOn(new AlwaysOnSamplerModel())) - .withRemoteParentNotSampled( - new SamplerModel() - .withProbabilityDevelopment( - new ExperimentalProbabilitySamplerModel().withRatio(0.01))) - .withLocalParentSampled( - new SamplerModel() - .withCompositeDevelopment( - new ExperimentalComposableSamplerModel() - .withRuleBased( - new ExperimentalComposableRuleBasedSamplerModel() - .withRules( - Arrays.asList( - new ExperimentalComposableRuleBasedSamplerRuleModel() - .withAttributeValues( - new ExperimentalComposableRuleBasedSamplerRuleAttributeValuesModel() - .withKey("http.route") - .withValues( - Arrays.asList( - "/healthz", "/livez"))) - .withSampler( - new ExperimentalComposableSamplerModel() - .withAlwaysOff( - new ExperimentalComposableAlwaysOffSamplerModel())), - new ExperimentalComposableRuleBasedSamplerRuleModel() - .withAttributePatterns( - new ExperimentalComposableRuleBasedSamplerRuleAttributePatternsModel() - .withKey("http.path") - .withIncluded( - Collections.singletonList( - "/internal/*")) - .withExcluded( - Collections.singletonList( - "/internal/special/*"))) - .withSampler( - new ExperimentalComposableSamplerModel() - .withAlwaysOn( - new ExperimentalComposableAlwaysOnSamplerModel())), - new ExperimentalComposableRuleBasedSamplerRuleModel() - .withParent( - Collections.singletonList( - ExperimentalSpanParent.NONE)) - .withSpanKinds( - Collections.singletonList( - SpanKind.CLIENT)) - .withSampler( - new ExperimentalComposableSamplerModel() - .withProbability( - new ExperimentalComposableProbabilitySamplerModel() - .withRatio(0.05))), - new ExperimentalComposableRuleBasedSamplerRuleModel() - .withSampler( - new ExperimentalComposableSamplerModel() - .withProbability( - new ExperimentalComposableProbabilitySamplerModel() - .withRatio(0.001)))))))) - .withLocalParentNotSampled( - new SamplerModel().withAlwaysOff(new AlwaysOffSamplerModel()))); - tracerProvider.withSampler(sampler); - - ExperimentalTracerConfiguratorModel tracerConfigurator = - new ExperimentalTracerConfiguratorModel() - .withDefaultConfig(new ExperimentalTracerConfigModel().withDisabled(true)) - .withTracers( - Collections.singletonList( - new ExperimentalTracerMatcherAndConfigModel() - .withName("io.opentelemetry.contrib.*") - .withConfig(new ExperimentalTracerConfigModel().withDisabled(false)))); - tracerProvider.withTracerConfiguratorDevelopment(tracerConfigurator); - - SpanProcessorModel spanProcessor1 = - new SpanProcessorModel() - .withBatch( - new BatchSpanProcessorModel() - .withScheduleDelay(5_000) - .withExportTimeout(30_000) - .withMaxQueueSize(2048) - .withMaxExportBatchSize(512) - .withExporter( - new SpanExporterModel() - .withOtlpHttp( - new OtlpHttpExporterModel() - .withEndpoint("http://localhost:4318/v1/traces") - .withTls( - new HttpTlsModel() - .withCaFile("/app/cert.pem") - .withKeyFile("/app/cert.pem") - .withCertFile("/app/cert.pem")) - .withHeaders( - Collections.singletonList( - new NameStringValuePairModel() - .withName("api-key") - .withValue("1234"))) - .withHeadersList("api-key=1234") - .withCompression("gzip") - .withTimeout(10_000) - .withEncoding( - OtlpHttpExporterModel.OtlpHttpEncoding.PROTOBUF)))); - SpanProcessorModel spanProcessor2 = - new SpanProcessorModel() - .withBatch( - new BatchSpanProcessorModel() - .withExporter( - new SpanExporterModel() - .withOtlpGrpc( - new OtlpGrpcExporterModel() - .withEndpoint("http://localhost:4317") - .withTls( - new GrpcTlsModel() - .withCaFile("/app/cert.pem") - .withKeyFile("/app/cert.pem") - .withCertFile("/app/cert.pem") - .withInsecure(false)) - .withHeaders( - Collections.singletonList( - new NameStringValuePairModel() - .withName("api-key") - .withValue("1234"))) - .withHeadersList("api-key=1234") - .withCompression("gzip") - .withTimeout(10_000)))); - SpanProcessorModel spanProcessor3 = - new SpanProcessorModel() - .withBatch( - new BatchSpanProcessorModel() - .withExporter( - new SpanExporterModel() - .withOtlpFileDevelopment( - new ExperimentalOtlpFileExporterModel() - .withOutputStream("file:///var/log/traces.jsonl")))); - SpanProcessorModel spanProcessor4 = - new SpanProcessorModel() - .withBatch( - new BatchSpanProcessorModel() - .withExporter( - new SpanExporterModel() - .withOtlpFileDevelopment( - new ExperimentalOtlpFileExporterModel() - .withOutputStream("stdout")))); - SpanProcessorModel spanProcessor5 = - new SpanProcessorModel() - .withSimple( - new SimpleSpanProcessorModel() - .withExporter(new SpanExporterModel().withConsole(new ConsoleExporterModel()))); - tracerProvider.withProcessors( - Arrays.asList( - spanProcessor1, spanProcessor2, spanProcessor3, spanProcessor4, spanProcessor5)); - - expected.withTracerProvider(tracerProvider); - // end TracerProvider config - - // LoggerProvider config - LoggerProviderModel loggerProvider = new LoggerProviderModel(); - - LogRecordLimitsModel logRecordLimits = - new LogRecordLimitsModel().withAttributeValueLengthLimit(4096).withAttributeCountLimit(128); - loggerProvider.withLimits(logRecordLimits); - - ExperimentalLoggerConfiguratorModel loggerConfigurator = - new ExperimentalLoggerConfiguratorModel() - .withDefaultConfig(new ExperimentalLoggerConfigModel().withDisabled(true)) - .withLoggers( - Collections.singletonList( - new ExperimentalLoggerMatcherAndConfigModel() - .withName("io.opentelemetry.contrib.*") - .withConfig( - new ExperimentalLoggerConfigModel() - .withDisabled(false) - .withMinimumSeverity( - // TODO: SeverityNumber should not be nested - OpenTelemetryConfigurationModel.SeverityNumber.INFO) - .withTraceBased(true)))); - loggerProvider.withLoggerConfiguratorDevelopment(loggerConfigurator); - - LogRecordProcessorModel logRecordProcessor1 = - new LogRecordProcessorModel() - .withBatch( - new BatchLogRecordProcessorModel() - .withScheduleDelay(5_000) - .withExportTimeout(30_000) - .withMaxQueueSize(2048) - .withMaxExportBatchSize(512) - .withExporter( - new LogRecordExporterModel() - .withOtlpHttp( - new OtlpHttpExporterModel() - .withEndpoint("http://localhost:4318/v1/logs") - .withTls( - new HttpTlsModel() - .withCaFile("/app/cert.pem") - .withKeyFile("/app/cert.pem") - .withCertFile("/app/cert.pem")) - .withHeaders( - Collections.singletonList( - new NameStringValuePairModel() - .withName("api-key") - .withValue("1234"))) - .withHeadersList("api-key=1234") - .withCompression("gzip") - .withTimeout(10_000) - .withEncoding( - OtlpHttpExporterModel.OtlpHttpEncoding.PROTOBUF)))); - LogRecordProcessorModel logRecordProcessor2 = - new LogRecordProcessorModel() - .withBatch( - new BatchLogRecordProcessorModel() - .withExporter( - new LogRecordExporterModel() - .withOtlpGrpc( - new OtlpGrpcExporterModel() - .withEndpoint("http://localhost:4317") - .withTls( - new GrpcTlsModel() - .withCaFile("/app/cert.pem") - .withKeyFile("/app/cert.pem") - .withCertFile("/app/cert.pem") - .withInsecure(false)) - .withHeaders( - Collections.singletonList( - new NameStringValuePairModel() - .withName("api-key") - .withValue("1234"))) - .withHeadersList("api-key=1234") - .withCompression("gzip") - .withTimeout(10_000)))); - LogRecordProcessorModel logRecordProcessor3 = - new LogRecordProcessorModel() - .withBatch( - new BatchLogRecordProcessorModel() - .withExporter( - new LogRecordExporterModel() - .withOtlpFileDevelopment( - new ExperimentalOtlpFileExporterModel() - .withOutputStream("file:///var/log/logs.jsonl")))); - LogRecordProcessorModel logRecordProcessor4 = - new LogRecordProcessorModel() - .withBatch( - new BatchLogRecordProcessorModel() - .withExporter( - new LogRecordExporterModel() - .withOtlpFileDevelopment( - new ExperimentalOtlpFileExporterModel() - .withOutputStream("stdout")))); - LogRecordProcessorModel logRecordProcessor5 = - new LogRecordProcessorModel() - .withSimple( - new SimpleLogRecordProcessorModel() - .withExporter( - new LogRecordExporterModel().withConsole(new ConsoleExporterModel()))); - loggerProvider.withProcessors( - Arrays.asList( - logRecordProcessor1, - logRecordProcessor2, - logRecordProcessor3, - logRecordProcessor4, - logRecordProcessor5)); - - expected.withLoggerProvider(loggerProvider); - // end LoggerProvider config - - // MeterProvider config - MeterProviderModel meterProvider = new MeterProviderModel(); - - MetricReaderModel metricReader1 = - new MetricReaderModel() - .withPull( - new PullMetricReaderModel() - .withExporter( - new PullMetricExporterModel() - .withPrometheusDevelopment( - new ExperimentalPrometheusMetricExporterModel() - .withHost("localhost") - .withPort(9464) - .withWithoutScopeInfo(false) - .withWithoutTargetInfo(false) - .withWithResourceConstantLabels( - new IncludeExcludeModel() - .withIncluded(Collections.singletonList("service*")) - .withExcluded( - Collections.singletonList("service.attr1"))) - .withTranslationStrategy( - ExperimentalPrometheusMetricExporterModel - .ExperimentalPrometheusTranslationStrategy - .UNDERSCORE_ESCAPING_WITH_SUFFIXES))) - .withProducers( - Collections.singletonList( - new MetricProducerModel() - .withOpencensus(new OpenCensusMetricProducerModel()))) - .withCardinalityLimits( - new CardinalityLimitsModel() - .withDefault(2000) - .withCounter(2000) - .withGauge(2000) - .withHistogram(2000) - .withObservableCounter(2000) - .withObservableGauge(2000) - .withObservableUpDownCounter(2000) - .withUpDownCounter(2000))); - MetricReaderModel metricReader2 = - new MetricReaderModel() - .withPeriodic( - new PeriodicMetricReaderModel() - .withInterval(60_000) - .withTimeout(30_000) - .withExporter( - new PushMetricExporterModel() - .withOtlpHttp( - new OtlpHttpMetricExporterModel() - .withEndpoint("http://localhost:4318/v1/metrics") - .withTls( - new HttpTlsModel() - .withCaFile("/app/cert.pem") - .withKeyFile("/app/cert.pem") - .withCertFile("/app/cert.pem")) - .withHeaders( - Collections.singletonList( - new NameStringValuePairModel() - .withName("api-key") - .withValue("1234"))) - .withHeadersList("api-key=1234") - .withCompression("gzip") - .withTimeout(10_000) - .withEncoding(OtlpHttpExporterModel.OtlpHttpEncoding.PROTOBUF) - .withTemporalityPreference( - OtlpHttpMetricExporterModel.ExporterTemporalityPreference - .DELTA) - .withDefaultHistogramAggregation( - OtlpHttpMetricExporterModel - .ExporterDefaultHistogramAggregation - .BASE_2_EXPONENTIAL_BUCKET_HISTOGRAM))) - .withProducers( - Collections.singletonList( - new MetricProducerModel() - .withOpencensus(new OpenCensusMetricProducerModel()))) - .withCardinalityLimits( - new CardinalityLimitsModel() - .withDefault(2000) - .withCounter(2000) - .withGauge(2000) - .withHistogram(2000) - .withObservableCounter(2000) - .withObservableGauge(2000) - .withObservableUpDownCounter(2000) - .withUpDownCounter(2000))); - MetricReaderModel metricReader3 = - new MetricReaderModel() - .withPeriodic( - new PeriodicMetricReaderModel() - .withExporter( - new PushMetricExporterModel() - .withOtlpGrpc( - new OtlpGrpcMetricExporterModel() - .withEndpoint("http://localhost:4317") - .withTls( - new GrpcTlsModel() - .withCaFile("/app/cert.pem") - .withKeyFile("/app/cert.pem") - .withCertFile("/app/cert.pem") - .withInsecure(false)) - .withHeaders( - Collections.singletonList( - new NameStringValuePairModel() - .withName("api-key") - .withValue("1234"))) - .withHeadersList("api-key=1234") - .withCompression("gzip") - .withTimeout(10_000) - .withTemporalityPreference( - OtlpHttpMetricExporterModel.ExporterTemporalityPreference - .DELTA) - .withDefaultHistogramAggregation( - OtlpHttpMetricExporterModel - .ExporterDefaultHistogramAggregation - .BASE_2_EXPONENTIAL_BUCKET_HISTOGRAM)))); - MetricReaderModel metricReader4 = - new MetricReaderModel() - .withPeriodic( - new PeriodicMetricReaderModel() - .withExporter( - new PushMetricExporterModel() - .withOtlpFileDevelopment( - new ExperimentalOtlpFileMetricExporterModel() - .withOutputStream("file:///var/log/metrics.jsonl") - .withTemporalityPreference( - OtlpHttpMetricExporterModel.ExporterTemporalityPreference - .DELTA) - .withDefaultHistogramAggregation( - OtlpHttpMetricExporterModel - .ExporterDefaultHistogramAggregation - .BASE_2_EXPONENTIAL_BUCKET_HISTOGRAM)))); - MetricReaderModel metricReader5 = - new MetricReaderModel() - .withPeriodic( - new PeriodicMetricReaderModel() - .withExporter( - new PushMetricExporterModel() - .withOtlpFileDevelopment( - new ExperimentalOtlpFileMetricExporterModel() - .withOutputStream("stdout") - .withTemporalityPreference( - OtlpHttpMetricExporterModel.ExporterTemporalityPreference - .DELTA) - .withDefaultHistogramAggregation( - OtlpHttpMetricExporterModel - .ExporterDefaultHistogramAggregation - .BASE_2_EXPONENTIAL_BUCKET_HISTOGRAM)))); - MetricReaderModel metricReader6 = - new MetricReaderModel() - .withPeriodic( - new PeriodicMetricReaderModel() - .withExporter( - new PushMetricExporterModel() - .withConsole( - new ConsoleMetricExporterModel() - .withTemporalityPreference( - OtlpHttpMetricExporterModel.ExporterTemporalityPreference - .DELTA) - .withDefaultHistogramAggregation( - OtlpHttpMetricExporterModel - .ExporterDefaultHistogramAggregation - .BASE_2_EXPONENTIAL_BUCKET_HISTOGRAM)))); - meterProvider.withReaders( - Arrays.asList( - metricReader1, - metricReader2, - metricReader3, - metricReader4, - metricReader5, - metricReader6)); - - ViewModel view = - new ViewModel() - .withSelector( - new ViewSelectorModel() - .withInstrumentName("my-instrument") - .withInstrumentType(ViewSelectorModel.InstrumentType.HISTOGRAM) - .withUnit("ms") - .withMeterName("my-meter") - .withMeterVersion("1.0.0") - .withMeterSchemaUrl("https://opentelemetry.io/schemas/1.16.0")) - .withStream( - new ViewStreamModel() - .withName("new_instrument_name") - .withDescription("new_description") - .withAggregation( - new AggregationModel() - .withExplicitBucketHistogram( - new ExplicitBucketHistogramAggregationModel() - .withBoundaries( - Arrays.asList( - 0.0, 5.0, 10.0, 25.0, 50.0, 75.0, 100.0, 250.0, 500.0, - 750.0, 1000.0, 2500.0, 5000.0, 7500.0, 10000.0)) - .withRecordMinMax(true))) - .withAggregationCardinalityLimit(2000) - .withAttributeKeys( - new IncludeExcludeModel() - .withIncluded(Arrays.asList("key1", "key2")) - .withExcluded(Collections.singletonList("key3")))); - meterProvider.withViews(Collections.singletonList(view)); - meterProvider.withExemplarFilter(MeterProviderModel.ExemplarFilter.TRACE_BASED); - - ExperimentalMeterConfiguratorModel meterConfigurator = - new ExperimentalMeterConfiguratorModel() - .withDefaultConfig(new ExperimentalMeterConfigModel().withDisabled(true)) - .withMeters( - Collections.singletonList( - new ExperimentalMeterMatcherAndConfigModel() - .withName("io.opentelemetry.contrib.*") - .withConfig(new ExperimentalMeterConfigModel().withDisabled(false)))); - meterProvider.withMeterConfiguratorDevelopment(meterConfigurator); - - expected.withMeterProvider(meterProvider); - // end MeterProvider config - - // start instrumentation config - ExperimentalInstrumentationModel instrumentation = - new ExperimentalInstrumentationModel() - .withGeneral( - new ExperimentalGeneralInstrumentationModel() - .withPeer( - new ExperimentalPeerInstrumentationModel() - .withServiceMapping( - Arrays.asList( - new ExperimentalPeerServiceMappingModel() - .withPeer("1.2.3.4") - .withService("FooService"), - new ExperimentalPeerServiceMappingModel() - .withPeer("2.3.4.5") - .withService("BarService")))) - .withHttp( - new ExperimentalHttpInstrumentationModel() - .withClient( - new ExperimentalHttpClientInstrumentationModel() - .withRequestCapturedHeaders( - Arrays.asList("Content-Type", "Accept")) - .withResponseCapturedHeaders( - Arrays.asList("Content-Type", "Content-Encoding"))) - .withServer( - new ExperimentalHttpServerInstrumentationModel() - .withRequestCapturedHeaders( - Arrays.asList("Content-Type", "Accept")) - .withResponseCapturedHeaders( - Arrays.asList("Content-Type", "Content-Encoding"))))) - .withCpp( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withDotnet( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withErlang( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withGo( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withJava( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withJs( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withPhp( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withPython( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withRuby( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withRust( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))) - .withSwift( - new ExperimentalLanguageSpecificInstrumentationModel() - .withAdditionalProperty( - "example", - new ExperimentalLanguageSpecificInstrumentationPropertyModel() - .withAdditionalProperty("property", "value"))); - expected.withInstrumentationDevelopment(instrumentation); - // end instrumentation config - - DistributionModel distribution = - new DistributionModel() - .withAdditionalProperty( - "example", - new DistributionPropertyModel().withAdditionalProperty("property", "value")); - expected.withDistribution(distribution); - - try (FileInputStream configExampleFile = - new FileInputStream(System.getenv("CONFIG_EXAMPLE_DIR") + "/kitchen-sink.yaml")) { - OpenTelemetryConfigurationModel config = DeclarativeConfiguration.parse(configExampleFile); - - // General config - assertThat(config.getFileFormat()).isEqualTo("1.0-rc.3"); - assertThat(config.getResource()).isEqualTo(resource); - assertThat(config.getAttributeLimits()).isEqualTo(attributeLimits); - assertThat(config.getPropagator()).isEqualTo(propagator); - - // TracerProvider config - TracerProviderModel configTracerProvider = config.getTracerProvider(); - assertThat(configTracerProvider.getLimits()).isEqualTo(spanLimits); - assertThat(configTracerProvider.getSampler()).isEqualTo(sampler); - assertThat(configTracerProvider.getTracerConfiguratorDevelopment()) - .isEqualTo(tracerConfigurator); - assertThat(configTracerProvider.getProcessors()) - .isEqualTo( - Arrays.asList( - spanProcessor1, spanProcessor2, spanProcessor3, spanProcessor4, spanProcessor5)); - assertThat(configTracerProvider).isEqualTo(tracerProvider); - - // LoggerProvider config - LoggerProviderModel configLoggerProvider = config.getLoggerProvider(); - assertThat(configLoggerProvider.getLimits()).isEqualTo(logRecordLimits); - assertThat(configLoggerProvider.getLoggerConfiguratorDevelopment()) - .isEqualTo(loggerConfigurator); - assertThat(configLoggerProvider.getProcessors()) - .isEqualTo( - Arrays.asList( - logRecordProcessor1, - logRecordProcessor2, - logRecordProcessor3, - logRecordProcessor4, - logRecordProcessor5)); - assertThat(configLoggerProvider).isEqualTo(loggerProvider); - - // MeterProvider config - MeterProviderModel configMeterProvider = config.getMeterProvider(); - assertThat(configMeterProvider.getReaders()) - .isEqualTo( - Arrays.asList( - metricReader1, - metricReader2, - metricReader3, - metricReader4, - metricReader5, - metricReader6)); - assertThat(configMeterProvider.getViews()).isEqualTo(Collections.singletonList(view)); - assertThat(configMeterProvider.getMeterConfiguratorDevelopment()) - .isEqualTo(meterConfigurator); - assertThat(configMeterProvider).isEqualTo(meterProvider); - - // Instrumentation config - ExperimentalInstrumentationModel configInstrumentation = - config.getInstrumentationDevelopment(); - assertThat(configInstrumentation).isEqualTo(instrumentation); - - // Distribution config - DistributionModel configDistribution = config.getDistribution(); - assertThat(configDistribution).isEqualTo(distribution); - - // All configuration - assertThat(config).isEqualTo(expected); - } - } - @Test void parse_nullValuesParsedToEmptyObjects() { String objectPlaceholderString = diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java index 1fa93f1d0cd..d033c485e40 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LoggerProviderFactoryTest.java @@ -94,14 +94,14 @@ private static Stream createArguments() { .withLoggerConfiguratorDevelopment( new ExperimentalLoggerConfiguratorModel() .withDefaultConfig( - new ExperimentalLoggerConfigModel().withDisabled(true)) + new ExperimentalLoggerConfigModel().withEnabled(false)) .withLoggers( Collections.singletonList( new ExperimentalLoggerMatcherAndConfigModel() .withName("foo") .withConfig( new ExperimentalLoggerConfigModel() - .withDisabled(false) + .withEnabled(true) .withTraceBased(true) .withMinimumSeverity(SeverityNumber.INFO)))))), setLoggerConfigurator( diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java index 98dca51b32e..46a49b68dae 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MeterProviderFactoryTest.java @@ -91,13 +91,13 @@ private static Stream createArguments() { .withAttributeKeys(null)))) .withMeterConfiguratorDevelopment( new ExperimentalMeterConfiguratorModel() - .withDefaultConfig(new ExperimentalMeterConfigModel().withDisabled(true)) + .withDefaultConfig(new ExperimentalMeterConfigModel().withEnabled(false)) .withMeters( Collections.singletonList( new ExperimentalMeterMatcherAndConfigModel() .withName("foo") .withConfig( - new ExperimentalMeterConfigModel().withDisabled(false))))) + new ExperimentalMeterConfigModel().withEnabled(true))))) .withExemplarFilter(MeterProviderModel.ExemplarFilter.ALWAYS_ON), setMeterConfigurator( SdkMeterProvider.builder(), diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MetricReaderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MetricReaderFactoryTest.java index 6df217bf937..a34c3510df4 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MetricReaderFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MetricReaderFactoryTest.java @@ -194,11 +194,11 @@ void create_PullPrometheusConfigured() throws IOException { .withIncluded(singletonList("foo")) .withExcluded(singletonList("bar"))) .withWithoutScopeInfo(false) - .withWithoutTargetInfo(false) + .withWithoutTargetInfoDevelopment(false) .withTranslationStrategy( ExperimentalPrometheusMetricExporterModel .ExperimentalPrometheusTranslationStrategy - .UNDERSCORE_ESCAPING_WITHOUT_SUFFIXES)))), + .UNDERSCORE_ESCAPING_WITHOUT_SUFFIXES_DEVELOPMENT)))), context); MetricReader reader = readerAndCardinalityLimits.getMetricReader(); cleanup.addCloseable(reader); diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java index a93c030aa7b..4a680dd91cc 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TracerProviderFactoryTest.java @@ -101,14 +101,14 @@ private static Stream createArguments() { .withTracerConfiguratorDevelopment( new ExperimentalTracerConfiguratorModel() .withDefaultConfig( - new ExperimentalTracerConfigModel().withDisabled(true)) + new ExperimentalTracerConfigModel().withEnabled(false)) .withTracers( Collections.singletonList( new ExperimentalTracerMatcherAndConfigModel() .withName("foo") .withConfig( new ExperimentalTracerConfigModel() - .withDisabled(false)))))), + .withEnabled(true)))))), addTracerConfigurator( SdkTracerProvider.builder(), ScopeConfigurator.builder() From 30b999cb6b4770e595e6925d50ce54810d2f6c42 Mon Sep 17 00:00:00 2001 From: Jack Berg <34418638+jack-berg@users.noreply.github.com> Date: Fri, 27 Feb 2026 15:22:53 -0600 Subject: [PATCH 2/4] Update refs to file format --- .../graal/IncubatingApiTests.java | 2 +- .../DeclarativeConfigurationTest.java | 2 +- .../TestDeclarativeConfigurationProvider.java | 2 +- .../DeclarativeConfigurationTest.java | 4 ++-- .../autoconfigure/FullDeclarativeConfigTest.java | 2 +- .../OpenTelemetryConfigurationFactory.java | 2 +- .../DeclarativeConfigurationCreateTest.java | 11 +++-------- .../DeclarativeConfigurationParseTest.java | 16 ++++++++-------- .../OpenTelemetryConfigurationFactoryTest.java | 12 ++++++------ .../YamlDeclarativeConfigPropertiesTest.java | 4 ++-- 10 files changed, 26 insertions(+), 31 deletions(-) diff --git a/integration-tests/graal-incubating/src/test/java/io/opentelemetry/integrationtests/graal/IncubatingApiTests.java b/integration-tests/graal-incubating/src/test/java/io/opentelemetry/integrationtests/graal/IncubatingApiTests.java index 607d8093055..209234af3d2 100644 --- a/integration-tests/graal-incubating/src/test/java/io/opentelemetry/integrationtests/graal/IncubatingApiTests.java +++ b/integration-tests/graal-incubating/src/test/java/io/opentelemetry/integrationtests/graal/IncubatingApiTests.java @@ -109,7 +109,7 @@ void parseDeclarativeConfiguration() { // make sure to test enums too: "instrument_type: histogram" String string = """ - file_format: "1.0-rc.1" + file_format: "1.0" tracer_provider: processors: - batch: diff --git a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index c5e6c15066d..ecd0bd97094 100644 --- a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -23,7 +23,7 @@ class DeclarativeConfigurationTest { @Test void configFile(@TempDir Path tempDir) throws IOException { String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "resource:\n" + " attributes:\n" + " - name: service.name\n" diff --git a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestDeclarativeConfigurationProvider.java b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestDeclarativeConfigurationProvider.java index cc1bb6a240c..d00649f6c94 100644 --- a/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestDeclarativeConfigurationProvider.java +++ b/sdk-extensions/autoconfigure/src/testDeclarativeConfigSpi/java/io/opentelemetry/sdk/autoconfigure/TestDeclarativeConfigurationProvider.java @@ -15,7 +15,7 @@ public class TestDeclarativeConfigurationProvider implements DeclarativeConfigur @Override public OpenTelemetryConfigurationModel getConfigurationModel() { String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "resource:\n" + " detection/development:\n" + " detectors:\n" diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 3081ca9cff7..52f11040235 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -61,7 +61,7 @@ class DeclarativeConfigurationTest { @BeforeEach void setup() throws IOException { String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "resource:\n" + " attributes:\n" + " - name: service.name\n" @@ -185,7 +185,7 @@ void configFile_NoShutdownHook() { @Test void configFile_Error(@TempDir Path tempDir) throws IOException { String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "resource:\n" + " attributes:\n" + " - name: service.name\n" diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java index 5257e5db457..6bd73f5417f 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java @@ -129,7 +129,7 @@ void setUp(@TempDir Path tempDir) throws IOException { String endpoint = "http://localhost:" + server.httpPort(); String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "resource:\n" + " attributes:\n" + " - name: service.name\n" diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java index 6244f70fcb2..603a39512a9 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactory.java @@ -25,7 +25,7 @@ final class OpenTelemetryConfigurationFactory private static final Logger logger = Logger.getLogger(OpenTelemetryConfigurationFactory.class.getName()); private static final Pattern SUPPORTED_FILE_FORMATS = Pattern.compile("^(0.4)|(1.0(-rc.\\d*)?)$"); - private static final String EXPECTED_FILE_FORMAT = "1.0-rc.3"; + private static final String EXPECTED_FILE_FORMAT = "1.0"; private static final OpenTelemetryConfigurationFactory INSTANCE = new OpenTelemetryConfigurationFactory(); diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java index 83d256003a7..4855490d22d 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java @@ -82,11 +82,6 @@ void parseAndCreate_Examples(@TempDir Path tempDir) new String(Files.readAllBytes(example.toPath()), StandardCharsets.UTF_8); String rewrittenExampleContent = exampleContent - // TODO: remove jaeger, ottrace workarounds after next release - .replaceAll(".*- jaeger:.*\n", "") - .replaceAll("jaeger", "") - .replaceAll(".*- ottrace:.*\n", "") - .replaceAll("ottrace", "") .replaceAll( "ca_file: .*\n", "ca_file: " + certificatePath.replace("\\", "\\\\") + System.lineSeparator()) @@ -114,7 +109,7 @@ void parseAndCreate_Exception_CleansUpPartials() { // exporter with OTLP exporter, following by invalid batch exporter which references invalid // exporter "foo". String yaml = - "file_format: \"1.0-rc.3\"\n" + "file_format: \"1.0\"\n" + "logger_provider:\n" + " processors:\n" + " - batch:\n" @@ -141,7 +136,7 @@ void parseAndCreate_Exception_CleansUpPartials() { @Test void parseAndCreate_EmptyComponentProviderConfig() { String yaml = - "file_format: \"1.0-rc.3\"\n" + "file_format: \"1.0\"\n" + "logger_provider:\n" + " processors:\n" + " - test:\n" @@ -159,7 +154,7 @@ void parseAndCreate_EmptyComponentProviderConfig() { @Test void create_ModelCustomizer() { OpenTelemetryConfigurationModel model = new OpenTelemetryConfigurationModel(); - model.withFileFormat("1.0-rc.3"); + model.withFileFormat("1.0"); model.withTracerProvider( new TracerProviderModel() .withProcessors( diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java index 289e06200bc..aefc81c35a7 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationParseTest.java @@ -51,7 +51,7 @@ void parse_BadInputStream() { @Test void parse_nullValuesParsedToEmptyObjects() { String objectPlaceholderString = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "tracer_provider:\n" + " processors:\n" + " - batch:\n" @@ -69,7 +69,7 @@ void parse_nullValuesParsedToEmptyObjects() { new ByteArrayInputStream(objectPlaceholderString.getBytes(StandardCharsets.UTF_8))); String noOjbectPlaceholderString = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "tracer_provider:\n" + " processors:\n" + " - batch:\n" @@ -358,7 +358,7 @@ private static Stream sysPropertySubstitutionArgs() { @Test void read_WithEnvironmentVariables() { String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "tracer_provider:\n" + " processors:\n" + " - batch:\n" @@ -379,7 +379,7 @@ void read_WithEnvironmentVariables() { assertThat(model) .isEqualTo( new OpenTelemetryConfigurationModel() - .withFileFormat("1.0-rc.1") + .withFileFormat("1.0") .withTracerProvider( new TracerProviderModel() .withProcessors( @@ -405,7 +405,7 @@ void read_WithEnvironmentVariables() { @Test void read_WithSystemProperties() { String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "tracer_provider:\n" + " processors:\n" + " - batch:\n" @@ -426,7 +426,7 @@ void read_WithSystemProperties() { assertThat(model) .isEqualTo( new OpenTelemetryConfigurationModel() - .withFileFormat("1.0-rc.1") + .withFileFormat("1.0") .withTracerProvider( new TracerProviderModel() .withProcessors( @@ -452,7 +452,7 @@ void read_WithSystemProperties() { @Test void read_WithMixedEnvVarsAndSystemProperties() { String yaml = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "resource:\n" + " attributes:\n" + " - name: service.name\n" @@ -471,7 +471,7 @@ void read_WithMixedEnvVarsAndSystemProperties() { assertThat(model) .isEqualTo( new OpenTelemetryConfigurationModel() - .withFileFormat("1.0-rc.1") + .withFileFormat("1.0") .withResource( new ResourceModel() .withAttributes( diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java index 440da77f928..59002a4cfb5 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/OpenTelemetryConfigurationFactoryTest.java @@ -139,20 +139,20 @@ private static Stream fileFormatArgs() { @Test void create_FileFormatVersionMismatch_LogsWarning() { OpenTelemetryConfigurationModel model = - new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.2"); + new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.3"); ExtendedOpenTelemetrySdk sdk = OpenTelemetryConfigurationFactory.getInstance().create(model, context); cleanup.addCloseable(sdk); logCapturer.assertContains( - "Configuration file_format '1.0-rc.2' does not exactly match expected version '1.0-rc.3'"); + "Configuration file_format '1.0-rc.3' does not exactly match expected version '1.0'"); } @Test void create_FileFormatExactMatch_NoWarning() { OpenTelemetryConfigurationModel model = - new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.3"); + new OpenTelemetryConfigurationModel().withFileFormat("1.0"); ExtendedOpenTelemetrySdk sdk = OpenTelemetryConfigurationFactory.getInstance().create(model, context); @@ -165,7 +165,7 @@ void create_FileFormatExactMatch_NoWarning() { void create_Defaults() { List closeables = new ArrayList<>(); OpenTelemetryConfigurationModel model = - new OpenTelemetryConfigurationModel().withFileFormat("1.0-rc.1"); + new OpenTelemetryConfigurationModel().withFileFormat("1.0"); OpenTelemetrySdk expectedSdk = OpenTelemetrySdkBuilderUtil.setConfigProvider( OpenTelemetrySdk.builder(), @@ -186,7 +186,7 @@ void create_Disabled() { List closeables = new ArrayList<>(); OpenTelemetryConfigurationModel model = new OpenTelemetryConfigurationModel() - .withFileFormat("1.0-rc.1") + .withFileFormat("1.0") .withDisabled(true) // Logger provider configuration should be ignored since SDK is disabled .withLoggerProvider( @@ -229,7 +229,7 @@ void create_Configured() throws NoSuchFieldException { OpenTelemetryConfigurationModel model = new OpenTelemetryConfigurationModel() - .withFileFormat("1.0-rc.1") + .withFileFormat("1.0") .withPropagator( new PropagatorModel().withCompositeList("tracecontext,baggage,b3multi,b3")) .withResource( diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/YamlDeclarativeConfigPropertiesTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/YamlDeclarativeConfigPropertiesTest.java index 63ece0a0687..a592781c0d3 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/YamlDeclarativeConfigPropertiesTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/YamlDeclarativeConfigPropertiesTest.java @@ -29,7 +29,7 @@ class YamlDeclarativeConfigPropertiesTest { LogCapturer logs = LogCapturer.create().captureForType(YamlDeclarativeConfigProperties.class); private static final String extendedSchema = - "file_format: \"1.0-rc.1\"\n" + "file_format: \"1.0\"\n" + "disabled: false\n" + "\n" + "resource:\n" @@ -76,7 +76,7 @@ void setup() { @Test void configurationSchema() { // Validate can read declarative configuration schema properties - assertThat(structuredConfigProps.getString("file_format")).isEqualTo("1.0-rc.1"); + assertThat(structuredConfigProps.getString("file_format")).isEqualTo("1.0"); DeclarativeConfigProperties resourceProps = structuredConfigProps.getStructured("resource"); assertThat(resourceProps).isNotNull(); List resourceAttributesList = From 90c304e8b8720e15314bd1fd83114cba1d1802e0 Mon Sep 17 00:00:00 2001 From: Jack Berg <34418638+jack-berg@users.noreply.github.com> Date: Fri, 27 Feb 2026 15:30:33 -0600 Subject: [PATCH 3/4] Prioritize OTEL_CONFIG_FILE, indicate otel.experimental.config is deprecated --- .../AutoConfiguredOpenTelemetrySdkBuilder.java | 13 ++++++++----- .../DeclarativeConfigurationTest.java | 2 +- .../DeclarativeConfigurationTest.java | 14 +++++++------- .../autoconfigure/FullDeclarativeConfigTest.java | 2 +- sdk-extensions/incubator/README.md | 6 +++--- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java index ddb50a2b0a0..e5e2c37a4a1 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java @@ -579,15 +579,18 @@ private static AutoConfiguredOpenTelemetrySdk maybeConfigureFromFile( } } - String otelConfigFile = config.getString("otel.config.file"); - if (otelConfigFile != null && !otelConfigFile.isEmpty()) { - logger.warning( - "otel.config.file was set, but has been replaced with otel.experimental.config.file"); + String configurationFile = config.getString("otel.config.file"); + if (configurationFile == null || configurationFile.isEmpty()) { + configurationFile = config.getString("otel.experimental.config.file"); + if (configurationFile == null || configurationFile.isEmpty()) { + logger.warning( + "otel.experimental.config.file is deprecated and will be removed after 1.62.0 release. Please use otel.config.file instead."); + } } - String configurationFile = config.getString("otel.experimental.config.file"); if (configurationFile == null || configurationFile.isEmpty()) { return null; } + if (!INCUBATOR_AVAILABLE) { throw new ConfigurationException( "Cannot autoconfigure from config file without opentelemetry-sdk-extension-incubator on the classpath"); diff --git a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index ecd0bd97094..f44cd3af2ba 100644 --- a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -37,7 +37,7 @@ void configFile(@TempDir Path tempDir) throws IOException { Files.write(path, yaml.getBytes(StandardCharsets.UTF_8)); ConfigProperties config = DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", path.toString())); + Collections.singletonMap("otel.config.file", path.toString())); assertThatThrownBy(() -> AutoConfiguredOpenTelemetrySdk.builder().setConfig(config).build()) .isInstanceOf(ConfigurationException.class) diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java index 52f11040235..c8e6246f8ac 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/DeclarativeConfigurationTest.java @@ -94,7 +94,7 @@ void configFile_fileNotFound() { AutoConfiguredOpenTelemetrySdk.builder() .setConfig( DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", "foo"))) + Collections.singletonMap("otel.config.file", "foo"))) .build()) .isInstanceOf(ConfigurationException.class) .hasMessageContaining("Configuration file not found"); @@ -102,7 +102,7 @@ void configFile_fileNotFound() { assertThatCode( () -> AutoConfiguredOpenTelemetrySdk.builder() - .addPropertiesSupplier(() -> singletonMap("otel.experimental.config.file", "")) + .addPropertiesSupplier(() -> singletonMap("otel.config.file", "")) .addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "true")) .build()) .doesNotThrowAnyException(); @@ -112,7 +112,7 @@ void configFile_fileNotFound() { void configFile_Valid() { ConfigProperties config = DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", configFilePath.toString())); + Collections.singletonMap("otel.config.file", configFilePath.toString())); AutoConfiguredOpenTelemetrySdkBuilder builder = spy(AutoConfiguredOpenTelemetrySdk.builder()); Thread thread = new Thread(); doReturn(thread).when(builder).shutdownHook(any()); @@ -151,7 +151,7 @@ void configFile_setComponentLoader() { ComponentLoader.forClassLoader(DeclarativeConfigurationTest.class.getClassLoader()); ConfigProperties config = DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", configFilePath.toString())); + Collections.singletonMap("otel.config.file", configFilePath.toString())); AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk = AutoConfiguredOpenTelemetrySdk.builder() @@ -172,7 +172,7 @@ void configFile_setComponentLoader() { void configFile_NoShutdownHook() { ConfigProperties config = DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", configFilePath.toString())); + Collections.singletonMap("otel.config.file", configFilePath.toString())); AutoConfiguredOpenTelemetrySdkBuilder builder = spy(AutoConfiguredOpenTelemetrySdk.builder()); AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk = @@ -199,7 +199,7 @@ void configFile_Error(@TempDir Path tempDir) throws IOException { Files.write(path, yaml.getBytes(StandardCharsets.UTF_8)); ConfigProperties config = DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", path.toString())); + Collections.singletonMap("otel.config.file", path.toString())); assertThatThrownBy(() -> AutoConfiguredOpenTelemetrySdk.builder().setConfig(config).build()) .isInstanceOf(ConfigurationException.class) @@ -211,7 +211,7 @@ void configFile_Error(@TempDir Path tempDir) throws IOException { void configFile_ConfigProvider() { ConfigProperties config = DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", configFilePath.toString())); + Collections.singletonMap("otel.config.file", configFilePath.toString())); AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk = AutoConfiguredOpenTelemetrySdk.builder().setConfig(config).setResultAsGlobal().build(); diff --git a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java index 6bd73f5417f..5d536db4b0d 100644 --- a/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java +++ b/sdk-extensions/autoconfigure/src/testIncubating/java/io/opentelemetry/sdk/autoconfigure/FullDeclarativeConfigTest.java @@ -178,7 +178,7 @@ void setUp(@TempDir Path tempDir) throws IOException { GlobalOpenTelemetry.resetForTest(); ConfigProperties config = DefaultConfigProperties.createFromMap( - Collections.singletonMap("otel.experimental.config.file", path.toString())); + Collections.singletonMap("otel.config.file", path.toString())); openTelemetrySdk = AutoConfiguredOpenTelemetrySdk.builder() .setConfig(config) diff --git a/sdk-extensions/incubator/README.md b/sdk-extensions/incubator/README.md index 3dc539bf0d2..df342a56929 100644 --- a/sdk-extensions/incubator/README.md +++ b/sdk-extensions/incubator/README.md @@ -12,14 +12,14 @@ Usage: File yamlConfigFile = new File("/path/to/config.yaml"); OpenTelemetrySdk openTelemetrySdk; try (FileInputStream yamlConfigFileInputStream = new FileInputStream("/path/to/config.yaml")) { - openTelemetrySdk = FileConfiguration.parseAndCreate(yamlConfigFileInputStream); + openTelemetrySdk = DeclarativeConfiguration.parseAndCreate(yamlConfigFileInputStream); } // ...proceed with application after successful initialization of OpenTelemetrySdk ``` Notes: * Environment variable substitution is supported as [defined in the spec](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/data-model.md#environment-variable-substitution) -* Currently, there is no support for the customization (i.e. `AutoConfigurationCustomizerProvider`) SPIs defined in [opentelemetry-sdk-extension-autoconfigure-spi](../autoconfigure-spi). +* Customization is limited to customizing the in-memory config model, or exporters. See `DeclarativeConfigurationCustomizer` SPI for details. * Custom SDK extension components which reference the [ComponentProvider](https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/ComponentProvider.java) SPI can be referenced in declarative configuration. Supported types include: * `Resource` * `SpanExporter` @@ -29,7 +29,7 @@ Notes: * `LogRecordProcessor` * `TextMapPropagator` * `Sampler` -* You can use declarative configuration with [autoconfigure](https://opentelemetry.io/docs/languages/java/configuration/#declarative-configuration) to specify a configuration file via environment variable, e.g. `OTEL_EXPERIMENTAL_CONFIG_FILE=/path/to/config.yaml`. +* You can use declarative configuration with [autoconfigure](https://opentelemetry.io/docs/languages/java/configuration/#declarative-configuration) to specify a configuration file via environment variable, e.g. `OTEL_CONFIG_FILE=/path/to/config.yaml`. ## View File Configuration From 7300f04b1bc2617221f495fbd5d9eacfcd4a8f74 Mon Sep 17 00:00:00 2001 From: Jack Berg <34418638+jack-berg@users.noreply.github.com> Date: Fri, 27 Feb 2026 16:00:04 -0600 Subject: [PATCH 4/4] Run all snippets through parse and create --- sdk-extensions/incubator/build.gradle.kts | 2 +- .../DeclarativeConfigurationCreateTest.java | 74 +++++++++++-------- 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/sdk-extensions/incubator/build.gradle.kts b/sdk-extensions/incubator/build.gradle.kts index 62f60b45335..171c0acad3e 100644 --- a/sdk-extensions/incubator/build.gradle.kts +++ b/sdk-extensions/incubator/build.gradle.kts @@ -212,7 +212,7 @@ tasks { environment( mapOf( // Expose the kitchen sink example file to tests - "CONFIG_EXAMPLE_DIR" to "$buildDirectory/configuration/examples/" + "CONFIG_REPO_ROOT" to "$buildDirectory/configuration" ) ) } diff --git a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java index 4855490d22d..cc4b137da71 100644 --- a/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java +++ b/sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfigurationCreateTest.java @@ -33,11 +33,18 @@ import java.nio.file.Files; import java.nio.file.Path; import java.security.cert.CertificateEncodingException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.Objects; +import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.slf4j.event.Level; class DeclarativeConfigurationCreateTest { @@ -59,9 +66,10 @@ class DeclarativeConfigurationCreateTest { * href="https://github.com/open-telemetry/opentelemetry-configuration/tree/main/examples">open-telemetry/opentelemetry-configuration/examples * can pass {@link DeclarativeConfiguration#parseAndCreate(InputStream)}. */ - @Test + @ParameterizedTest + @MethodSource("exampleFiles") @SuppressLogger(ParentBasedSamplerBuilder.class) - void parseAndCreate_Examples(@TempDir Path tempDir) + void parseAndCreate_Examples(File example, @TempDir Path tempDir) throws IOException, CertificateEncodingException { // Write certificates to temp files String certificatePath = @@ -73,34 +81,40 @@ void parseAndCreate_Examples(@TempDir Path tempDir) createTempFileWithContent( tempDir, "clientCertificate.cert", clientTls.certificate().getEncoded()); - File examplesDir = new File(System.getenv("CONFIG_EXAMPLE_DIR")); - assertThat(examplesDir).isDirectory(); - - for (File example : Objects.requireNonNull(examplesDir.listFiles())) { - // Rewrite references to cert files in examples - String exampleContent = - new String(Files.readAllBytes(example.toPath()), StandardCharsets.UTF_8); - String rewrittenExampleContent = - exampleContent - .replaceAll( - "ca_file: .*\n", - "ca_file: " + certificatePath.replace("\\", "\\\\") + System.lineSeparator()) - .replaceAll( - "key_file: .*\n", - "key_file: " + clientKeyPath.replace("\\", "\\\\") + System.lineSeparator()) - .replaceAll( - "cert_file: .*\n", - "cert_file: " - + clientCertificatePath.replace("\\", "\\\\") - + System.lineSeparator()); - InputStream is = - new ByteArrayInputStream(rewrittenExampleContent.getBytes(StandardCharsets.UTF_8)); - - // Verify that file can be parsed and interpreted without error - assertThatCode(() -> cleanup.addCloseable(DeclarativeConfiguration.parseAndCreate(is))) - .as("Example file: " + example.getName()) - .doesNotThrowAnyException(); - } + // Rewrite references to cert files in examples + String exampleContent = + new String(Files.readAllBytes(example.toPath()), StandardCharsets.UTF_8); + String rewrittenExampleContent = + exampleContent + .replaceAll( + "ca_file: .*\n", + "ca_file: " + certificatePath.replace("\\", "\\\\") + System.lineSeparator()) + .replaceAll( + "key_file: .*\n", + "key_file: " + clientKeyPath.replace("\\", "\\\\") + System.lineSeparator()) + .replaceAll( + "cert_file: .*\n", + "cert_file: " + + clientCertificatePath.replace("\\", "\\\\") + + System.lineSeparator()); + InputStream is = + new ByteArrayInputStream(rewrittenExampleContent.getBytes(StandardCharsets.UTF_8)); + + // Verify that file can be parsed and interpreted without error + assertThatCode(() -> cleanup.addCloseable(DeclarativeConfiguration.parseAndCreate(is))) + .as("Example file: " + example.getName()) + .doesNotThrowAnyException(); + } + + private static Stream exampleFiles() { + File configRepoRoot = new File(System.getenv("CONFIG_REPO_ROOT")); + File examplesDir = new File(configRepoRoot + "/examples/"); + File snippetsDir = new File(configRepoRoot + "/snippets/"); + List examples = new ArrayList<>(); + examples.addAll(Arrays.asList(Objects.requireNonNull(examplesDir.listFiles()))); + examples.addAll(Arrays.asList(Objects.requireNonNull(snippetsDir.listFiles()))); + + return examples.stream().map(file -> Arguments.argumentSet(file.getName(), file)); } @Test