[SDK] Support dependency injection in ResourceBuilder and load envvars from IConfiguration (#3782)
This commit is contained in:
parent
2377d00c9d
commit
cedda83469
|
|
@ -21,7 +21,6 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\EnvironmentVariableHelper.cs" Link="Includes\EnvironmentVariableHelper.cs" />
|
||||
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\OpenTelemetrySdkEventSource.cs" Link="Includes\OpenTelemetrySdkEventSource.cs" />
|
||||
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\PeriodicExportingMetricReaderHelper.cs" Link="Includes\PeriodicExportingMetricReaderHelper.cs" />
|
||||
<Compile Include="$(RepoRoot)\src\OpenTelemetry\Internal\TagTransformer.cs" Link="Includes\TagTransformer.cs" />
|
||||
|
|
|
|||
|
|
@ -42,9 +42,9 @@ OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.s
|
|||
~OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> void
|
||||
~OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector! resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
~OpenTelemetry.SimpleActivityExportProcessor.SimpleActivityExportProcessor(OpenTelemetry.BaseExporter<System.Diagnostics.Activity> exporter) -> void
|
||||
OpenTelemetry.SimpleExportProcessor<T>
|
||||
OpenTelemetry.SimpleExportProcessor<T>.SimpleExportProcessor(OpenTelemetry.BaseExporter<T!>! exporter) -> void
|
||||
|
|
@ -88,12 +88,12 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetResourceBuilder(t
|
|||
~static OpenTelemetry.ProviderExtensions.GetDefaultResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string serviceName, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, object!>>! attributes) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, string! serviceName, string? serviceNamespace = null, string? serviceVersion = null, bool autoGenerateServiceInstanceId = true, string? serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator! textMapPropagator) -> void
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ OpenTelemetry.Metrics.HistogramConfiguration.RecordMinMax.set -> void
|
|||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMax() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMin() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.HasMinMax() -> bool
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(System.Func<System.IServiceProvider?, OpenTelemetry.Resources.IResourceDetector!>! resourceDetectorFactory) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Trace.BatchExportActivityProcessorOptions.BatchExportActivityProcessorOptions(Microsoft.Extensions.Configuration.IConfiguration! configuration) -> void
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
|
|
|
|||
|
|
@ -42,9 +42,9 @@ OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.s
|
|||
~OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> void
|
||||
~OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector! resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
~OpenTelemetry.SimpleActivityExportProcessor.SimpleActivityExportProcessor(OpenTelemetry.BaseExporter<System.Diagnostics.Activity> exporter) -> void
|
||||
OpenTelemetry.SimpleExportProcessor<T>
|
||||
OpenTelemetry.SimpleExportProcessor<T>.SimpleExportProcessor(OpenTelemetry.BaseExporter<T!>! exporter) -> void
|
||||
|
|
@ -88,12 +88,12 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetResourceBuilder(t
|
|||
~static OpenTelemetry.ProviderExtensions.GetDefaultResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string serviceName, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, object!>>! attributes) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, string! serviceName, string? serviceNamespace = null, string? serviceVersion = null, bool autoGenerateServiceInstanceId = true, string? serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator! textMapPropagator) -> void
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ OpenTelemetry.Metrics.HistogramConfiguration.RecordMinMax.set -> void
|
|||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMax() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMin() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.HasMinMax() -> bool
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(System.Func<System.IServiceProvider?, OpenTelemetry.Resources.IResourceDetector!>! resourceDetectorFactory) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Trace.BatchExportActivityProcessorOptions.BatchExportActivityProcessorOptions(Microsoft.Extensions.Configuration.IConfiguration! configuration) -> void
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
|
|
|
|||
|
|
@ -42,9 +42,9 @@ OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.s
|
|||
~OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> void
|
||||
~OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector! resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
~OpenTelemetry.SimpleActivityExportProcessor.SimpleActivityExportProcessor(OpenTelemetry.BaseExporter<System.Diagnostics.Activity> exporter) -> void
|
||||
OpenTelemetry.SimpleExportProcessor<T>
|
||||
OpenTelemetry.SimpleExportProcessor<T>.SimpleExportProcessor(OpenTelemetry.BaseExporter<T!>! exporter) -> void
|
||||
|
|
@ -88,12 +88,12 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetResourceBuilder(t
|
|||
~static OpenTelemetry.ProviderExtensions.GetDefaultResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string serviceName, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, object!>>! attributes) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, string! serviceName, string? serviceNamespace = null, string? serviceVersion = null, bool autoGenerateServiceInstanceId = true, string? serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator! textMapPropagator) -> void
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ OpenTelemetry.Metrics.HistogramConfiguration.RecordMinMax.set -> void
|
|||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMax() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMin() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.HasMinMax() -> bool
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(System.Func<System.IServiceProvider?, OpenTelemetry.Resources.IResourceDetector!>! resourceDetectorFactory) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Trace.BatchExportActivityProcessorOptions.BatchExportActivityProcessorOptions(Microsoft.Extensions.Configuration.IConfiguration! configuration) -> void
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
|
|
|
|||
|
|
@ -42,9 +42,9 @@ OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.s
|
|||
~OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>
|
||||
~OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> void
|
||||
~OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource
|
||||
~OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(OpenTelemetry.Resources.IResourceDetector! resourceDetector) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource!
|
||||
OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
~OpenTelemetry.SimpleActivityExportProcessor.SimpleActivityExportProcessor(OpenTelemetry.BaseExporter<System.Diagnostics.Activity> exporter) -> void
|
||||
OpenTelemetry.SimpleExportProcessor<T>
|
||||
OpenTelemetry.SimpleExportProcessor<T>.SimpleExportProcessor(OpenTelemetry.BaseExporter<T!>! exporter) -> void
|
||||
|
|
@ -88,12 +88,12 @@ static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetResourceBuilder(t
|
|||
~static OpenTelemetry.ProviderExtensions.GetDefaultResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>> attributes) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string serviceName, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
~static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateDefault() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilder.CreateEmpty() -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, object!>>! attributes) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddService(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder, string! serviceName, string? serviceNamespace = null, string? serviceVersion = null, bool autoGenerateServiceInstanceId = true, string? serviceInstanceId = null) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Resources.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder! resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder!
|
||||
static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder!
|
||||
static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator! textMapPropagator) -> void
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ OpenTelemetry.Metrics.HistogramConfiguration.RecordMinMax.set -> void
|
|||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMax() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.GetHistogramMin() -> double
|
||||
OpenTelemetry.Metrics.MetricPoint.HasMinMax() -> bool
|
||||
OpenTelemetry.Resources.ResourceBuilder.AddDetector(System.Func<System.IServiceProvider?, OpenTelemetry.Resources.IResourceDetector!>! resourceDetectorFactory) -> OpenTelemetry.Resources.ResourceBuilder!
|
||||
OpenTelemetry.Trace.BatchExportActivityProcessorOptions.BatchExportActivityProcessorOptions(Microsoft.Extensions.Configuration.IConfiguration! configuration) -> void
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
static Microsoft.Extensions.DependencyInjection.MeterProviderBuilderServiceCollectionExtensions.ConfigureOpenTelemetryMetrics(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<OpenTelemetry.Metrics.MeterProviderBuilder!>! configure) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
|
|
|
|||
|
|
@ -8,6 +8,11 @@
|
|||
([#3760](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3760),
|
||||
[#3776](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3776))
|
||||
|
||||
* Added dependency injection support in the `ResourceBuilder` class and added
|
||||
support for loading environment variables from `IConfiguration` for the
|
||||
`AddEnvironmentVariableDetector` extension
|
||||
([#3782](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3782))
|
||||
|
||||
## 1.4.0-beta.2
|
||||
|
||||
Released 2022-Oct-17
|
||||
|
|
|
|||
|
|
@ -1,162 +0,0 @@
|
|||
// <copyright file="EnvironmentVariableHelper.cs" company="OpenTelemetry Authors">
|
||||
// Copyright The OpenTelemetry Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
// </copyright>
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Security;
|
||||
|
||||
namespace OpenTelemetry.Internal
|
||||
{
|
||||
/// <summary>
|
||||
/// EnvironmentVariableHelper facilitates parsing environment variable values as defined by
|
||||
/// <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/sdk-environment-variables.md">
|
||||
/// the specification</a>.
|
||||
/// </summary>
|
||||
internal static class EnvironmentVariableHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Reads an environment variable without any parsing.
|
||||
/// </summary>
|
||||
/// <param name="envVarKey">The name of the environment variable.</param>
|
||||
/// <param name="result">The parsed value of the environment variable.</param>
|
||||
/// <returns>
|
||||
/// Returns <c>true</c> when a non-empty value was read; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
public static bool LoadString(string envVarKey, out string result)
|
||||
{
|
||||
result = null;
|
||||
|
||||
try
|
||||
{
|
||||
result = Environment.GetEnvironmentVariable(envVarKey);
|
||||
}
|
||||
catch (SecurityException ex)
|
||||
{
|
||||
// The caller does not have the required permission to
|
||||
// retrieve the value of an environment variable from the current process.
|
||||
OpenTelemetrySdkEventSource.Log.MissingPermissionsToReadEnvironmentVariable(ex);
|
||||
return false;
|
||||
}
|
||||
|
||||
return !string.IsNullOrEmpty(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads an environment variable and parses is as a
|
||||
/// <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/sdk-environment-variables.md#numeric-value">
|
||||
/// numeric value</a> - a non-negative decimal integer.
|
||||
/// </summary>
|
||||
/// <param name="envVarKey">The name of the environment variable.</param>
|
||||
/// <param name="result">The parsed value of the environment variable.</param>
|
||||
/// <returns>
|
||||
/// Returns <c>true</c> when a non-empty value was read; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
/// <exception cref="FormatException">
|
||||
/// Thrown when failed to parse the non-empty value.
|
||||
/// </exception>
|
||||
public static bool LoadNumeric(string envVarKey, out int result)
|
||||
{
|
||||
result = 0;
|
||||
|
||||
if (!LoadString(envVarKey, out string value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return LoadNumeric(envVarKey, value, out result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads an environment variable and parses is as a
|
||||
/// <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/sdk-environment-variables.md#numeric-value">
|
||||
/// numeric value</a> - a non-negative decimal integer.
|
||||
/// </summary>
|
||||
/// <param name="envVarKey">The name of the environment variable.</param>
|
||||
/// <param name="value">The value of the environment variable.</param>
|
||||
/// <param name="result">The parsed value of the environment variable.</param>
|
||||
/// <returns>
|
||||
/// Returns <c>true</c> when a non-empty value was read; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
/// <exception cref="FormatException">
|
||||
/// Thrown when failed to parse the non-empty value.
|
||||
/// </exception>
|
||||
public static bool LoadNumeric(string envVarKey, string value, out int result)
|
||||
{
|
||||
if (!int.TryParse(value, NumberStyles.None, CultureInfo.InvariantCulture, out result))
|
||||
{
|
||||
throw new FormatException($"{envVarKey} environment variable has an invalid value: '{value}'");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads an environment variable and parses it as a <see cref="Uri" />.
|
||||
/// </summary>
|
||||
/// <param name="envVarKey">The name of the environment variable.</param>
|
||||
/// <param name="result">The parsed value of the environment variable.</param>
|
||||
/// <returns>
|
||||
/// Returns <c>true</c> when a non-empty value was read; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
/// <exception cref="FormatException">
|
||||
/// Thrown when failed to parse the non-empty value.
|
||||
/// </exception>
|
||||
public static bool LoadUri(string envVarKey, out Uri result)
|
||||
{
|
||||
result = null;
|
||||
|
||||
if (!LoadString(envVarKey, out string value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!Uri.TryCreate(value, UriKind.Absolute, out result))
|
||||
{
|
||||
throw new FormatException($"{envVarKey} environment variable has an invalid value: '${value}'");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads an environment variable and parses it as a <see cref="bool" />.
|
||||
/// </summary>
|
||||
/// <param name="envVarKey">The name of the environment variable.</param>
|
||||
/// <param name="result">The parsed value of the environment variable.</param>
|
||||
/// <returns>
|
||||
/// Returns <c>true</c> when a non-empty value was read; otherwise, <c>false</c>.
|
||||
/// </returns>
|
||||
/// <exception cref="FormatException">
|
||||
/// Thrown when failed to parse the non-empty value.
|
||||
/// </exception>
|
||||
public static bool LoadBoolean(string envVarKey, out bool result)
|
||||
{
|
||||
result = default;
|
||||
|
||||
if (!LoadString(envVarKey, out string value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!bool.TryParse(value, out result))
|
||||
{
|
||||
throw new FormatException($"{envVarKey} environment variable has an invalid value: '${value}'");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -61,7 +61,10 @@ namespace OpenTelemetry.Metrics
|
|||
StringBuilder exportersAdded = new StringBuilder();
|
||||
StringBuilder instrumentationFactoriesAdded = new StringBuilder();
|
||||
|
||||
this.Resource = (state.ResourceBuilder ?? ResourceBuilder.CreateDefault()).Build();
|
||||
var resourceBuilder = state.ResourceBuilder ?? ResourceBuilder.CreateDefault();
|
||||
resourceBuilder.ServiceProvider = serviceProvider;
|
||||
this.Resource = resourceBuilder.Build();
|
||||
|
||||
this.viewConfigs = state.ViewConfigs;
|
||||
|
||||
foreach (var reader in state.Readers)
|
||||
|
|
|
|||
|
|
@ -15,21 +15,29 @@
|
|||
// </copyright>
|
||||
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using OpenTelemetry.Internal;
|
||||
|
||||
namespace OpenTelemetry.Resources
|
||||
{
|
||||
internal class OtelEnvResourceDetector : IResourceDetector
|
||||
internal sealed class OtelEnvResourceDetector : IResourceDetector
|
||||
{
|
||||
public const string EnvVarKey = "OTEL_RESOURCE_ATTRIBUTES";
|
||||
private const char AttributeListSplitter = ',';
|
||||
private const char AttributeKeyValueSplitter = '=';
|
||||
|
||||
private readonly IConfiguration configuration;
|
||||
|
||||
public OtelEnvResourceDetector(IConfiguration configuration)
|
||||
{
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
public Resource Detect()
|
||||
{
|
||||
var resource = Resource.Empty;
|
||||
|
||||
if (EnvironmentVariableHelper.LoadString(EnvVarKey, out string envResourceAttributeValue))
|
||||
if (this.configuration.TryGetStringValue(EnvVarKey, out string envResourceAttributeValue))
|
||||
{
|
||||
var attributes = ParseResourceAttributes(envResourceAttributeValue);
|
||||
resource = new Resource(attributes);
|
||||
|
|
|
|||
|
|
@ -15,19 +15,27 @@
|
|||
// </copyright>
|
||||
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using OpenTelemetry.Internal;
|
||||
|
||||
namespace OpenTelemetry.Resources
|
||||
{
|
||||
internal class OtelServiceNameEnvVarDetector : IResourceDetector
|
||||
internal sealed class OtelServiceNameEnvVarDetector : IResourceDetector
|
||||
{
|
||||
public const string EnvVarKey = "OTEL_SERVICE_NAME";
|
||||
|
||||
private readonly IConfiguration configuration;
|
||||
|
||||
public OtelServiceNameEnvVarDetector(IConfiguration configuration)
|
||||
{
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
public Resource Detect()
|
||||
{
|
||||
var resource = Resource.Empty;
|
||||
|
||||
if (EnvironmentVariableHelper.LoadString(EnvVarKey, out string envResourceAttributeValue))
|
||||
if (this.configuration.TryGetStringValue(EnvVarKey, out string envResourceAttributeValue))
|
||||
{
|
||||
resource = new Resource(new Dictionary<string, object>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@
|
|||
// limitations under the License.
|
||||
// </copyright>
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using OpenTelemetry.Internal;
|
||||
|
|
@ -25,7 +28,8 @@ namespace OpenTelemetry.Resources
|
|||
/// </summary>
|
||||
public class ResourceBuilder
|
||||
{
|
||||
internal readonly List<Resource> Resources = new();
|
||||
internal readonly List<IResourceDetector> ResourceDetectors = new();
|
||||
private static readonly Resource DefaultResource;
|
||||
|
||||
static ResourceBuilder()
|
||||
{
|
||||
|
|
@ -54,7 +58,7 @@ namespace OpenTelemetry.Resources
|
|||
{
|
||||
}
|
||||
|
||||
private static Resource DefaultResource { get; }
|
||||
internal IServiceProvider? ServiceProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates a <see cref="ResourceBuilder"/> instance with Default
|
||||
|
|
@ -83,7 +87,7 @@ namespace OpenTelemetry.Resources
|
|||
/// <returns><see cref="ResourceBuilder"/> for chaining.</returns>
|
||||
public ResourceBuilder Clear()
|
||||
{
|
||||
this.Resources.Clear();
|
||||
this.ResourceDetectors.Clear();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
|
@ -96,24 +100,55 @@ namespace OpenTelemetry.Resources
|
|||
{
|
||||
Resource finalResource = Resource.Empty;
|
||||
|
||||
foreach (Resource resource in this.Resources)
|
||||
foreach (IResourceDetector resourceDetector in this.ResourceDetectors)
|
||||
{
|
||||
finalResource = finalResource.Merge(resource);
|
||||
if (resourceDetector is ResolvingResourceDetector resolvingResourceDetector)
|
||||
{
|
||||
resolvingResourceDetector.Resolve(this.ServiceProvider);
|
||||
}
|
||||
|
||||
var resource = resourceDetector.Detect();
|
||||
if (resource != null)
|
||||
{
|
||||
finalResource = finalResource.Merge(resource);
|
||||
}
|
||||
}
|
||||
|
||||
return finalResource;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a <see cref="IResourceDetector"/> to the builder.
|
||||
/// </summary>
|
||||
/// <param name="resourceDetector"><see cref="IResourceDetector"/>.</param>
|
||||
/// <returns>Supplied <see cref="ResourceBuilder"/> for call chaining.</returns>
|
||||
public ResourceBuilder AddDetector(IResourceDetector resourceDetector)
|
||||
{
|
||||
Guard.ThrowIfNull(resourceDetector);
|
||||
|
||||
Resource resource = resourceDetector.Detect();
|
||||
this.ResourceDetectors.Add(resourceDetector);
|
||||
|
||||
if (resource != null)
|
||||
{
|
||||
this.Resources.Add(resource);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a <see cref="IResourceDetector"/> to the builder which will be resolved using the application <see cref="IServiceProvider"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Note: The supplied <paramref name="resourceDetectorFactory"/> may be
|
||||
/// called with a <see langword="null"/> <see cref="IServiceProvider"/>
|
||||
/// for detached <see cref="ResourceBuilder"/> instances. Factories
|
||||
/// should either throw if a <see langword="null"/> cannot be handled,
|
||||
/// or return a default <see cref="IResourceDetector"/> when <see
|
||||
/// cref="IServiceProvider"/> is not available.
|
||||
/// </remarks>
|
||||
/// <param name="resourceDetectorFactory">Resource detector factory.</param>
|
||||
/// <returns>Supplied <see cref="ResourceBuilder"/> for call chaining.</returns>
|
||||
public ResourceBuilder AddDetector(Func<IServiceProvider?, IResourceDetector> resourceDetectorFactory)
|
||||
{
|
||||
Guard.ThrowIfNull(resourceDetectorFactory);
|
||||
|
||||
this.ResourceDetectors.Add(new ResolvingResourceDetector(resourceDetectorFactory));
|
||||
|
||||
return this;
|
||||
}
|
||||
|
|
@ -122,9 +157,47 @@ namespace OpenTelemetry.Resources
|
|||
{
|
||||
Guard.ThrowIfNull(resource);
|
||||
|
||||
this.Resources.Add(resource);
|
||||
this.ResourceDetectors.Add(new WrapperResourceDetector(resource));
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
internal sealed class WrapperResourceDetector : IResourceDetector
|
||||
{
|
||||
private readonly Resource resource;
|
||||
|
||||
public WrapperResourceDetector(Resource resource)
|
||||
{
|
||||
this.resource = resource;
|
||||
}
|
||||
|
||||
public Resource Detect() => this.resource;
|
||||
}
|
||||
|
||||
private sealed class ResolvingResourceDetector : IResourceDetector
|
||||
{
|
||||
private readonly Func<IServiceProvider?, IResourceDetector> resourceDetectorFactory;
|
||||
private IResourceDetector? resourceDetector;
|
||||
|
||||
public ResolvingResourceDetector(Func<IServiceProvider?, IResourceDetector> resourceDetectorFactory)
|
||||
{
|
||||
this.resourceDetectorFactory = resourceDetectorFactory;
|
||||
}
|
||||
|
||||
public void Resolve(IServiceProvider? serviceProvider)
|
||||
{
|
||||
this.resourceDetector = this.resourceDetectorFactory(serviceProvider)
|
||||
?? throw new InvalidOperationException("ResourceDetector factory did not return a ResourceDetector instance.");
|
||||
}
|
||||
|
||||
public Resource Detect()
|
||||
{
|
||||
var detector = this.resourceDetector;
|
||||
|
||||
Debug.Assert(detector != null, "detector was null");
|
||||
|
||||
return detector?.Detect() ?? Resource.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,9 +14,13 @@
|
|||
// limitations under the License.
|
||||
// </copyright>
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using OpenTelemetry.Internal;
|
||||
|
||||
namespace OpenTelemetry.Resources
|
||||
|
|
@ -49,10 +53,10 @@ namespace OpenTelemetry.Resources
|
|||
public static ResourceBuilder AddService(
|
||||
this ResourceBuilder resourceBuilder,
|
||||
string serviceName,
|
||||
string serviceNamespace = null,
|
||||
string serviceVersion = null,
|
||||
string? serviceNamespace = null,
|
||||
string? serviceVersion = null,
|
||||
bool autoGenerateServiceInstanceId = true,
|
||||
string serviceInstanceId = null)
|
||||
string? serviceInstanceId = null)
|
||||
{
|
||||
Dictionary<string, object> resourceAttributes = new Dictionary<string, object>();
|
||||
|
||||
|
|
@ -62,12 +66,12 @@ namespace OpenTelemetry.Resources
|
|||
|
||||
if (!string.IsNullOrEmpty(serviceNamespace))
|
||||
{
|
||||
resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceNamespace, serviceNamespace);
|
||||
resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceNamespace, serviceNamespace!);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(serviceVersion))
|
||||
{
|
||||
resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceVersion, serviceVersion);
|
||||
resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceVersion, serviceVersion!);
|
||||
}
|
||||
|
||||
if (serviceInstanceId == null && autoGenerateServiceInstanceId)
|
||||
|
|
@ -117,7 +121,11 @@ namespace OpenTelemetry.Resources
|
|||
/// <returns>Returns <see cref="ResourceBuilder"/> for chaining.</returns>
|
||||
public static ResourceBuilder AddEnvironmentVariableDetector(this ResourceBuilder resourceBuilder)
|
||||
{
|
||||
return resourceBuilder.AddDetector(new OtelEnvResourceDetector()).AddDetector(new OtelServiceNameEnvVarDetector());
|
||||
Lazy<IConfiguration> configuration = new Lazy<IConfiguration>(() => new ConfigurationBuilder().AddEnvironmentVariables().Build());
|
||||
|
||||
return resourceBuilder
|
||||
.AddDetector(sp => new OtelEnvResourceDetector(sp?.GetService<IConfiguration>() ?? configuration.Value))
|
||||
.AddDetector(sp => new OtelServiceNameEnvVarDetector(sp?.GetService<IConfiguration>() ?? configuration.Value));
|
||||
}
|
||||
|
||||
private static string GetFileVersion()
|
||||
|
|
|
|||
|
|
@ -66,7 +66,10 @@ namespace OpenTelemetry.Trace
|
|||
state.EnableErrorStatusOnException();
|
||||
}
|
||||
|
||||
this.Resource = (state.ResourceBuilder ?? ResourceBuilder.CreateDefault()).Build();
|
||||
var resourceBuilder = state.ResourceBuilder ?? ResourceBuilder.CreateDefault();
|
||||
resourceBuilder.ServiceProvider = serviceProvider;
|
||||
this.Resource = resourceBuilder.Build();
|
||||
|
||||
this.sampler = state.Sampler ?? new ParentBasedSampler(new AlwaysOnSampler());
|
||||
this.supportLegacyActivity = state.LegacyActivityOperationNames.Count > 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,165 +0,0 @@
|
|||
// <copyright file="EnvironmentVariableHelperTests.cs" company="OpenTelemetry Authors">
|
||||
// Copyright The OpenTelemetry Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
// </copyright>
|
||||
|
||||
using System;
|
||||
using Xunit;
|
||||
|
||||
namespace OpenTelemetry.Internal.Tests
|
||||
{
|
||||
public class EnvironmentVariableHelperTests : IDisposable
|
||||
{
|
||||
private const string EnvVar = "OTEL_EXAMPLE_VARIABLE";
|
||||
|
||||
public EnvironmentVariableHelperTests()
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, null);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, null);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LoadString()
|
||||
{
|
||||
const string value = "something";
|
||||
Environment.SetEnvironmentVariable(EnvVar, value);
|
||||
|
||||
bool actualBool = EnvironmentVariableHelper.LoadString(EnvVar, out string actualValue);
|
||||
|
||||
Assert.True(actualBool);
|
||||
Assert.Equal(value, actualValue);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LoadString_NoValue()
|
||||
{
|
||||
bool actualBool = EnvironmentVariableHelper.LoadString(EnvVar, out string actualValue);
|
||||
|
||||
Assert.False(actualBool);
|
||||
Assert.Null(actualValue);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("true", true)]
|
||||
[InlineData("TRUE", true)]
|
||||
[InlineData("false", false)]
|
||||
[InlineData("FALSE", false)]
|
||||
[InlineData(" true ", true)]
|
||||
[InlineData(" false ", false)]
|
||||
public void LoadBoolean(string value, bool expectedValue)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, value);
|
||||
|
||||
bool actualBool = EnvironmentVariableHelper.LoadBoolean(EnvVar, out bool actualValue);
|
||||
|
||||
Assert.True(actualBool);
|
||||
Assert.Equal(expectedValue, actualValue);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LoadBoolean_NoValue()
|
||||
{
|
||||
bool actualBool = EnvironmentVariableHelper.LoadBoolean(EnvVar, out bool actualValue);
|
||||
|
||||
Assert.False(actualBool);
|
||||
Assert.False(actualValue);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("something")] // non true/false
|
||||
[InlineData(" ")] // whitespaces
|
||||
[InlineData("0")] // 0
|
||||
[InlineData("1")] // 1
|
||||
public void LoadBoolean_Invalid(string value)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, value);
|
||||
|
||||
Assert.Throws<FormatException>(() => EnvironmentVariableHelper.LoadBoolean(EnvVar, out bool _));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("123", 123)]
|
||||
[InlineData("0", 0)]
|
||||
public void LoadNumeric(string value, int expectedValue)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, value);
|
||||
|
||||
bool actualBool = EnvironmentVariableHelper.LoadNumeric(EnvVar, out int actualValue);
|
||||
|
||||
Assert.True(actualBool);
|
||||
Assert.Equal(expectedValue, actualValue);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LoadNumeric_NoValue()
|
||||
{
|
||||
bool actualBool = EnvironmentVariableHelper.LoadNumeric(EnvVar, out int actualValue);
|
||||
|
||||
Assert.False(actualBool);
|
||||
Assert.Equal(0, actualValue);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("something")] // NaN
|
||||
[InlineData("-12")] // negative number not allowed
|
||||
[InlineData("-0")] // sign not allowed
|
||||
[InlineData("-1")] // -1 is not allowed
|
||||
[InlineData(" 123 ")] // whitespaces not allowed
|
||||
[InlineData("0xFF")] // only decimal number allowed
|
||||
public void LoadNumeric_Invalid(string value)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, value);
|
||||
|
||||
Assert.Throws<FormatException>(() => EnvironmentVariableHelper.LoadNumeric(EnvVar, out int _));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("http://www.example.com", "http://www.example.com/")]
|
||||
[InlineData("http://www.example.com/space%20here.html", "http://www.example.com/space here.html")] // characters are converted
|
||||
[InlineData("http://www.example.com/space here.html", "http://www.example.com/space here.html")] // characters are escaped
|
||||
public void LoadUri(string value, string expectedValue)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, value);
|
||||
|
||||
bool actualBool = EnvironmentVariableHelper.LoadUri(EnvVar, out Uri actualValue);
|
||||
|
||||
Assert.True(actualBool);
|
||||
Assert.Equal(expectedValue, actualValue.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LoadUri_NoValue()
|
||||
{
|
||||
bool actualBool = EnvironmentVariableHelper.LoadUri(EnvVar, out Uri actualValue);
|
||||
|
||||
Assert.False(actualBool);
|
||||
Assert.Null(actualValue);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("invalid")] // invalid format
|
||||
[InlineData(" ")] // whitespace
|
||||
public void LoadUri_Invalid(string value)
|
||||
{
|
||||
Environment.SetEnvironmentVariable(EnvVar, value);
|
||||
|
||||
Assert.Throws<FormatException>(() => EnvironmentVariableHelper.LoadUri(EnvVar, out Uri _));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -168,32 +168,39 @@ namespace OpenTelemetry.Metrics.Tests
|
|||
var builder = Sdk.CreateMeterProviderBuilder();
|
||||
|
||||
int configureInvocations = 0;
|
||||
bool serviceProviderTestExecuted = false;
|
||||
|
||||
builder.SetResourceBuilder(ResourceBuilder.CreateEmpty().AddService("Test"));
|
||||
builder.ConfigureResource(builder =>
|
||||
{
|
||||
configureInvocations++;
|
||||
|
||||
Assert.Single(builder.Resources);
|
||||
Assert.Single(builder.ResourceDetectors);
|
||||
|
||||
builder.AddAttributes(new Dictionary<string, object>() { ["key1"] = "value1" });
|
||||
|
||||
Assert.Equal(2, builder.Resources.Count);
|
||||
Assert.Equal(2, builder.ResourceDetectors.Count);
|
||||
});
|
||||
builder.SetResourceBuilder(ResourceBuilder.CreateEmpty());
|
||||
builder.ConfigureResource(builder =>
|
||||
{
|
||||
configureInvocations++;
|
||||
|
||||
Assert.Empty(builder.Resources);
|
||||
Assert.Empty(builder.ResourceDetectors);
|
||||
|
||||
builder.AddAttributes(new Dictionary<string, object>() { ["key2"] = "value2" });
|
||||
builder.AddDetector(sp =>
|
||||
{
|
||||
serviceProviderTestExecuted = true;
|
||||
Assert.NotNull(sp);
|
||||
return new ResourceBuilder.WrapperResourceDetector(new Resource(new Dictionary<string, object>() { ["key2"] = "value2" }));
|
||||
});
|
||||
|
||||
Assert.Single(builder.Resources);
|
||||
Assert.Single(builder.ResourceDetectors);
|
||||
});
|
||||
|
||||
using var provider = builder.Build() as MeterProviderSdk;
|
||||
|
||||
Assert.True(serviceProviderTestExecuted);
|
||||
Assert.Equal(2, configureInvocations);
|
||||
|
||||
Assert.Single(provider.Resource.Attributes);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Xunit;
|
||||
|
||||
namespace OpenTelemetry.Resources.Tests
|
||||
|
|
@ -43,7 +44,9 @@ namespace OpenTelemetry.Resources.Tests
|
|||
public void OtelEnvResource_NullEnvVar()
|
||||
{
|
||||
// Arrange
|
||||
var resource = new OtelEnvResourceDetector().Detect();
|
||||
var resource = new OtelEnvResourceDetector(
|
||||
new ConfigurationBuilder().AddEnvironmentVariables().Build())
|
||||
.Detect();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(Resource.Empty, resource);
|
||||
|
|
@ -55,7 +58,9 @@ namespace OpenTelemetry.Resources.Tests
|
|||
// Arrange
|
||||
var envVarValue = "Key1=Val1,Key2=Val2";
|
||||
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, envVarValue);
|
||||
var resource = new OtelEnvResourceDetector().Detect();
|
||||
var resource = new OtelEnvResourceDetector(
|
||||
new ConfigurationBuilder().AddEnvironmentVariables().Build())
|
||||
.Detect();
|
||||
|
||||
// Assert
|
||||
Assert.NotEqual(Resource.Empty, resource);
|
||||
|
|
@ -68,12 +73,33 @@ namespace OpenTelemetry.Resources.Tests
|
|||
// Arrange
|
||||
var envVarValue = "Key1,Key2=Val2";
|
||||
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, envVarValue);
|
||||
var resource = new OtelEnvResourceDetector().Detect();
|
||||
var resource = new OtelEnvResourceDetector(
|
||||
new ConfigurationBuilder().AddEnvironmentVariables().Build())
|
||||
.Detect();
|
||||
|
||||
// Assert
|
||||
Assert.NotEqual(Resource.Empty, resource);
|
||||
Assert.Single(resource.Attributes);
|
||||
Assert.Contains(new KeyValuePair<string, object>("Key2", "Val2"), resource.Attributes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OtelEnvResource_UsingIConfiguration()
|
||||
{
|
||||
var values = new Dictionary<string, string>()
|
||||
{
|
||||
[OtelEnvResourceDetector.EnvVarKey] = "Key1=Val1,Key2=Val2",
|
||||
};
|
||||
|
||||
var configuration = new ConfigurationBuilder()
|
||||
.AddInMemoryCollection(values)
|
||||
.Build();
|
||||
|
||||
var resource = new OtelEnvResourceDetector(configuration).Detect();
|
||||
|
||||
Assert.NotEqual(Resource.Empty, resource);
|
||||
Assert.Contains(new KeyValuePair<string, object>("Key1", "Val1"), resource.Attributes);
|
||||
Assert.Contains(new KeyValuePair<string, object>("Key2", "Val2"), resource.Attributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Xunit;
|
||||
|
||||
namespace OpenTelemetry.Resources.Tests
|
||||
|
|
@ -43,7 +44,9 @@ namespace OpenTelemetry.Resources.Tests
|
|||
public void OtelServiceNameEnvVar_Null()
|
||||
{
|
||||
// Act
|
||||
var resource = new OtelServiceNameEnvVarDetector().Detect();
|
||||
var resource = new OtelServiceNameEnvVarDetector(
|
||||
new ConfigurationBuilder().AddEnvironmentVariables().Build())
|
||||
.Detect();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(Resource.Empty, resource);
|
||||
|
|
@ -57,11 +60,31 @@ namespace OpenTelemetry.Resources.Tests
|
|||
Environment.SetEnvironmentVariable(OtelServiceNameEnvVarDetector.EnvVarKey, envVarValue);
|
||||
|
||||
// Act
|
||||
var resource = new OtelServiceNameEnvVarDetector().Detect();
|
||||
var resource = new OtelServiceNameEnvVarDetector(
|
||||
new ConfigurationBuilder().AddEnvironmentVariables().Build())
|
||||
.Detect();
|
||||
|
||||
// Assert
|
||||
Assert.NotEqual(Resource.Empty, resource);
|
||||
Assert.Contains(new KeyValuePair<string, object>(ResourceSemanticConventions.AttributeServiceName, envVarValue), resource.Attributes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OtelServiceNameEnvVar_UsingIConfiguration()
|
||||
{
|
||||
var values = new Dictionary<string, string>()
|
||||
{
|
||||
[OtelServiceNameEnvVarDetector.EnvVarKey] = "my-service",
|
||||
};
|
||||
|
||||
var configuration = new ConfigurationBuilder()
|
||||
.AddInMemoryCollection(values)
|
||||
.Build();
|
||||
|
||||
var resource = new OtelServiceNameEnvVarDetector(configuration).Detect();
|
||||
|
||||
Assert.NotEqual(Resource.Empty, resource);
|
||||
Assert.Contains(new KeyValuePair<string, object>(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
|
||||
namespace OpenTelemetry.Resources.Tests
|
||||
|
|
@ -499,6 +500,45 @@ namespace OpenTelemetry.Resources.Tests
|
|||
Assert.Contains(new KeyValuePair<string, object>("service.name", "from-code"), attributes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResourceBuilder_ServiceProvider_Available()
|
||||
{
|
||||
var builder = ResourceBuilder.CreateDefault();
|
||||
|
||||
bool nullTestRun = false;
|
||||
|
||||
builder.AddDetector(sp =>
|
||||
{
|
||||
nullTestRun = true;
|
||||
Assert.Null(sp);
|
||||
return new NoopResourceDetector();
|
||||
});
|
||||
|
||||
builder.Build();
|
||||
|
||||
Assert.True(nullTestRun);
|
||||
|
||||
builder = ResourceBuilder.CreateDefault();
|
||||
|
||||
bool validTestRun = false;
|
||||
|
||||
var serviceCollection = new ServiceCollection();
|
||||
using var serviceProvider = serviceCollection.BuildServiceProvider();
|
||||
|
||||
builder.ServiceProvider = serviceProvider;
|
||||
|
||||
builder.AddDetector(sp =>
|
||||
{
|
||||
validTestRun = true;
|
||||
Assert.NotNull(sp);
|
||||
return new NoopResourceDetector();
|
||||
});
|
||||
|
||||
builder.Build();
|
||||
|
||||
Assert.True(validTestRun);
|
||||
}
|
||||
|
||||
private static void ClearEnvVars()
|
||||
{
|
||||
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, null);
|
||||
|
|
@ -552,5 +592,10 @@ namespace OpenTelemetry.Resources.Tests
|
|||
AddAttributes(attributes, attributeCount, startIndex);
|
||||
return attributes;
|
||||
}
|
||||
|
||||
private sealed class NoopResourceDetector : IResourceDetector
|
||||
{
|
||||
public Resource Detect() => Resource.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -254,32 +254,39 @@ namespace OpenTelemetry.Trace.Tests
|
|||
var builder = Sdk.CreateTracerProviderBuilder();
|
||||
|
||||
int configureInvocations = 0;
|
||||
bool serviceProviderTestExecuted = false;
|
||||
|
||||
builder.SetResourceBuilder(ResourceBuilder.CreateEmpty().AddService("Test"));
|
||||
builder.ConfigureResource(builder =>
|
||||
{
|
||||
configureInvocations++;
|
||||
|
||||
Assert.Single(builder.Resources);
|
||||
Assert.Single(builder.ResourceDetectors);
|
||||
|
||||
builder.AddAttributes(new Dictionary<string, object>() { ["key1"] = "value1" });
|
||||
|
||||
Assert.Equal(2, builder.Resources.Count);
|
||||
Assert.Equal(2, builder.ResourceDetectors.Count);
|
||||
});
|
||||
builder.SetResourceBuilder(ResourceBuilder.CreateEmpty());
|
||||
builder.ConfigureResource(builder =>
|
||||
{
|
||||
configureInvocations++;
|
||||
|
||||
Assert.Empty(builder.Resources);
|
||||
Assert.Empty(builder.ResourceDetectors);
|
||||
|
||||
builder.AddAttributes(new Dictionary<string, object>() { ["key2"] = "value2" });
|
||||
builder.AddDetector(sp =>
|
||||
{
|
||||
serviceProviderTestExecuted = true;
|
||||
Assert.NotNull(sp);
|
||||
return new ResourceBuilder.WrapperResourceDetector(new Resource(new Dictionary<string, object>() { ["key2"] = "value2" }));
|
||||
});
|
||||
|
||||
Assert.Single(builder.Resources);
|
||||
Assert.Single(builder.ResourceDetectors);
|
||||
});
|
||||
|
||||
using var provider = builder.Build() as TracerProviderSdk;
|
||||
|
||||
Assert.True(serviceProviderTestExecuted);
|
||||
Assert.Equal(2, configureInvocations);
|
||||
|
||||
Assert.Single(provider.Resource.Attributes);
|
||||
|
|
|
|||
Loading…
Reference in New Issue