From 2ffe6b1b769876a5b0292580c951e57889544619 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Thu, 12 Nov 2020 20:34:33 -0800 Subject: [PATCH 01/14] Attempting to improve the Resource API. --- examples/Console/TestConsoleExporter.cs | 2 +- examples/Console/TestHttpClient.cs | 2 +- .../TestOTelShimWithConsoleExporter.cs | 2 +- .../TestOpenTracingWithConsoleExporter.cs | 2 +- .../.publicApi/net452/PublicAPI.Unshipped.txt | 3 +- .../.publicApi/net46/PublicAPI.Unshipped.txt | 3 +- .../.publicApi/net461/PublicAPI.Unshipped.txt | 3 +- .../netstandard2.0/PublicAPI.Unshipped.txt | 3 +- src/OpenTelemetry/Resources/Resource.cs | 59 ++++++++++++++++- src/OpenTelemetry/Resources/Resources.cs | 64 ------------------- .../InstrumentedHttpClientBenchmark.cs | 4 +- .../JaegerExporterTests.cs | 4 +- ...sourcesTests.cs => ResourceCreateTests.cs} | 25 +++++--- 13 files changed, 87 insertions(+), 89 deletions(-) delete mode 100644 src/OpenTelemetry/Resources/Resources.cs rename test/OpenTelemetry.Tests/Resources/{ResourcesTests.cs => ResourceCreateTests.cs} (78%) diff --git a/examples/Console/TestConsoleExporter.cs b/examples/Console/TestConsoleExporter.cs index a36e5618662..f1de039113e 100644 --- a/examples/Console/TestConsoleExporter.cs +++ b/examples/Console/TestConsoleExporter.cs @@ -35,7 +35,7 @@ internal static object Run(ConsoleOptions options) // and use a custom MyProcessor, along with Console exporter. using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .SetResource(Resources.CreateServiceResource("MyServiceName")) + .SetResource(Resource.Create("MyServiceName")) .AddProcessor(new MyProcessor()) // This must be added before ConsoleExporter .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestHttpClient.cs b/examples/Console/TestHttpClient.cs index a570daadbef..08ffd981a44 100644 --- a/examples/Console/TestHttpClient.cs +++ b/examples/Console/TestHttpClient.cs @@ -34,7 +34,7 @@ internal static object Run() using var openTelemetry = Sdk.CreateTracerProviderBuilder() .AddHttpClientInstrumentation() - .SetResource(Resources.CreateServiceResource("http-service-example")) + .SetResource(Resource.Create("http-service-example")) .AddSource("http-client-test") .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestOTelShimWithConsoleExporter.cs b/examples/Console/TestOTelShimWithConsoleExporter.cs index de4fbc772a9..397746ff786 100644 --- a/examples/Console/TestOTelShimWithConsoleExporter.cs +++ b/examples/Console/TestOTelShimWithConsoleExporter.cs @@ -28,7 +28,7 @@ internal static object Run(OpenTelemetryShimOptions options) // and use a single pipeline with a custom MyProcessor, and Console exporter. using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .SetResource(Resources.CreateServiceResource("MyServiceName")) + .SetResource(Resource.Create("MyServiceName")) .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestOpenTracingWithConsoleExporter.cs b/examples/Console/TestOpenTracingWithConsoleExporter.cs index f8ea8b34591..a9cecbf57c6 100644 --- a/examples/Console/TestOpenTracingWithConsoleExporter.cs +++ b/examples/Console/TestOpenTracingWithConsoleExporter.cs @@ -31,7 +31,7 @@ internal static object Run(OpenTracingShimOptions options) // and use Console exporter. using var openTelemetry = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .SetResource(Resources.CreateServiceResource("MyServiceName")) + .SetResource(Resource.Create("MyServiceName")) .AddConsoleExporter() .Build(); diff --git a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt index 33ee0c8ec19..479d7dfdf89 100644 --- a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt @@ -126,7 +126,6 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void -OpenTelemetry.Resources.Resources OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -233,8 +232,8 @@ override abstract OpenTelemetry.BaseExportProcessor.OnEnd(T data) -> void override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resources.CreateServiceResource(string serviceName, string serviceInstanceId = null, string serviceNamespace = null, string serviceVersion = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void diff --git a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt index 33ee0c8ec19..479d7dfdf89 100644 --- a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt @@ -126,7 +126,6 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void -OpenTelemetry.Resources.Resources OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -233,8 +232,8 @@ override abstract OpenTelemetry.BaseExportProcessor.OnEnd(T data) -> void override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resources.CreateServiceResource(string serviceName, string serviceInstanceId = null, string serviceNamespace = null, string serviceVersion = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void diff --git a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt index 8e5f12664f1..e703ccfeb50 100644 --- a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt @@ -145,7 +145,6 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void -OpenTelemetry.Resources.Resources OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -253,8 +252,8 @@ override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.AddOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure = null) -> Microsoft.Extensions.Logging.ILoggingBuilder static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resources.CreateServiceResource(string serviceName, string serviceInstanceId = null, string serviceNamespace = null, string serviceVersion = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void diff --git a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt index 8e5f12664f1..e703ccfeb50 100644 --- a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -145,7 +145,6 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void -OpenTelemetry.Resources.Resources OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -253,8 +252,8 @@ override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.AddOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure = null) -> Microsoft.Extensions.Logging.ILoggingBuilder static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resources.CreateServiceResource(string serviceName, string serviceInstanceId = null, string serviceNamespace = null, string serviceVersion = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void diff --git a/src/OpenTelemetry/Resources/Resource.cs b/src/OpenTelemetry/Resources/Resource.cs index c8dfe34ac3c..de5bfea44e1 100644 --- a/src/OpenTelemetry/Resources/Resource.cs +++ b/src/OpenTelemetry/Resources/Resource.cs @@ -42,7 +42,7 @@ public class Resource /// /// Initializes a new instance of the class. /// - /// An of attributes that describe the resource. + /// An of attributes that describe the resource. public Resource(IEnumerable> attributes) { if (attributes == null) @@ -73,6 +73,63 @@ public Resource(IEnumerable> attributes) new KeyValuePair(TelemetrySdkVersionKey, Version.ToString()), }); + /// + /// Creates a new from service information following standard convention + /// https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-resource-semantic-conventions.md#service. + /// + /// Optional name of the service. + /// Optional namespace of the service. + /// Optional version of the service. + /// Specify to automatically generate a for if not supplied. + /// Optional unique identifier of the service instance. + /// Optional of attributes that describe the resource. + /// Returns a new . + public static Resource Create( + string serviceName = null, + string serviceNamespace = null, + string serviceVersion = null, + bool autoGenerateServiceInstanceId = true, + string serviceInstanceId = null, + IEnumerable> attributes = null) + { + Dictionary resourceAttributes = new Dictionary(); + + if (attributes != null) + { + foreach (KeyValuePair attribute in attributes.Select(SanitizeAttribute).ToList()) + { + resourceAttributes[attribute.Key] = attribute.Value; + } + } + + if (!string.IsNullOrEmpty(serviceName)) + { + resourceAttributes.Add(ServiceNameKey, serviceName); + } + + if (!string.IsNullOrEmpty(serviceNamespace)) + { + resourceAttributes.Add(ServiceNamespaceKey, serviceNamespace); + } + + if (!string.IsNullOrEmpty(serviceVersion)) + { + resourceAttributes.Add(ServiceVersionKey, serviceVersion); + } + + if (serviceInstanceId == null && autoGenerateServiceInstanceId) + { + serviceInstanceId = Guid.NewGuid().ToString(); + } + + if (serviceInstanceId != null) + { + resourceAttributes.Add(ServiceInstanceIdKey, serviceInstanceId); + } + + return new Resource(resourceAttributes).GetResourceWithDefaultAttributes(); + } + /// /// Returns a new, merged by merging the current with the. /// other . In case of a collision the current takes precedence. diff --git a/src/OpenTelemetry/Resources/Resources.cs b/src/OpenTelemetry/Resources/Resources.cs deleted file mode 100644 index 04c41909106..00000000000 --- a/src/OpenTelemetry/Resources/Resources.cs +++ /dev/null @@ -1,64 +0,0 @@ -// -// 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. -// - -using System; -using System.Collections.Generic; -using OpenTelemetry.Internal; - -namespace OpenTelemetry.Resources -{ - public static class Resources - { - /// - /// Creates a new from service information following standard convention - /// https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-resource-semantic-conventions.md#service. - /// - /// Name of the service. - /// Unique identifier of the service instance. - /// Optional namespace of the service. - /// Optional version of the service. - /// Returns a new . - public static Resource CreateServiceResource(string serviceName, string serviceInstanceId = null, string serviceNamespace = null, string serviceVersion = null) - { - if (serviceName == null) - { - OpenTelemetrySdkEventSource.Log.InvalidArgument("Create service resource", "serviceName", "is null"); - return Resource.Empty.GetResourceWithDefaultAttributes(); - } - - var attributes = new List> { new KeyValuePair(Resource.ServiceNameKey, serviceName), }; - - if (serviceInstanceId == null) - { - serviceInstanceId = Guid.NewGuid().ToString(); - } - - attributes.Add(new KeyValuePair(Resource.ServiceInstanceIdKey, serviceInstanceId)); - - if (serviceNamespace != null) - { - attributes.Add(new KeyValuePair(Resource.ServiceNamespaceKey, serviceNamespace)); - } - - if (serviceVersion != null) - { - attributes.Add(new KeyValuePair(Resource.ServiceVersionKey, serviceVersion)); - } - - return new Resource(attributes).GetResourceWithDefaultAttributes(); - } - } -} diff --git a/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs b/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs index 66e382bd4b0..4712dfa7f11 100644 --- a/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs +++ b/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs @@ -30,7 +30,7 @@ namespace Benchmarks.Instrumentation public class InstrumentedHttpClientBenchmark { private const string ActivityName = "incoming request"; - private const string ResourceName = "http-service-example"; + private const string ServiceName = "http-service-example"; private const string SourceName = "http-client-test"; private HttpClient httpClient; @@ -53,7 +53,7 @@ public void GlobalSetup() this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddHttpClientInstrumentation() - .SetResource(Resources.CreateServiceResource(ResourceName)) + .SetResource(Resource.Create(ServiceName)) .AddSource(SourceName) .Build(); diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs index 7c14f518fd5..9dbbaeb4822 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs @@ -57,11 +57,11 @@ public void JaegerTraceExporter_SetResource_UpdatesServiceName() Assert.Equal("TestService", process.ServiceName); - jaegerTraceExporter.SetResource(Resources.Resources.CreateServiceResource("MyService")); + jaegerTraceExporter.SetResource(Resource.Create("MyService")); Assert.Equal("MyService", process.ServiceName); - jaegerTraceExporter.SetResource(Resources.Resources.CreateServiceResource("MyService", serviceNamespace: "MyNamespace")); + jaegerTraceExporter.SetResource(Resource.Create("MyService", "MyNamespace")); Assert.Equal("MyNamespace.MyService", process.ServiceName); } diff --git a/test/OpenTelemetry.Tests/Resources/ResourcesTests.cs b/test/OpenTelemetry.Tests/Resources/ResourceCreateTests.cs similarity index 78% rename from test/OpenTelemetry.Tests/Resources/ResourcesTests.cs rename to test/OpenTelemetry.Tests/Resources/ResourceCreateTests.cs index 273ef0d726c..ada51a24871 100644 --- a/test/OpenTelemetry.Tests/Resources/ResourcesTests.cs +++ b/test/OpenTelemetry.Tests/Resources/ResourceCreateTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,12 +22,12 @@ namespace OpenTelemetry.Resources.Tests { - public class ResourcesTests + public class ResourceCreateTests { [Fact] public void ServiceResource_ServiceName() { - var resource = OpenTelemetry.Resources.Resources.CreateServiceResource("my-service"); + var resource = Resource.Create("my-service"); Assert.Equal(5, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); Assert.Single(resource.Attributes.Where(kvp => kvp.Key == Resource.ServiceNameKey)); @@ -38,7 +38,7 @@ public void ServiceResource_ServiceName() [Fact] public void ServiceResource_ServiceNameAndInstance() { - var resource = OpenTelemetry.Resources.Resources.CreateServiceResource("my-service", "123"); + var resource = Resource.Create("my-service", serviceInstanceId: "123"); Assert.Equal(5, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); Assert.Contains(new KeyValuePair(Resource.ServiceInstanceIdKey, "123"), resource.Attributes); @@ -48,7 +48,7 @@ public void ServiceResource_ServiceNameAndInstance() [Fact] public void ServiceResource_ServiceNameAndInstanceAndNamespace() { - var resource = OpenTelemetry.Resources.Resources.CreateServiceResource("my-service", "123", "my-namespace"); + var resource = Resource.Create("my-service", "my-namespace", serviceInstanceId: "123"); Assert.Equal(6, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); Assert.Contains(new KeyValuePair(Resource.ServiceInstanceIdKey, "123"), resource.Attributes); @@ -59,7 +59,7 @@ public void ServiceResource_ServiceNameAndInstanceAndNamespace() [Fact] public void ServiceResource_ServiceNameAndInstanceAndNamespaceAndVersion() { - var resource = OpenTelemetry.Resources.Resources.CreateServiceResource("my-service", "123", "my-namespace", "semVer:1.2.3"); + var resource = Resource.Create("my-service", "my-namespace", "semVer:1.2.3", serviceInstanceId: "123"); Assert.Equal(7, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); Assert.Contains(new KeyValuePair(Resource.ServiceInstanceIdKey, "123"), resource.Attributes); @@ -68,11 +68,20 @@ public void ServiceResource_ServiceNameAndInstanceAndNamespaceAndVersion() this.AssertDefaultAttributes(resource); } + [Fact] + public void ServiceResource_AutoGenerateServiceInstanceIdOff() + { + var resource = Resource.Create("my-service", autoGenerateServiceInstanceId: false); + Assert.Equal(4, resource.Attributes.Count()); + Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); + this.AssertDefaultAttributes(resource); + } + [Fact] public void ServiceResource_NullParams() { - var resource = OpenTelemetry.Resources.Resources.CreateServiceResource(null); - Assert.Equal(3, resource.Attributes.Count()); + var resource = Resource.Create(); + Assert.Equal(4, resource.Attributes.Count()); this.AssertDefaultAttributes(resource); } From e5c8ed8233cd1452997699b4a6e9f873f0d027f9 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Thu, 12 Nov 2020 20:52:20 -0800 Subject: [PATCH 02/14] XML comment change. --- src/OpenTelemetry/Resources/Resource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry/Resources/Resource.cs b/src/OpenTelemetry/Resources/Resource.cs index de5bfea44e1..38846e51b4a 100644 --- a/src/OpenTelemetry/Resources/Resource.cs +++ b/src/OpenTelemetry/Resources/Resource.cs @@ -82,7 +82,7 @@ public Resource(IEnumerable> attributes) /// Optional version of the service. /// Specify to automatically generate a for if not supplied. /// Optional unique identifier of the service instance. - /// Optional of attributes that describe the resource. + /// Optional of attributes that describe the service. /// Returns a new . public static Resource Create( string serviceName = null, From 653f72846430580a90295dcb612e5a48611222cf Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 13 Nov 2020 19:59:11 -0800 Subject: [PATCH 03/14] Updated Resource API based on feedback. --- examples/Console/TestConsoleExporter.cs | 2 +- examples/Console/TestHttpClient.cs | 2 +- .../TestOTelShimWithConsoleExporter.cs | 2 +- .../TestOpenTracingWithConsoleExporter.cs | 2 +- .../Trace/SemanticConventions.cs | 44 ------ .../JaegerExporter.cs | 4 +- .../OpenTelemetry.Exporter.Jaeger.csproj | 3 +- ...etry.Exporter.OpenTelemetryProtocol.csproj | 1 + .../OtlpExporter.cs | 4 +- .../OpenTelemetry.Exporter.Zipkin.csproj | 1 + .../ZipkinExporter.cs | 2 +- .../.publicApi/net452/PublicAPI.Unshipped.txt | 16 ++- .../.publicApi/net46/PublicAPI.Unshipped.txt | 16 ++- .../.publicApi/net461/PublicAPI.Unshipped.txt | 16 ++- .../netstandard2.0/PublicAPI.Unshipped.txt | 16 ++- .../Resources/OtelEnvResourceDetector.cs | 17 ++- src/OpenTelemetry/Resources/Resource.cs | 105 +------------- .../Resources/ResourceBuilder.cs | 93 +++++++++++++ .../Resources/ResourceBuilderExtensions.cs | 128 ++++++++++++++++++ .../Resources/ResourceSemanticConventions.cs | 65 +++++++++ .../Trace/TracerProviderBuilderExtensions.cs | 16 +++ .../Trace/TracerProviderBuilderSdk.cs | 27 +++- .../InstrumentedHttpClientBenchmark.cs | 2 +- .../JaegerExporterTests.cs | 8 +- .../OtlpExporterTest.cs | 10 +- .../ZipkinExporterTests.cs | 2 +- .../Resources/ResourceBuilderTests.cs | 86 ++++++++++++ .../Resources/ResourceCreateTests.cs | 96 ------------- .../Resources/ResourceTest.cs | 43 +----- 29 files changed, 503 insertions(+), 326 deletions(-) create mode 100644 src/OpenTelemetry/Resources/ResourceBuilder.cs create mode 100644 src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs create mode 100644 src/OpenTelemetry/Resources/ResourceSemanticConventions.cs create mode 100644 test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs delete mode 100644 test/OpenTelemetry.Tests/Resources/ResourceCreateTests.cs diff --git a/examples/Console/TestConsoleExporter.cs b/examples/Console/TestConsoleExporter.cs index f1de039113e..bad5313a0ea 100644 --- a/examples/Console/TestConsoleExporter.cs +++ b/examples/Console/TestConsoleExporter.cs @@ -35,7 +35,7 @@ internal static object Run(ConsoleOptions options) // and use a custom MyProcessor, along with Console exporter. using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .SetResource(Resource.Create("MyServiceName")) + .ConfigureResource(r => r.AddService("MyServiceName")) .AddProcessor(new MyProcessor()) // This must be added before ConsoleExporter .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestHttpClient.cs b/examples/Console/TestHttpClient.cs index 08ffd981a44..8d66fff684f 100644 --- a/examples/Console/TestHttpClient.cs +++ b/examples/Console/TestHttpClient.cs @@ -34,7 +34,7 @@ internal static object Run() using var openTelemetry = Sdk.CreateTracerProviderBuilder() .AddHttpClientInstrumentation() - .SetResource(Resource.Create("http-service-example")) + .ConfigureResource(r => r.AddService("http-service-example")) .AddSource("http-client-test") .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestOTelShimWithConsoleExporter.cs b/examples/Console/TestOTelShimWithConsoleExporter.cs index 397746ff786..792d47f7eef 100644 --- a/examples/Console/TestOTelShimWithConsoleExporter.cs +++ b/examples/Console/TestOTelShimWithConsoleExporter.cs @@ -28,7 +28,7 @@ internal static object Run(OpenTelemetryShimOptions options) // and use a single pipeline with a custom MyProcessor, and Console exporter. using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .SetResource(Resource.Create("MyServiceName")) + .ConfigureResource(r => r.AddService("MyServiceName")) .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestOpenTracingWithConsoleExporter.cs b/examples/Console/TestOpenTracingWithConsoleExporter.cs index a9cecbf57c6..97af91e38d9 100644 --- a/examples/Console/TestOpenTracingWithConsoleExporter.cs +++ b/examples/Console/TestOpenTracingWithConsoleExporter.cs @@ -31,7 +31,7 @@ internal static object Run(OpenTracingShimOptions options) // and use Console exporter. using var openTelemetry = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .SetResource(Resource.Create("MyServiceName")) + .ConfigureResource(r => r.AddService("MyServiceName")) .AddConsoleExporter() .Build(); diff --git a/src/OpenTelemetry.Api/Trace/SemanticConventions.cs b/src/OpenTelemetry.Api/Trace/SemanticConventions.cs index 0f97be39703..dd5ecc7a6c9 100644 --- a/src/OpenTelemetry.Api/Trace/SemanticConventions.cs +++ b/src/OpenTelemetry.Api/Trace/SemanticConventions.cs @@ -26,50 +26,6 @@ internal static class SemanticConventions // https://github.com/open-telemetry/opentelemetry-specification/tree/master/specification/trace/semantic_conventions // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/exceptions.md #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public const string AttributeServiceName = "service.name"; - public const string AttributeServiceNamespace = "service.namespace"; - public const string AttributeServiceInstance = "service.instance.id"; - public const string AttributeServiceVersion = "service.version"; - - public const string AttributeTelemetrySdkName = "telemetry.sdk.name"; - public const string AttributeTelemetrySdkLanguage = "telemetry.sdk.language"; - public const string AttributeTelemetrySdkVersion = "telemetry.sdk.version"; - - public const string AttributeContainerName = "container.name"; - public const string AttributeContainerImage = "container.image.name"; - public const string AttributeContainerTag = "container.image.tag"; - - public const string AttributeFaasName = "faas.name"; - public const string AttributeFaasId = "faas.id"; - public const string AttributeFaasVersion = "faas.version"; - public const string AttributeFaasInstance = "faas.instance"; - - public const string AttributeK8sCluster = "k8s.cluster.name"; - public const string AttributeK8sNamespace = "k8s.namespace.name"; - public const string AttributeK8sPod = "k8s.pod.name"; - public const string AttributeK8sDeployment = "k8s.deployment.name"; - - public const string AttributeHostHostname = "host.hostname"; - public const string AttributeHostId = "host.id"; - public const string AttributeHostName = "host.name"; - public const string AttributeHostType = "host.type"; - public const string AttributeHostImageName = "host.image.name"; - public const string AttributeHostImageId = "host.image.id"; - public const string AttributeHostImageVersion = "host.image.version"; - - public const string AttributeProcessId = "process.id"; - public const string AttributeProcessExecutableName = "process.executable.name"; - public const string AttributeProcessExecutablePath = "process.executable.path"; - public const string AttributeProcessCommand = "process.command"; - public const string AttributeProcessCommandLine = "process.command_line"; - public const string AttributeProcessUsername = "process.username"; - - public const string AttributeCloudProvider = "cloud.provider"; - public const string AttributeCloudAccount = "cloud.account.id"; - public const string AttributeCloudRegion = "cloud.region"; - public const string AttributeCloudZone = "cloud.zone"; - public const string AttributeComponent = "component"; - public const string AttributeNetTransport = "net.transport"; public const string AttributeNetPeerIp = "net.peer.ip"; public const string AttributeNetPeerPort = "net.peer.port"; diff --git a/src/OpenTelemetry.Exporter.Jaeger/JaegerExporter.cs b/src/OpenTelemetry.Exporter.Jaeger/JaegerExporter.cs index f6c7c780fc1..66a179d7858 100644 --- a/src/OpenTelemetry.Exporter.Jaeger/JaegerExporter.cs +++ b/src/OpenTelemetry.Exporter.Jaeger/JaegerExporter.cs @@ -105,10 +105,10 @@ internal void SetResource(Resource resource) { switch (key) { - case Resource.ServiceNameKey: + case ResourceSemanticConventions.AttributeServiceName: serviceName = strVal; continue; - case Resource.ServiceNamespaceKey: + case ResourceSemanticConventions.AttributeServiceNamespace: serviceNamespace = strVal; continue; } diff --git a/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj b/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj index d9cd387f796..e00bcda88a0 100644 --- a/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj +++ b/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj @@ -1,4 +1,4 @@ - + net46;netstandard2.0;netstandard2.1 @@ -13,6 +13,7 @@ + diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj index ac885b12a96..5129f744e7a 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj @@ -14,6 +14,7 @@ + diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporter.cs index 9a6bc7fd4ca..3546073c164 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporter.cs @@ -104,7 +104,7 @@ internal void SetResource(Resource resource) } } - if (!processResource.Attributes.Any(kvp => kvp.Key == Resource.ServiceNameKey)) + if (!processResource.Attributes.Any(kvp => kvp.Key == ResourceSemanticConventions.AttributeServiceName)) { string serviceName = this.options.ServiceName; if (string.IsNullOrEmpty(serviceName)) @@ -114,7 +114,7 @@ internal void SetResource(Resource resource) processResource.Attributes.Add(new OtlpCommon.KeyValue { - Key = Resource.ServiceNameKey, + Key = ResourceSemanticConventions.AttributeServiceName, Value = new OtlpCommon.AnyValue { StringValue = serviceName }, }); } diff --git a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj index c8eb2ab2e82..48bfd3a9109 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj +++ b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj @@ -8,6 +8,7 @@ + diff --git a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs index 69c10d58991..b1c9328a2c5 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs +++ b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs @@ -115,7 +115,7 @@ internal void SetLocalEndpointFromResource(Resource resource) switch (key) { - case Resource.ServiceNameKey: + case ResourceSemanticConventions.AttributeServiceName: serviceName = label.Value as string; continue; } diff --git a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt index 8c85bf4a528..7211051cb05 100644 --- a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt @@ -126,6 +126,12 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void +OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource +OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void +OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -175,10 +181,6 @@ abstract OpenTelemetry.Metrics.Export.MetricExporter.ExportAsync(System.Collecti abstract OpenTelemetry.Metrics.Export.MetricProcessor.FinishCollectionCycle(out System.Collections.Generic.IEnumerable metrics) -> void abstract OpenTelemetry.Metrics.Export.MetricProcessor.Process(OpenTelemetry.Metrics.Export.Metric metric) -> void abstract OpenTelemetry.Trace.Sampler.ShouldSample(in OpenTelemetry.Trace.SamplingParameters samplingParameters) -> OpenTelemetry.Trace.SamplingResult -const OpenTelemetry.Resources.Resource.ServiceInstanceIdKey = "service.instance.id" -> string -const OpenTelemetry.Resources.Resource.ServiceNameKey = "service.name" -> string -const OpenTelemetry.Resources.Resource.ServiceNamespaceKey = "service.namespace" -> string -const OpenTelemetry.Resources.Resource.ServiceVersionKey = "service.version" -> string override OpenTelemetry.BaseExportProcessor.Dispose(bool disposing) -> void override OpenTelemetry.BaseExportProcessor.OnShutdown(int timeoutMilliseconds) -> bool override OpenTelemetry.BatchExportProcessor.OnEnd(T data) -> void @@ -226,8 +228,11 @@ override abstract OpenTelemetry.BaseExportProcessor.OnEnd(T data) -> void override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.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.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 @@ -238,6 +243,7 @@ static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.Sampli static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.Build(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder) -> OpenTelemetry.Trace.TracerProvider +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetSampler(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Trace.Sampler sampler) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider diff --git a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt index 30dbf042d7a..cc184d3cb7e 100644 --- a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt @@ -126,6 +126,12 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void +OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource +OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void +OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -175,10 +181,6 @@ abstract OpenTelemetry.Metrics.Export.MetricExporter.ExportAsync(System.Collecti abstract OpenTelemetry.Metrics.Export.MetricProcessor.FinishCollectionCycle(out System.Collections.Generic.IEnumerable metrics) -> void abstract OpenTelemetry.Metrics.Export.MetricProcessor.Process(OpenTelemetry.Metrics.Export.Metric metric) -> void abstract OpenTelemetry.Trace.Sampler.ShouldSample(in OpenTelemetry.Trace.SamplingParameters samplingParameters) -> OpenTelemetry.Trace.SamplingResult -const OpenTelemetry.Resources.Resource.ServiceInstanceIdKey = "service.instance.id" -> string -const OpenTelemetry.Resources.Resource.ServiceNameKey = "service.name" -> string -const OpenTelemetry.Resources.Resource.ServiceNamespaceKey = "service.namespace" -> string -const OpenTelemetry.Resources.Resource.ServiceVersionKey = "service.version" -> string override OpenTelemetry.BaseExportProcessor.Dispose(bool disposing) -> void override OpenTelemetry.BaseExportProcessor.OnShutdown(int timeoutMilliseconds) -> bool override OpenTelemetry.BatchExportProcessor.OnEnd(T data) -> void @@ -226,8 +228,11 @@ override abstract OpenTelemetry.BaseExportProcessor.OnEnd(T data) -> void override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.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.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 @@ -236,6 +241,7 @@ static OpenTelemetry.SuppressInstrumentationScope.Begin(bool value = true) -> Sy static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder diff --git a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt index d6562c2b128..34d75c36787 100644 --- a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt @@ -145,6 +145,12 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void +OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource +OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void +OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -194,10 +200,6 @@ abstract OpenTelemetry.Metrics.Export.MetricExporter.ExportAsync(System.Collecti abstract OpenTelemetry.Metrics.Export.MetricProcessor.FinishCollectionCycle(out System.Collections.Generic.IEnumerable metrics) -> void abstract OpenTelemetry.Metrics.Export.MetricProcessor.Process(OpenTelemetry.Metrics.Export.Metric metric) -> void abstract OpenTelemetry.Trace.Sampler.ShouldSample(in OpenTelemetry.Trace.SamplingParameters samplingParameters) -> OpenTelemetry.Trace.SamplingResult -const OpenTelemetry.Resources.Resource.ServiceInstanceIdKey = "service.instance.id" -> string -const OpenTelemetry.Resources.Resource.ServiceNameKey = "service.name" -> string -const OpenTelemetry.Resources.Resource.ServiceNamespaceKey = "service.namespace" -> string -const OpenTelemetry.Resources.Resource.ServiceVersionKey = "service.version" -> string override OpenTelemetry.BaseExportProcessor.Dispose(bool disposing) -> void override OpenTelemetry.BaseExportProcessor.OnShutdown(int timeoutMilliseconds) -> bool override OpenTelemetry.BatchExportProcessor.OnEnd(T data) -> void @@ -246,8 +248,11 @@ override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.AddOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure = null) -> Microsoft.Extensions.Logging.ILoggingBuilder static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.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.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 @@ -256,6 +261,7 @@ static OpenTelemetry.SuppressInstrumentationScope.Begin(bool value = true) -> Sy static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder diff --git a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt index d6562c2b128..34d75c36787 100644 --- a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -145,6 +145,12 @@ OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Attributes.get -> System.Collections.Generic.IEnumerable> OpenTelemetry.Resources.Resource.Merge(OpenTelemetry.Resources.Resource other) -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.Resource.Resource(System.Collections.Generic.IEnumerable> attributes) -> void +OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource +OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder +OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void +OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor OpenTelemetry.SimpleExportProcessor.SimpleExportProcessor(OpenTelemetry.BaseExporter exporter) -> void @@ -194,10 +200,6 @@ abstract OpenTelemetry.Metrics.Export.MetricExporter.ExportAsync(System.Collecti abstract OpenTelemetry.Metrics.Export.MetricProcessor.FinishCollectionCycle(out System.Collections.Generic.IEnumerable metrics) -> void abstract OpenTelemetry.Metrics.Export.MetricProcessor.Process(OpenTelemetry.Metrics.Export.Metric metric) -> void abstract OpenTelemetry.Trace.Sampler.ShouldSample(in OpenTelemetry.Trace.SamplingParameters samplingParameters) -> OpenTelemetry.Trace.SamplingResult -const OpenTelemetry.Resources.Resource.ServiceInstanceIdKey = "service.instance.id" -> string -const OpenTelemetry.Resources.Resource.ServiceNameKey = "service.name" -> string -const OpenTelemetry.Resources.Resource.ServiceNamespaceKey = "service.namespace" -> string -const OpenTelemetry.Resources.Resource.ServiceVersionKey = "service.version" -> string override OpenTelemetry.BaseExportProcessor.Dispose(bool disposing) -> void override OpenTelemetry.BaseExportProcessor.OnShutdown(int timeoutMilliseconds) -> bool override OpenTelemetry.BatchExportProcessor.OnEnd(T data) -> void @@ -246,8 +248,11 @@ override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.AddOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure = null) -> Microsoft.Extensions.Logging.ILoggingBuilder static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource -static OpenTelemetry.Resources.Resource.Create(string serviceName = null, string serviceNamespace = null, string serviceVersion = null, bool autoGenerateServiceInstanceId = true, string serviceInstanceId = null, System.Collections.Generic.IEnumerable> attributes = null) -> OpenTelemetry.Resources.Resource static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder +static OpenTelemetry.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.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 @@ -256,6 +261,7 @@ static OpenTelemetry.SuppressInstrumentationScope.Begin(bool value = true) -> Sy static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder diff --git a/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs b/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs index 236762ad098..ff60608e37e 100644 --- a/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs +++ b/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs @@ -22,17 +22,30 @@ namespace OpenTelemetry.Resources { internal class OtelEnvResourceDetector : IResourceDetector { - private const string OTelResourceEnvVarKey = "OTEL_RESOURCE_ATTRIBUTES"; + public const string OTelResourceEnvVarKey = "OTEL_RESOURCE_ATTRIBUTES"; + private const char AttributeListSplitter = ','; private const char AttributeKeyValueSplitter = '='; + private readonly string environmentVariableName; + + public OtelEnvResourceDetector(string environmentVariableName = null) + { + if (string.IsNullOrEmpty(environmentVariableName)) + { + environmentVariableName = OTelResourceEnvVarKey; + } + + this.environmentVariableName = environmentVariableName; + } + public Resource Detect() { var resource = Resource.Empty; try { - string envResourceAttributeValue = Environment.GetEnvironmentVariable(OTelResourceEnvVarKey); + string envResourceAttributeValue = Environment.GetEnvironmentVariable(this.environmentVariableName); if (!string.IsNullOrEmpty(envResourceAttributeValue)) { var attributes = ParseResourceAttributes(envResourceAttributeValue); diff --git a/src/OpenTelemetry/Resources/Resource.cs b/src/OpenTelemetry/Resources/Resource.cs index 38846e51b4a..0cfed1936e0 100644 --- a/src/OpenTelemetry/Resources/Resource.cs +++ b/src/OpenTelemetry/Resources/Resource.cs @@ -14,7 +14,6 @@ // limitations under the License. // -using System; using System.Collections.Generic; using System.Linq; using OpenTelemetry.Internal; @@ -27,16 +26,6 @@ namespace OpenTelemetry.Resources /// public class Resource { - public const string ServiceNameKey = "service.name"; - public const string ServiceNamespaceKey = "service.namespace"; - public const string ServiceInstanceIdKey = "service.instance.id"; - public const string ServiceVersionKey = "service.version"; - private const string TelemetrySdkNameKey = "telemetry.sdk.name"; - private const string TelemetrySdkLanguageKey = "telemetry.sdk.language"; - private const string TelemetrySdkVersionKey = "telemetry.sdk.version"; - - private static readonly Version Version = typeof(Resource).Assembly.GetName().Version; - // this implementation follows https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/resource/sdk.md /// @@ -66,70 +55,6 @@ public Resource(IEnumerable> attributes) /// public IEnumerable> Attributes { get; } - private static Resource TelemetryResource { get; } = new Resource(new List> - { - new KeyValuePair(TelemetrySdkNameKey, "opentelemetry"), - new KeyValuePair(TelemetrySdkLanguageKey, "dotnet"), - new KeyValuePair(TelemetrySdkVersionKey, Version.ToString()), - }); - - /// - /// Creates a new from service information following standard convention - /// https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-resource-semantic-conventions.md#service. - /// - /// Optional name of the service. - /// Optional namespace of the service. - /// Optional version of the service. - /// Specify to automatically generate a for if not supplied. - /// Optional unique identifier of the service instance. - /// Optional of attributes that describe the service. - /// Returns a new . - public static Resource Create( - string serviceName = null, - string serviceNamespace = null, - string serviceVersion = null, - bool autoGenerateServiceInstanceId = true, - string serviceInstanceId = null, - IEnumerable> attributes = null) - { - Dictionary resourceAttributes = new Dictionary(); - - if (attributes != null) - { - foreach (KeyValuePair attribute in attributes.Select(SanitizeAttribute).ToList()) - { - resourceAttributes[attribute.Key] = attribute.Value; - } - } - - if (!string.IsNullOrEmpty(serviceName)) - { - resourceAttributes.Add(ServiceNameKey, serviceName); - } - - if (!string.IsNullOrEmpty(serviceNamespace)) - { - resourceAttributes.Add(ServiceNamespaceKey, serviceNamespace); - } - - if (!string.IsNullOrEmpty(serviceVersion)) - { - resourceAttributes.Add(ServiceVersionKey, serviceVersion); - } - - if (serviceInstanceId == null && autoGenerateServiceInstanceId) - { - serviceInstanceId = Guid.NewGuid().ToString(); - } - - if (serviceInstanceId != null) - { - resourceAttributes.Add(ServiceInstanceIdKey, serviceInstanceId); - } - - return new Resource(resourceAttributes).GetResourceWithDefaultAttributes(); - } - /// /// Returns a new, merged by merging the current with the. /// other . In case of a collision the current takes precedence. @@ -162,36 +87,9 @@ public Resource Merge(Resource other) return new Resource(newAttributes); } - /// - /// Returns a new with added attributes from telemetry sdk and the . - /// - /// . - internal Resource GetResourceWithDefaultAttributes() - { - return this.Merge(TelemetryResource).Merge(new OtelEnvResourceDetector().Detect()); - } - - /// - /// Returns a new with added attributes from resource detectors in the order of the list. - /// - /// A list of . - /// . - internal Resource GetResourceFromDetectors(List detectors) - { - var resource = this; - foreach (IResourceDetector detector in detectors) - { - resource = resource.Merge(detector.Detect()); - } - - return resource; - } - private static KeyValuePair SanitizeAttribute(KeyValuePair attribute) { - string sanitizedKey = null; - object sanitizedValue = null; - + string sanitizedKey; if (attribute.Key == null) { OpenTelemetrySdkEventSource.Log.InvalidArgument("Create resource", "attribute key", "Attribute key should be non-null string."); @@ -202,6 +100,7 @@ private static KeyValuePair SanitizeAttribute(KeyValuePair +// 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. +// + +using System; +using System.Collections.Generic; + +namespace OpenTelemetry.Resources +{ + /// + /// Contains methods for building instances. + /// + public class ResourceBuilder + { + private readonly List resources = new List(); + + /// + /// Add a to the builder. + /// + /// . + /// for chaining. + public ResourceBuilder AddResource(Resource resource) + { + if (resource == null) + { + throw new ArgumentNullException(nameof(resource)); + } + + this.resources.Add(resource); + + return this; + } + + /// + /// Clears the s added to the builder. + /// + /// for chaining. + public ResourceBuilder Clear() + { + this.resources.Clear(); + + return this; + } + + /// + /// Build a merged from all the s added to the builder. + /// + /// . + public Resource Build() + { + Resource finalResource = Resource.Empty; + + foreach (Resource resource in this.resources) + { + finalResource = finalResource.Merge(resource); + } + + return finalResource; + } + + internal static ResourceBuilder CreateDefault() + => new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector(); + + internal ResourceBuilder AddDetector(IResourceDetector resourceDetector) + { + if (resourceDetector == null) + { + throw new ArgumentNullException(nameof(resourceDetector)); + } + + Resource resource = resourceDetector.Detect(); + + if (resource != null) + { + this.resources.Add(resource); + } + + return this; + } + } +} diff --git a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs new file mode 100644 index 00000000000..01c4bacf9e1 --- /dev/null +++ b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs @@ -0,0 +1,128 @@ +// +// 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. +// + +using System; +using System.Collections.Generic; +using OpenTelemetry.Resources; + +namespace OpenTelemetry +{ + /// + /// Contains extension methods for building s. + /// + public static class ResourceBuilderExtensions + { + private static readonly Version Version = typeof(Resource).Assembly.GetName().Version; + + private static Resource TelemetryResource { get; } = new Resource(new List> + { + new KeyValuePair(ResourceSemanticConventions.AttributeTelemetrySdkName, "opentelemetry"), + new KeyValuePair(ResourceSemanticConventions.AttributeTelemetrySdkLanguage, "dotnet"), + new KeyValuePair(ResourceSemanticConventions.AttributeTelemetrySdkVersion, Version.ToString()), + }); + + /// + /// Adds service information to a + /// following semantic + /// conventions. + /// + /// . + /// Name of the service. + /// Optional namespace of the service. + /// Optional version of the service. + /// Specify to automatically generate a for if not supplied. + /// Optional unique identifier of the service instance. + /// Returns for chaining. + public static ResourceBuilder AddService( + this ResourceBuilder resourceBuilder, + string serviceName, + string serviceNamespace = null, + string serviceVersion = null, + bool autoGenerateServiceInstanceId = true, + string serviceInstanceId = null) + { + Dictionary resourceAttributes = new Dictionary(); + + if (string.IsNullOrEmpty(serviceName)) + { + throw new ArgumentNullException(nameof(serviceName)); + } + + resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceName, serviceName); + + if (!string.IsNullOrEmpty(serviceNamespace)) + { + resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceNamespace, serviceNamespace); + } + + if (!string.IsNullOrEmpty(serviceVersion)) + { + resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceVersion, serviceVersion); + } + + if (serviceInstanceId == null && autoGenerateServiceInstanceId) + { + serviceInstanceId = Guid.NewGuid().ToString(); + } + + if (serviceInstanceId != null) + { + resourceAttributes.Add(ResourceSemanticConventions.AttributeServiceInstance, serviceInstanceId); + } + + return resourceBuilder.AddResource(new Resource(resourceAttributes)); + } + + /// + /// Adds service information to a + /// following semantic + /// conventions. + /// + /// . + /// Returns for chaining. + public static ResourceBuilder AddTelemetrySdk(this ResourceBuilder resourceBuilder) + { + return resourceBuilder.AddResource(TelemetryResource); + } + + /// + /// Adds attributes to a . + /// + /// . + /// An of attributes that describe the resource. + /// Returns for chaining. + public static ResourceBuilder AddAttributes(this ResourceBuilder resourceBuilder, IEnumerable> attributes) + { + return resourceBuilder.AddResource(new Resource(attributes)); + } + + /// + /// Adds resource attributes parsed from environment variables to a following semantic + /// conventions. + /// + /// . + /// The name of the environment variable to parse. Default value: . + /// Returns for chaining. + public static ResourceBuilder AddEnvironmentVariableDetector(this ResourceBuilder resourceBuilder, string environmentVariableName = null) + { + return resourceBuilder.AddDetector(new OtelEnvResourceDetector(environmentVariableName)); + } + } +} diff --git a/src/OpenTelemetry/Resources/ResourceSemanticConventions.cs b/src/OpenTelemetry/Resources/ResourceSemanticConventions.cs new file mode 100644 index 00000000000..d07d6683103 --- /dev/null +++ b/src/OpenTelemetry/Resources/ResourceSemanticConventions.cs @@ -0,0 +1,65 @@ +// +// 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. +// + +namespace OpenTelemetry.Resources +{ + internal static class ResourceSemanticConventions + { + public const string AttributeServiceName = "service.name"; + public const string AttributeServiceNamespace = "service.namespace"; + public const string AttributeServiceInstance = "service.instance.id"; + public const string AttributeServiceVersion = "service.version"; + + public const string AttributeTelemetrySdkName = "telemetry.sdk.name"; + public const string AttributeTelemetrySdkLanguage = "telemetry.sdk.language"; + public const string AttributeTelemetrySdkVersion = "telemetry.sdk.version"; + + public const string AttributeContainerName = "container.name"; + public const string AttributeContainerImage = "container.image.name"; + public const string AttributeContainerTag = "container.image.tag"; + + public const string AttributeFaasName = "faas.name"; + public const string AttributeFaasId = "faas.id"; + public const string AttributeFaasVersion = "faas.version"; + public const string AttributeFaasInstance = "faas.instance"; + + public const string AttributeK8sCluster = "k8s.cluster.name"; + public const string AttributeK8sNamespace = "k8s.namespace.name"; + public const string AttributeK8sPod = "k8s.pod.name"; + public const string AttributeK8sDeployment = "k8s.deployment.name"; + + public const string AttributeHostHostname = "host.hostname"; + public const string AttributeHostId = "host.id"; + public const string AttributeHostName = "host.name"; + public const string AttributeHostType = "host.type"; + public const string AttributeHostImageName = "host.image.name"; + public const string AttributeHostImageId = "host.image.id"; + public const string AttributeHostImageVersion = "host.image.version"; + + public const string AttributeProcessId = "process.id"; + public const string AttributeProcessExecutableName = "process.executable.name"; + public const string AttributeProcessExecutablePath = "process.executable.path"; + public const string AttributeProcessCommand = "process.command"; + public const string AttributeProcessCommandLine = "process.command_line"; + public const string AttributeProcessUsername = "process.username"; + + public const string AttributeCloudProvider = "cloud.provider"; + public const string AttributeCloudAccount = "cloud.account.id"; + public const string AttributeCloudRegion = "cloud.region"; + public const string AttributeCloudZone = "cloud.zone"; + public const string AttributeComponent = "component"; + } +} diff --git a/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs b/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs index ada8aed10e1..d922944af1a 100644 --- a/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs +++ b/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs @@ -54,6 +54,22 @@ public static TracerProviderBuilder SetResource(this TracerProviderBuilder trace return tracerProviderBuilder; } + /// + /// Registers a callback that will be executed to configure the for the . + /// + /// . + /// . + /// Returns for chaining. + public static TracerProviderBuilder ConfigureResource(this TracerProviderBuilder tracerProviderBuilder, Action configureResource) + { + if (tracerProviderBuilder is TracerProviderBuilderSdk tracerProviderBuilderSdk) + { + tracerProviderBuilderSdk.ConfigureResource(configureResource); + } + + return tracerProviderBuilder; + } + /// /// Adds processor to the provider. /// diff --git a/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs b/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs index 174a7b958d9..dea22a1f19d 100644 --- a/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs +++ b/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs @@ -13,6 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. // + using System; using System.Collections.Generic; using System.Diagnostics; @@ -30,7 +31,8 @@ internal class TracerProviderBuilderSdk : TracerProviderBuilder private readonly List> processors = new List>(); private readonly List sources = new List(); - private Resource resource = Resource.Empty.GetResourceWithDefaultAttributes(); + private ResourceBuilder resourceBuilder = ResourceBuilder.CreateDefault(); + private Action configureResources; private Sampler sampler = new ParentBasedSampler(new AlwaysOnSampler()); internal TracerProviderBuilderSdk() @@ -116,7 +118,18 @@ internal TracerProviderBuilder SetResource(Resource resource) throw new ArgumentNullException(nameof(resource)); } - this.resource = resource; + this.resourceBuilder = new ResourceBuilder().AddResource(resource); + return this; + } + + /// + /// Registers a callback that will be executed to configure the for the . + /// + /// . + /// Returns for chaining. + internal TracerProviderBuilder ConfigureResource(Action configureResource) + { + this.configureResources = configureResource ?? throw new ArgumentNullException(nameof(configureResource)); return this; } @@ -139,7 +152,15 @@ internal TracerProviderBuilder AddProcessor(BaseProcessor processor) internal TracerProvider Build() { - return new TracerProviderSdk(this.resource, this.sources, this.diagnosticSourceInstrumentationFactories, this.instrumentationFactories, this.sampler, this.processors); + this.configureResources?.Invoke(this.resourceBuilder); + + return new TracerProviderSdk( + this.resourceBuilder.Build(), + this.sources, + this.diagnosticSourceInstrumentationFactories, + this.instrumentationFactories, + this.sampler, + this.processors); } /// diff --git a/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs b/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs index 4712dfa7f11..7ab09ae3e1d 100644 --- a/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs +++ b/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs @@ -53,7 +53,7 @@ public void GlobalSetup() this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddHttpClientInstrumentation() - .SetResource(Resource.Create(ServiceName)) + .ConfigureResource(r => r.AddService(ServiceName)) .AddSource(SourceName) .Build(); diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs index 9dbbaeb4822..806177dcc32 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs @@ -57,11 +57,11 @@ public void JaegerTraceExporter_SetResource_UpdatesServiceName() Assert.Equal("TestService", process.ServiceName); - jaegerTraceExporter.SetResource(Resource.Create("MyService")); + jaegerTraceExporter.SetResource(new ResourceBuilder().AddService("MyService").Build()); Assert.Equal("MyService", process.ServiceName); - jaegerTraceExporter.SetResource(Resource.Create("MyService", "MyNamespace")); + jaegerTraceExporter.SetResource(new ResourceBuilder().AddService("MyService", "MyNamespace").Build()); Assert.Equal("MyNamespace.MyService", process.ServiceName); } @@ -109,8 +109,8 @@ public void JaegerTraceExporter_SetResource_IgnoreServiceResources() jaegerTraceExporter.SetResource(new Resource(new Dictionary { - [Resource.ServiceNameKey] = "servicename", - [Resource.ServiceNamespaceKey] = "servicenamespace", + [ResourceSemanticConventions.AttributeServiceName] = "servicename", + [ResourceSemanticConventions.AttributeServiceNamespace] = "servicenamespace", })); Assert.Null(process.Tags); diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterTest.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterTest.cs index d70becc737b..2f46f4aeeb9 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterTest.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterTest.cs @@ -83,8 +83,8 @@ public void ToOtlpResourceSpansTest(bool addResource, string optionsServiceName) new Resources.Resource( new List> { - new KeyValuePair(Resources.Resource.ServiceNameKey, "service-name"), - new KeyValuePair(Resources.Resource.ServiceNamespaceKey, "ns1"), + new KeyValuePair(Resources.ResourceSemanticConventions.AttributeServiceName, "service-name"), + new KeyValuePair(Resources.ResourceSemanticConventions.AttributeServiceNamespace, "ns1"), })); } else @@ -124,12 +124,12 @@ void RunTest(Batch batch) var oltpResource = request.ResourceSpans.First().Resource; if (addResource) { - Assert.Contains(oltpResource.Attributes, (kvp) => kvp.Key == Resources.Resource.ServiceNameKey && kvp.Value.StringValue == "service-name"); - Assert.Contains(oltpResource.Attributes, (kvp) => kvp.Key == Resources.Resource.ServiceNamespaceKey && kvp.Value.StringValue == "ns1"); + Assert.Contains(oltpResource.Attributes, (kvp) => kvp.Key == Resources.ResourceSemanticConventions.AttributeServiceName && kvp.Value.StringValue == "service-name"); + Assert.Contains(oltpResource.Attributes, (kvp) => kvp.Key == Resources.ResourceSemanticConventions.AttributeServiceNamespace && kvp.Value.StringValue == "ns1"); } else { - Assert.Contains(oltpResource.Attributes, (kvp) => kvp.Key == Resources.Resource.ServiceNameKey && kvp.Value.StringValue == optionsServiceName); + Assert.Contains(oltpResource.Attributes, (kvp) => kvp.Key == Resources.ResourceSemanticConventions.AttributeServiceName && kvp.Value.StringValue == optionsServiceName); } foreach (var instrumentationLibrarySpans in request.ResourceSpans.First().InstrumentationLibrarySpans) diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs b/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs index f19c2c91f2a..329a4161163 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs @@ -157,7 +157,7 @@ public void IntegrationTest(bool useShortTraceIds, bool useTestResource, bool is exporter.SetLocalEndpointFromResource(new Resource(new Dictionary { - [Resource.ServiceNameKey] = serviceName, + [ResourceSemanticConventions.AttributeServiceName] = serviceName, ["service.tag"] = "hello world", })); diff --git a/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs b/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs new file mode 100644 index 00000000000..a4a013dac2d --- /dev/null +++ b/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs @@ -0,0 +1,86 @@ +// +// 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. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using Xunit; + +namespace OpenTelemetry.Resources.Tests +{ + public class ResourceBuilderTests + { + [Fact] + public void ServiceResource_ServiceName() + { + var resource = new ResourceBuilder().AddService("my-service").Build(); + Assert.Equal(2, resource.Attributes.Count()); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); + Assert.Single(resource.Attributes.Where(kvp => kvp.Key == ResourceSemanticConventions.AttributeServiceName)); + Assert.True(Guid.TryParse((string)resource.Attributes.Single(kvp => kvp.Key == ResourceSemanticConventions.AttributeServiceInstance).Value, out _)); + } + + [Fact] + public void ServiceResource_ServiceNameAndInstance() + { + var resource = new ResourceBuilder().AddService("my-service", serviceInstanceId: "123").Build(); + Assert.Equal(2, resource.Attributes.Count()); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceInstance, "123"), resource.Attributes); + } + + [Fact] + public void ServiceResource_ServiceNameAndInstanceAndNamespace() + { + var resource = new ResourceBuilder().AddService("my-service", "my-namespace", serviceInstanceId: "123").Build(); + Assert.Equal(3, resource.Attributes.Count()); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceInstance, "123"), resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceNamespace, "my-namespace"), resource.Attributes); + } + + [Fact] + public void ServiceResource_ServiceNameAndInstanceAndNamespaceAndVersion() + { + var resource = new ResourceBuilder().AddService("my-service", "my-namespace", "semVer:1.2.3", serviceInstanceId: "123").Build(); + Assert.Equal(4, resource.Attributes.Count()); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceInstance, "123"), resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceNamespace, "my-namespace"), resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceVersion, "semVer:1.2.3"), resource.Attributes); + } + + [Fact] + public void ServiceResource_AutoGenerateServiceInstanceIdOff() + { + var resource = new ResourceBuilder().AddService("my-service", autoGenerateServiceInstanceId: false).Build(); + Assert.Single(resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); + } + + [Fact] + public void ClearTest() + { + var resource = new ResourceBuilder() + .AddTelemetrySdk() + .Clear() + .AddService("my-service", autoGenerateServiceInstanceId: false) + .Build(); + Assert.Single(resource.Attributes); + Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); + } + } +} diff --git a/test/OpenTelemetry.Tests/Resources/ResourceCreateTests.cs b/test/OpenTelemetry.Tests/Resources/ResourceCreateTests.cs deleted file mode 100644 index ada51a24871..00000000000 --- a/test/OpenTelemetry.Tests/Resources/ResourceCreateTests.cs +++ /dev/null @@ -1,96 +0,0 @@ -// -// 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. -// - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenTelemetry.Trace; -using Xunit; - -namespace OpenTelemetry.Resources.Tests -{ - public class ResourceCreateTests - { - [Fact] - public void ServiceResource_ServiceName() - { - var resource = Resource.Create("my-service"); - Assert.Equal(5, resource.Attributes.Count()); - Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); - Assert.Single(resource.Attributes.Where(kvp => kvp.Key == Resource.ServiceNameKey)); - Assert.True(Guid.TryParse((string)resource.Attributes.Single(kvp => kvp.Key == Resource.ServiceInstanceIdKey).Value, out _)); - this.AssertDefaultAttributes(resource); - } - - [Fact] - public void ServiceResource_ServiceNameAndInstance() - { - var resource = Resource.Create("my-service", serviceInstanceId: "123"); - Assert.Equal(5, resource.Attributes.Count()); - Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); - Assert.Contains(new KeyValuePair(Resource.ServiceInstanceIdKey, "123"), resource.Attributes); - this.AssertDefaultAttributes(resource); - } - - [Fact] - public void ServiceResource_ServiceNameAndInstanceAndNamespace() - { - var resource = Resource.Create("my-service", "my-namespace", serviceInstanceId: "123"); - Assert.Equal(6, resource.Attributes.Count()); - Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); - Assert.Contains(new KeyValuePair(Resource.ServiceInstanceIdKey, "123"), resource.Attributes); - Assert.Contains(new KeyValuePair(Resource.ServiceNamespaceKey, "my-namespace"), resource.Attributes); - this.AssertDefaultAttributes(resource); - } - - [Fact] - public void ServiceResource_ServiceNameAndInstanceAndNamespaceAndVersion() - { - var resource = Resource.Create("my-service", "my-namespace", "semVer:1.2.3", serviceInstanceId: "123"); - Assert.Equal(7, resource.Attributes.Count()); - Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); - Assert.Contains(new KeyValuePair(Resource.ServiceInstanceIdKey, "123"), resource.Attributes); - Assert.Contains(new KeyValuePair(Resource.ServiceNamespaceKey, "my-namespace"), resource.Attributes); - Assert.Contains(new KeyValuePair(Resource.ServiceVersionKey, "semVer:1.2.3"), resource.Attributes); - this.AssertDefaultAttributes(resource); - } - - [Fact] - public void ServiceResource_AutoGenerateServiceInstanceIdOff() - { - var resource = Resource.Create("my-service", autoGenerateServiceInstanceId: false); - Assert.Equal(4, resource.Attributes.Count()); - Assert.Contains(new KeyValuePair(Resource.ServiceNameKey, "my-service"), resource.Attributes); - this.AssertDefaultAttributes(resource); - } - - [Fact] - public void ServiceResource_NullParams() - { - var resource = Resource.Create(); - Assert.Equal(4, resource.Attributes.Count()); - this.AssertDefaultAttributes(resource); - } - - private void AssertDefaultAttributes(Resource resource) - { - Assert.Contains(new KeyValuePair(SemanticConventions.AttributeTelemetrySdkName, "opentelemetry"), resource.Attributes); - Assert.Contains(new KeyValuePair(SemanticConventions.AttributeTelemetrySdkLanguage, "dotnet"), resource.Attributes); - var versionAttribute = resource.Attributes.Where(pair => pair.Key.Equals("telemetry.sdk.version")); - Assert.Single(versionAttribute); - } - } -} diff --git a/test/OpenTelemetry.Tests/Resources/ResourceTest.cs b/test/OpenTelemetry.Tests/Resources/ResourceTest.cs index 6c91ec06237..cf30f2b8eb2 100644 --- a/test/OpenTelemetry.Tests/Resources/ResourceTest.cs +++ b/test/OpenTelemetry.Tests/Resources/ResourceTest.cs @@ -26,7 +26,6 @@ public class ResourceTest : IDisposable private const string KeyName = "key"; private const string ValueName = "value"; private const string OtelEnvVarKey = "OTEL_RESOURCE_ATTRIBUTES"; - private static readonly Random Random = new Random(); public ResourceTest() { @@ -339,11 +338,10 @@ public void MergeResource_SecondaryCanOverridePrimaryEmptyAttributeValue() public void GetResourceWithDefaultAttributes_EmptyResource() { // Arrange - var resource = Resource.Empty; - var new_resource = resource.GetResourceWithDefaultAttributes(); + var resource = new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector().Build(); // Assert - var attributes = new_resource.Attributes; + var attributes = resource.Attributes; Assert.Equal(3, attributes.Count()); ValidateTelemetrySdkAttributes(attributes); } @@ -352,11 +350,10 @@ public void GetResourceWithDefaultAttributes_EmptyResource() public void GetResourceWithDefaultAttributes_ResourceWithAttrs() { // Arrange - var resource = new Resource(this.CreateAttributes(2)); - var new_resource = resource.GetResourceWithDefaultAttributes(); + var resource = new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build(); // Assert - var attributes = new_resource.Attributes; + var attributes = resource.Attributes; Assert.Equal(5, attributes.Count()); ValidateAttributes(attributes, 0, 1); ValidateTelemetrySdkAttributes(attributes); @@ -367,11 +364,10 @@ public void GetResourceWithDefaultAttributes_WithEnvVar() { // Arrange Environment.SetEnvironmentVariable(OtelEnvVarKey, "EVKey1=EVVal1,EVKey2=EVVal2"); - var resource = new Resource(this.CreateAttributes(2)); - var new_resource = resource.GetResourceWithDefaultAttributes(); + var resource = new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build(); // Assert - var attributes = new_resource.Attributes; + var attributes = resource.Attributes; Assert.Equal(7, attributes.Count()); ValidateAttributes(attributes, 0, 1); ValidateTelemetrySdkAttributes(attributes); @@ -379,26 +375,6 @@ public void GetResourceWithDefaultAttributes_WithEnvVar() Assert.Contains(new KeyValuePair("EVKey2", "EVVal2"), attributes); } - [Fact] - public void GetResourceFromDetectors_OtelEnvDetector() - { - // Arrange - Environment.SetEnvironmentVariable(OtelEnvVarKey, "EVKey11=EVVal11,EVKey22=EVVal22"); - var detectors = new List - { - new OtelEnvResourceDetector(), - }; - var resource = new Resource(this.CreateAttributes(2)); - var new_resource = resource.GetResourceFromDetectors(detectors); - - // Assert - var attributes = new_resource.Attributes; - Assert.Equal(4, attributes.Count()); - ValidateAttributes(attributes, 0, 1); - Assert.Contains(new KeyValuePair("EVKey11", "EVVal11"), attributes); - Assert.Contains(new KeyValuePair("EVKey22", "EVVal22"), attributes); - } - public void Dispose() { Environment.SetEnvironmentVariable(OtelEnvVarKey, null); @@ -440,13 +416,6 @@ private static void ValidateTelemetrySdkAttributes(IEnumerable s[Random.Next(s.Length)]).ToArray()); - } - private Dictionary CreateAttributes(int attributeCount, int startIndex = 0) { var attributes = new Dictionary(); From 31e342364a69f4e0c86bc969c3ed4a23d68687ea Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 13 Nov 2020 22:13:37 -0800 Subject: [PATCH 04/14] CHANGELOG update. --- src/OpenTelemetry/CHANGELOG.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index efa00f629cc..94ed6533746 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -10,12 +10,15 @@ * `Resource` is no longer added to observed `Activity` objects as a `CustomProperty`. ([#1463](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1463)) -* Remove RentrantExportProcessor as it is not required by spec. +* Remove `RentrantExportProcessor` as it is not required by spec. * `ActivitySourceAdapter` supports setting `ActivitySource` for Activities created without `ActivitySource`. ([#1515](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1515/)) - * Implemented Shutdown for TracerProvider - ([#1489](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1489)) +* Implemented `Shutdown` for `TracerProvider`. + ([#1489](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1489)) +* `OpenTelemetry.Resources.Resources.CreateServiceResource` has been removed in + favor of the `ResourceBuilder` API. + ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)) ## 0.8.0-beta.1 From a101d9d2666b58538430afcefe5bf58dfb8a1ecd Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 13 Nov 2020 22:14:03 -0800 Subject: [PATCH 05/14] Tweaked variable name. --- src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs b/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs index dea22a1f19d..3a4efce437d 100644 --- a/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs +++ b/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs @@ -32,7 +32,7 @@ internal class TracerProviderBuilderSdk : TracerProviderBuilder private readonly List> processors = new List>(); private readonly List sources = new List(); private ResourceBuilder resourceBuilder = ResourceBuilder.CreateDefault(); - private Action configureResources; + private Action configureResource; private Sampler sampler = new ParentBasedSampler(new AlwaysOnSampler()); internal TracerProviderBuilderSdk() @@ -129,7 +129,7 @@ internal TracerProviderBuilder SetResource(Resource resource) /// Returns for chaining. internal TracerProviderBuilder ConfigureResource(Action configureResource) { - this.configureResources = configureResource ?? throw new ArgumentNullException(nameof(configureResource)); + this.configureResource = configureResource ?? throw new ArgumentNullException(nameof(configureResource)); return this; } @@ -152,7 +152,7 @@ internal TracerProviderBuilder AddProcessor(BaseProcessor processor) internal TracerProvider Build() { - this.configureResources?.Invoke(this.resourceBuilder); + this.configureResource?.Invoke(this.resourceBuilder); return new TracerProviderSdk( this.resourceBuilder.Build(), From 30c836ee9d1d15285c5d3f9aa73ed8d4d3602613 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 13 Nov 2020 22:38:46 -0800 Subject: [PATCH 06/14] CHANGELOG updates. --- src/OpenTelemetry/CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index 94ed6533746..9d8caa47ae5 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -19,6 +19,14 @@ * `OpenTelemetry.Resources.Resources.CreateServiceResource` has been removed in favor of the `ResourceBuilder` API. ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)) +* By default `TracerProvider` will set a `Resource` containing: + * `telemetry.sdk.name` = `opentelemetry` + * `telemetry.sdk.language` = `dotnet` + * `telemetry.sdk.version` = [SDK version] + See the [Telemetry + SDK](https://github.com/open-telemetry/opentelemetry-specification/tree/master/specification/resource/semantic_conventions#telemetry-sdk) + specification for details. + ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)) ## 0.8.0-beta.1 @@ -27,7 +35,6 @@ Released 2020-Nov-5 * TracerProviderBuilder API changes Renamed AddInstrumentation to AddDiagnosticSourceInstrumentation and made internal. Added AddInstrumentation ([#1454](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1454)) - * DiagnosticSource subscription helper classes (DiagnosticSourceSubscriber, ListenerHandler,PropertyFetcher) are made internal. From 5845ecbf86c330192c4dcfcc79b159bba53f112f Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 13 Nov 2020 22:42:41 -0800 Subject: [PATCH 07/14] Removed OtelEnvResourceDetector from default Resource. Fixed some XML comments. --- src/OpenTelemetry/Resources/ResourceBuilder.cs | 2 +- src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/OpenTelemetry/Resources/ResourceBuilder.cs b/src/OpenTelemetry/Resources/ResourceBuilder.cs index 1cb83dc33aa..f596df169be 100644 --- a/src/OpenTelemetry/Resources/ResourceBuilder.cs +++ b/src/OpenTelemetry/Resources/ResourceBuilder.cs @@ -71,7 +71,7 @@ public Resource Build() } internal static ResourceBuilder CreateDefault() - => new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector(); + => new ResourceBuilder().AddTelemetrySdk(); internal ResourceBuilder AddDetector(IResourceDetector resourceDetector) { diff --git a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs index 01c4bacf9e1..75c8d96a04e 100644 --- a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs +++ b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs @@ -112,10 +112,10 @@ public static ResourceBuilder AddAttributes(this ResourceBuilder resourceBuilder } /// - /// Adds resource attributes parsed from environment variables to a following semantic - /// conventions. + /// Adds resource attributes parsed from an environment variable to a + /// following the Resource + /// SDK. /// /// . /// The name of the environment variable to parse. Default value: . From 6d152c418bbc23d1565b73de407e1829eac7c570 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 13 Nov 2020 22:57:07 -0800 Subject: [PATCH 08/14] Past tense fix for CHANGELOG. --- src/OpenTelemetry/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index 9d8caa47ae5..d1aba58ca51 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -10,7 +10,7 @@ * `Resource` is no longer added to observed `Activity` objects as a `CustomProperty`. ([#1463](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1463)) -* Remove `RentrantExportProcessor` as it is not required by spec. +* Removed `RentrantExportProcessor` as it is not required by spec. * `ActivitySourceAdapter` supports setting `ActivitySource` for Activities created without `ActivitySource`. ([#1515](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1515/)) From f303e51f904baeba36f2d52432883a106766e68a Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 13 Nov 2020 23:03:19 -0800 Subject: [PATCH 09/14] CHANGELOG formatting. --- src/OpenTelemetry/CHANGELOG.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index d1aba58ca51..890a5847ae5 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -19,14 +19,13 @@ * `OpenTelemetry.Resources.Resources.CreateServiceResource` has been removed in favor of the `ResourceBuilder` API. ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)) -* By default `TracerProvider` will set a `Resource` containing: +* By default `TracerProvider` will set a `Resource` containing [Telemetry + SDK](https://github.com/open-telemetry/opentelemetry-specification/tree/master/specification/resource/semantic_conventions#telemetry-sdk) + details + ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)): * `telemetry.sdk.name` = `opentelemetry` * `telemetry.sdk.language` = `dotnet` - * `telemetry.sdk.version` = [SDK version] - See the [Telemetry - SDK](https://github.com/open-telemetry/opentelemetry-specification/tree/master/specification/resource/semantic_conventions#telemetry-sdk) - specification for details. - ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)) + * `telemetry.sdk.version` = [SDK version] ## 0.8.0-beta.1 From 2f13799db8eac613d3c5073e6505c53b48144b5b Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 16 Nov 2020 20:32:10 -0800 Subject: [PATCH 10/14] Removed the ability to change the environment variable name for OtelEnvResourceDetector. --- .../.publicApi/net452/PublicAPI.Unshipped.txt | 2 +- .../.publicApi/net46/PublicAPI.Unshipped.txt | 2 +- .../.publicApi/net461/PublicAPI.Unshipped.txt | 2 +- .../netstandard2.0/PublicAPI.Unshipped.txt | 2 +- .../Resources/OtelEnvResourceDetector.cs | 17 ++--------------- .../Resources/ResourceBuilderExtensions.cs | 5 ++--- 6 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt index 7211051cb05..6a8458f907f 100644 --- a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt @@ -228,9 +228,9 @@ override abstract OpenTelemetry.BaseExportProcessor.OnEnd(T data) -> void override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder -static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder diff --git a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt index cc184d3cb7e..e321e887d1f 100644 --- a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt @@ -228,9 +228,9 @@ override abstract OpenTelemetry.BaseExportProcessor.OnEnd(T data) -> void override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder -static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder diff --git a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt index 34d75c36787..79f98bb1994 100644 --- a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt @@ -248,9 +248,9 @@ override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.AddOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure = null) -> Microsoft.Extensions.Logging.ILoggingBuilder static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder -static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder diff --git a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt index 34d75c36787..79f98bb1994 100644 --- a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -248,9 +248,9 @@ override sealed OpenTelemetry.BaseExportProcessor.OnStart(T data) -> void readonly OpenTelemetry.BaseExportProcessor.exporter -> OpenTelemetry.BaseExporter static Microsoft.Extensions.Logging.OpenTelemetryLoggingExtensions.AddOpenTelemetry(this Microsoft.Extensions.Logging.ILoggingBuilder builder, System.Action configure = null) -> Microsoft.Extensions.Logging.ILoggingBuilder static OpenTelemetry.ProviderExtensions.GetResource(this OpenTelemetry.BaseProvider baseProvider) -> OpenTelemetry.Resources.Resource +static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Resource static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder -static OpenTelemetry.ResourceBuilderExtensions.AddEnvironmentVariableDetector(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, string environmentVariableName = null) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.ResourceBuilderExtensions.AddTelemetrySdk(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder diff --git a/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs b/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs index ff60608e37e..236762ad098 100644 --- a/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs +++ b/src/OpenTelemetry/Resources/OtelEnvResourceDetector.cs @@ -22,30 +22,17 @@ namespace OpenTelemetry.Resources { internal class OtelEnvResourceDetector : IResourceDetector { - public const string OTelResourceEnvVarKey = "OTEL_RESOURCE_ATTRIBUTES"; - + private const string OTelResourceEnvVarKey = "OTEL_RESOURCE_ATTRIBUTES"; private const char AttributeListSplitter = ','; private const char AttributeKeyValueSplitter = '='; - private readonly string environmentVariableName; - - public OtelEnvResourceDetector(string environmentVariableName = null) - { - if (string.IsNullOrEmpty(environmentVariableName)) - { - environmentVariableName = OTelResourceEnvVarKey; - } - - this.environmentVariableName = environmentVariableName; - } - public Resource Detect() { var resource = Resource.Empty; try { - string envResourceAttributeValue = Environment.GetEnvironmentVariable(this.environmentVariableName); + string envResourceAttributeValue = Environment.GetEnvironmentVariable(OTelResourceEnvVarKey); if (!string.IsNullOrEmpty(envResourceAttributeValue)) { var attributes = ParseResourceAttributes(envResourceAttributeValue); diff --git a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs index 75c8d96a04e..991cb132de8 100644 --- a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs +++ b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs @@ -118,11 +118,10 @@ public static ResourceBuilder AddAttributes(this ResourceBuilder resourceBuilder /// SDK. /// /// . - /// The name of the environment variable to parse. Default value: . /// Returns for chaining. - public static ResourceBuilder AddEnvironmentVariableDetector(this ResourceBuilder resourceBuilder, string environmentVariableName = null) + public static ResourceBuilder AddEnvironmentVariableDetector(this ResourceBuilder resourceBuilder) { - return resourceBuilder.AddDetector(new OtelEnvResourceDetector(environmentVariableName)); + return resourceBuilder.AddDetector(new OtelEnvResourceDetector()); } } } From 646cdd61ae0e907ee7d7e07eda49d252415dabdc Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 16 Nov 2020 20:46:59 -0800 Subject: [PATCH 11/14] Updates for recent refactors. --- .../OpenTelemetry.Exporter.Jaeger.csproj | 4 ++-- .../OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj | 4 ++-- .../OpenTelemetry.Exporter.Zipkin.csproj | 4 ++-- .../{Exporter => Internal}/PeerServiceResolver.cs | 0 .../{Resources => Internal}/ResourceSemanticConventions.cs | 0 5 files changed, 6 insertions(+), 6 deletions(-) rename src/OpenTelemetry/{Exporter => Internal}/PeerServiceResolver.cs (100%) rename src/OpenTelemetry/{Resources => Internal}/ResourceSemanticConventions.cs (100%) diff --git a/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj b/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj index b4f5a60992d..032b860fa59 100644 --- a/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj +++ b/src/OpenTelemetry.Exporter.Jaeger/OpenTelemetry.Exporter.Jaeger.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj index 78b1f2df427..c6b00e0d914 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj index f35c65d0db4..4e39adbcc5e 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj +++ b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/src/OpenTelemetry/Exporter/PeerServiceResolver.cs b/src/OpenTelemetry/Internal/PeerServiceResolver.cs similarity index 100% rename from src/OpenTelemetry/Exporter/PeerServiceResolver.cs rename to src/OpenTelemetry/Internal/PeerServiceResolver.cs diff --git a/src/OpenTelemetry/Resources/ResourceSemanticConventions.cs b/src/OpenTelemetry/Internal/ResourceSemanticConventions.cs similarity index 100% rename from src/OpenTelemetry/Resources/ResourceSemanticConventions.cs rename to src/OpenTelemetry/Internal/ResourceSemanticConventions.cs From 5676157272521806642b9efe2b7f01ee6d5db371 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 16 Nov 2020 22:38:00 -0800 Subject: [PATCH 12/14] Code review. --- .../.publicApi/net452/PublicAPI.Unshipped.txt | 5 +-- .../.publicApi/net46/PublicAPI.Unshipped.txt | 5 +-- .../.publicApi/net461/PublicAPI.Unshipped.txt | 5 +-- .../netstandard2.0/PublicAPI.Unshipped.txt | 5 +-- src/OpenTelemetry/CHANGELOG.md | 5 ++- .../Resources/ResourceBuilder.cs | 24 ++++++++++++-- .../Trace/TracerProviderBuilderExtensions.cs | 6 ++-- .../Trace/TracerProviderBuilderSdk.cs | 32 +++---------------- .../JaegerExporterTests.cs | 4 +-- .../Resources/ResourceBuilderTests.cs | 12 +++---- .../Resources/ResourceTest.cs | 6 ++-- 11 files changed, 55 insertions(+), 54 deletions(-) diff --git a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt index 6a8458f907f..b666fa11289 100644 --- a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt @@ -130,7 +130,6 @@ OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder -OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor @@ -233,6 +232,8 @@ static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Res static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.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.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void @@ -244,7 +245,7 @@ static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.Sampli static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.Build(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Trace.TracerProviderBuilder +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetSampler(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Trace.Sampler sampler) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool diff --git a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt index e321e887d1f..7a7ac142df1 100644 --- a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt @@ -130,7 +130,6 @@ OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder -OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor @@ -233,6 +232,8 @@ static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Res static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.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.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void @@ -242,11 +243,11 @@ static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.Build(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder) -> OpenTelemetry.Trace.TracerProvider -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetSampler(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Trace.Sampler sampler) -> OpenTelemetry.Trace.TracerProviderBuilder virtual OpenTelemetry.BaseExporter.Dispose(bool disposing) -> void virtual OpenTelemetry.BaseExporter.OnShutdown(int timeoutMilliseconds) -> bool diff --git a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt index 79f98bb1994..ccf2383d4db 100644 --- a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt @@ -149,7 +149,6 @@ OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder -OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor @@ -253,6 +252,8 @@ static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Res static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.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.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void @@ -262,11 +263,11 @@ static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.Build(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder) -> OpenTelemetry.Trace.TracerProvider -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetSampler(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Trace.Sampler sampler) -> OpenTelemetry.Trace.TracerProviderBuilder virtual OpenTelemetry.BaseExporter.Dispose(bool disposing) -> void virtual OpenTelemetry.BaseExporter.OnShutdown(int timeoutMilliseconds) -> bool diff --git a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt index 79f98bb1994..ccf2383d4db 100644 --- a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -149,7 +149,6 @@ OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.AddResource(OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Resources.ResourceBuilder OpenTelemetry.Resources.ResourceBuilder.Build() -> OpenTelemetry.Resources.Resource OpenTelemetry.Resources.ResourceBuilder.Clear() -> OpenTelemetry.Resources.ResourceBuilder -OpenTelemetry.Resources.ResourceBuilder.ResourceBuilder() -> void OpenTelemetry.ResourceBuilderExtensions OpenTelemetry.Sdk OpenTelemetry.SimpleExportProcessor @@ -253,6 +252,8 @@ static OpenTelemetry.Resources.Resource.Empty.get -> OpenTelemetry.Resources.Res static OpenTelemetry.ResourceBuilderExtensions.AddAttributes(this OpenTelemetry.Resources.ResourceBuilder resourceBuilder, System.Collections.Generic.IEnumerable> attributes) -> OpenTelemetry.Resources.ResourceBuilder static OpenTelemetry.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.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.Sdk.CreateMeterProviderBuilder() -> OpenTelemetry.Metrics.MeterProviderBuilder static OpenTelemetry.Sdk.CreateTracerProviderBuilder() -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Sdk.SetDefaultTextMapPropagator(OpenTelemetry.Context.Propagation.TextMapPropagator textMapPropagator) -> void @@ -262,11 +263,11 @@ static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder +static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.Build(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder) -> OpenTelemetry.Trace.TracerProvider -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.Resource resource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetSampler(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Trace.Sampler sampler) -> OpenTelemetry.Trace.TracerProviderBuilder virtual OpenTelemetry.BaseExporter.Dispose(bool disposing) -> void virtual OpenTelemetry.BaseExporter.OnShutdown(int timeoutMilliseconds) -> bool diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index 890a5847ae5..77dcc759edf 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -16,9 +16,12 @@ ([#1515](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1515/)) * Implemented `Shutdown` for `TracerProvider`. ([#1489](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1489)) -* `OpenTelemetry.Resources.Resources.CreateServiceResource` has been removed in +* `Resources.CreateServiceResource` has been removed in favor of the `ResourceBuilder` API. ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)) +* `TracerProviderBuilder.SetResource` has been changed to + `TracerProviderBuilder.SetResourceBuilder`. + ([#1533](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1533)) * By default `TracerProvider` will set a `Resource` containing [Telemetry SDK](https://github.com/open-telemetry/opentelemetry-specification/tree/master/specification/resource/semantic_conventions#telemetry-sdk) details diff --git a/src/OpenTelemetry/Resources/ResourceBuilder.cs b/src/OpenTelemetry/Resources/ResourceBuilder.cs index f596df169be..4da0fcc976f 100644 --- a/src/OpenTelemetry/Resources/ResourceBuilder.cs +++ b/src/OpenTelemetry/Resources/ResourceBuilder.cs @@ -26,6 +26,27 @@ public class ResourceBuilder { private readonly List resources = new List(); + private ResourceBuilder() + { + } + + /// + /// Creates a instance with SDK defaults + /// added. See resource + /// semantic conventions for details. + /// + /// Created . + public static ResourceBuilder CreateDefault() + => new ResourceBuilder().AddTelemetrySdk(); // TODO: Seek spec clarify on whether or not OtelEnvResourceDetector should be added by default. + + /// + /// Creates an empty instance. + /// + /// Created . + public static ResourceBuilder CreateEmpty() + => new ResourceBuilder(); + /// /// Add a to the builder. /// @@ -70,9 +91,6 @@ public Resource Build() return finalResource; } - internal static ResourceBuilder CreateDefault() - => new ResourceBuilder().AddTelemetrySdk(); - internal ResourceBuilder AddDetector(IResourceDetector resourceDetector) { if (resourceDetector == null) diff --git a/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs b/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs index d922944af1a..b8e2f14553e 100644 --- a/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs +++ b/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs @@ -42,13 +42,13 @@ public static TracerProviderBuilder SetSampler(this TracerProviderBuilder tracer /// Sets the describing the app associated with all traces. Overwrites currently set resource. /// /// TracerProviderBuilder instance. - /// Resource to be associate with all traces. + /// to be associate with all traces. /// Returns for chaining. - public static TracerProviderBuilder SetResource(this TracerProviderBuilder tracerProviderBuilder, Resource resource) + public static TracerProviderBuilder SetResourceBuilder(this TracerProviderBuilder tracerProviderBuilder, ResourceBuilder resourceBuilder) { if (tracerProviderBuilder is TracerProviderBuilderSdk tracerProviderBuilderSdk) { - tracerProviderBuilderSdk.SetResource(resource); + tracerProviderBuilderSdk.SetResourceBuilder(resourceBuilder); } return tracerProviderBuilder; diff --git a/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs b/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs index 3a4efce437d..89a7818e5f7 100644 --- a/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs +++ b/src/OpenTelemetry/Trace/TracerProviderBuilderSdk.cs @@ -32,7 +32,6 @@ internal class TracerProviderBuilderSdk : TracerProviderBuilder private readonly List> processors = new List>(); private readonly List sources = new List(); private ResourceBuilder resourceBuilder = ResourceBuilder.CreateDefault(); - private Action configureResource; private Sampler sampler = new ParentBasedSampler(new AlwaysOnSampler()); internal TracerProviderBuilderSdk() @@ -97,39 +96,18 @@ public override TracerProviderBuilder AddSource(params string[] names) /// Returns for chaining. internal TracerProviderBuilder SetSampler(Sampler sampler) { - if (sampler == null) - { - throw new ArgumentNullException(nameof(sampler)); - } - - this.sampler = sampler; + this.sampler = sampler ?? throw new ArgumentNullException(nameof(sampler)); return this; } /// /// Sets the describing the app associated with all traces. Overwrites currently set resource. /// - /// Resource to be associate with all traces. - /// Returns for chaining. - internal TracerProviderBuilder SetResource(Resource resource) - { - if (resource == null) - { - throw new ArgumentNullException(nameof(resource)); - } - - this.resourceBuilder = new ResourceBuilder().AddResource(resource); - return this; - } - - /// - /// Registers a callback that will be executed to configure the for the . - /// - /// . + /// to be associate with all traces. /// Returns for chaining. - internal TracerProviderBuilder ConfigureResource(Action configureResource) + internal TracerProviderBuilder SetResourceBuilder(ResourceBuilder resourceBuilder) { - this.configureResource = configureResource ?? throw new ArgumentNullException(nameof(configureResource)); + this.resourceBuilder = resourceBuilder ?? throw new ArgumentNullException(nameof(resourceBuilder)); return this; } @@ -152,8 +130,6 @@ internal TracerProviderBuilder AddProcessor(BaseProcessor processor) internal TracerProvider Build() { - this.configureResource?.Invoke(this.resourceBuilder); - return new TracerProviderSdk( this.resourceBuilder.Build(), this.sources, diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs index 806177dcc32..334b9267150 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerExporterTests.cs @@ -57,11 +57,11 @@ public void JaegerTraceExporter_SetResource_UpdatesServiceName() Assert.Equal("TestService", process.ServiceName); - jaegerTraceExporter.SetResource(new ResourceBuilder().AddService("MyService").Build()); + jaegerTraceExporter.SetResource(ResourceBuilder.CreateEmpty().AddService("MyService").Build()); Assert.Equal("MyService", process.ServiceName); - jaegerTraceExporter.SetResource(new ResourceBuilder().AddService("MyService", "MyNamespace").Build()); + jaegerTraceExporter.SetResource(ResourceBuilder.CreateEmpty().AddService("MyService", "MyNamespace").Build()); Assert.Equal("MyNamespace.MyService", process.ServiceName); } diff --git a/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs b/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs index a4a013dac2d..96d951bd54f 100644 --- a/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs +++ b/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs @@ -26,7 +26,7 @@ public class ResourceBuilderTests [Fact] public void ServiceResource_ServiceName() { - var resource = new ResourceBuilder().AddService("my-service").Build(); + var resource = ResourceBuilder.CreateEmpty().AddService("my-service").Build(); Assert.Equal(2, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); Assert.Single(resource.Attributes.Where(kvp => kvp.Key == ResourceSemanticConventions.AttributeServiceName)); @@ -36,7 +36,7 @@ public void ServiceResource_ServiceName() [Fact] public void ServiceResource_ServiceNameAndInstance() { - var resource = new ResourceBuilder().AddService("my-service", serviceInstanceId: "123").Build(); + var resource = ResourceBuilder.CreateEmpty().AddService("my-service", serviceInstanceId: "123").Build(); Assert.Equal(2, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceInstance, "123"), resource.Attributes); @@ -45,7 +45,7 @@ public void ServiceResource_ServiceNameAndInstance() [Fact] public void ServiceResource_ServiceNameAndInstanceAndNamespace() { - var resource = new ResourceBuilder().AddService("my-service", "my-namespace", serviceInstanceId: "123").Build(); + var resource = ResourceBuilder.CreateEmpty().AddService("my-service", "my-namespace", serviceInstanceId: "123").Build(); Assert.Equal(3, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceInstance, "123"), resource.Attributes); @@ -55,7 +55,7 @@ public void ServiceResource_ServiceNameAndInstanceAndNamespace() [Fact] public void ServiceResource_ServiceNameAndInstanceAndNamespaceAndVersion() { - var resource = new ResourceBuilder().AddService("my-service", "my-namespace", "semVer:1.2.3", serviceInstanceId: "123").Build(); + var resource = ResourceBuilder.CreateEmpty().AddService("my-service", "my-namespace", "semVer:1.2.3", serviceInstanceId: "123").Build(); Assert.Equal(4, resource.Attributes.Count()); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceInstance, "123"), resource.Attributes); @@ -66,7 +66,7 @@ public void ServiceResource_ServiceNameAndInstanceAndNamespaceAndVersion() [Fact] public void ServiceResource_AutoGenerateServiceInstanceIdOff() { - var resource = new ResourceBuilder().AddService("my-service", autoGenerateServiceInstanceId: false).Build(); + var resource = ResourceBuilder.CreateEmpty().AddService("my-service", autoGenerateServiceInstanceId: false).Build(); Assert.Single(resource.Attributes); Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); } @@ -74,7 +74,7 @@ public void ServiceResource_AutoGenerateServiceInstanceIdOff() [Fact] public void ClearTest() { - var resource = new ResourceBuilder() + var resource = ResourceBuilder.CreateEmpty() .AddTelemetrySdk() .Clear() .AddService("my-service", autoGenerateServiceInstanceId: false) diff --git a/test/OpenTelemetry.Tests/Resources/ResourceTest.cs b/test/OpenTelemetry.Tests/Resources/ResourceTest.cs index cf30f2b8eb2..dea22152802 100644 --- a/test/OpenTelemetry.Tests/Resources/ResourceTest.cs +++ b/test/OpenTelemetry.Tests/Resources/ResourceTest.cs @@ -338,7 +338,7 @@ public void MergeResource_SecondaryCanOverridePrimaryEmptyAttributeValue() public void GetResourceWithDefaultAttributes_EmptyResource() { // Arrange - var resource = new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector().Build(); + var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().Build(); // Assert var attributes = resource.Attributes; @@ -350,7 +350,7 @@ public void GetResourceWithDefaultAttributes_EmptyResource() public void GetResourceWithDefaultAttributes_ResourceWithAttrs() { // Arrange - var resource = new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build(); + var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build(); // Assert var attributes = resource.Attributes; @@ -364,7 +364,7 @@ public void GetResourceWithDefaultAttributes_WithEnvVar() { // Arrange Environment.SetEnvironmentVariable(OtelEnvVarKey, "EVKey1=EVVal1,EVKey2=EVVal2"); - var resource = new ResourceBuilder().AddTelemetrySdk().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build(); + var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build(); // Assert var attributes = resource.Attributes; From a873c009dc4709875d2700e8cf9a2a576ceaa804 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 16 Nov 2020 23:10:36 -0800 Subject: [PATCH 13/14] Example updates. --- examples/Console/TestConsoleExporter.cs | 2 +- examples/Console/TestHttpClient.cs | 2 +- .../Console/TestOTelShimWithConsoleExporter.cs | 2 +- .../TestOpenTracingWithConsoleExporter.cs | 2 +- .../.publicApi/net452/PublicAPI.Unshipped.txt | 1 - .../.publicApi/net46/PublicAPI.Unshipped.txt | 1 - .../.publicApi/net461/PublicAPI.Unshipped.txt | 1 - .../netstandard2.0/PublicAPI.Unshipped.txt | 1 - .../Trace/TracerProviderBuilderExtensions.cs | 16 ---------------- .../InstrumentedHttpClientBenchmark.cs | 2 +- 10 files changed, 5 insertions(+), 25 deletions(-) diff --git a/examples/Console/TestConsoleExporter.cs b/examples/Console/TestConsoleExporter.cs index bad5313a0ea..4a095ef001d 100644 --- a/examples/Console/TestConsoleExporter.cs +++ b/examples/Console/TestConsoleExporter.cs @@ -35,7 +35,7 @@ internal static object Run(ConsoleOptions options) // and use a custom MyProcessor, along with Console exporter. using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .ConfigureResource(r => r.AddService("MyServiceName")) + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyServiceName")) .AddProcessor(new MyProcessor()) // This must be added before ConsoleExporter .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestHttpClient.cs b/examples/Console/TestHttpClient.cs index 8d66fff684f..1e08e48d5d4 100644 --- a/examples/Console/TestHttpClient.cs +++ b/examples/Console/TestHttpClient.cs @@ -34,7 +34,7 @@ internal static object Run() using var openTelemetry = Sdk.CreateTracerProviderBuilder() .AddHttpClientInstrumentation() - .ConfigureResource(r => r.AddService("http-service-example")) + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("http-service-example")) .AddSource("http-client-test") .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestOTelShimWithConsoleExporter.cs b/examples/Console/TestOTelShimWithConsoleExporter.cs index 792d47f7eef..cb439b8a041 100644 --- a/examples/Console/TestOTelShimWithConsoleExporter.cs +++ b/examples/Console/TestOTelShimWithConsoleExporter.cs @@ -28,7 +28,7 @@ internal static object Run(OpenTelemetryShimOptions options) // and use a single pipeline with a custom MyProcessor, and Console exporter. using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .ConfigureResource(r => r.AddService("MyServiceName")) + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyServiceName")) .AddConsoleExporter() .Build(); diff --git a/examples/Console/TestOpenTracingWithConsoleExporter.cs b/examples/Console/TestOpenTracingWithConsoleExporter.cs index 97af91e38d9..5758c89640f 100644 --- a/examples/Console/TestOpenTracingWithConsoleExporter.cs +++ b/examples/Console/TestOpenTracingWithConsoleExporter.cs @@ -31,7 +31,7 @@ internal static object Run(OpenTracingShimOptions options) // and use Console exporter. using var openTelemetry = Sdk.CreateTracerProviderBuilder() .AddSource("MyCompany.MyProduct.MyWebServer") - .ConfigureResource(r => r.AddService("MyServiceName")) + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyServiceName")) .AddConsoleExporter() .Build(); diff --git a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt index b666fa11289..ac025c49982 100644 --- a/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net452/PublicAPI.Unshipped.txt @@ -244,7 +244,6 @@ static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.Sampli static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.TracerProviderBuilderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.Build(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder) -> OpenTelemetry.Trace.TracerProvider -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetSampler(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Trace.Sampler sampler) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider diff --git a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt index 7a7ac142df1..4f46407ac69 100644 --- a/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net46/PublicAPI.Unshipped.txt @@ -242,7 +242,6 @@ static OpenTelemetry.SuppressInstrumentationScope.Begin(bool value = true) -> Sy static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool diff --git a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt index ccf2383d4db..d2fb0f45bb5 100644 --- a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt @@ -262,7 +262,6 @@ static OpenTelemetry.SuppressInstrumentationScope.Begin(bool value = true) -> Sy static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool diff --git a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt index ccf2383d4db..d2fb0f45bb5 100644 --- a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -262,7 +262,6 @@ static OpenTelemetry.SuppressInstrumentationScope.Begin(bool value = true) -> Sy static OpenTelemetry.SuppressInstrumentationScope.Enter() -> int static OpenTelemetry.Trace.SamplingResult.operator !=(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool static OpenTelemetry.Trace.SamplingResult.operator ==(OpenTelemetry.Trace.SamplingResult decision1, OpenTelemetry.Trace.SamplingResult decision2) -> bool -static OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureResource(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, System.Action configureResource) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderBuilderExtensions.SetResourceBuilder(this OpenTelemetry.Trace.TracerProviderBuilder tracerProviderBuilder, OpenTelemetry.Resources.ResourceBuilder resourceBuilder) -> OpenTelemetry.Trace.TracerProviderBuilder static OpenTelemetry.Trace.TracerProviderExtensions.AddProcessor(this OpenTelemetry.Trace.TracerProvider provider, OpenTelemetry.BaseProcessor processor) -> OpenTelemetry.Trace.TracerProvider static OpenTelemetry.Trace.TracerProviderExtensions.Shutdown(this OpenTelemetry.Trace.TracerProvider provider, int timeoutMilliseconds = -1) -> bool diff --git a/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs b/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs index b8e2f14553e..32bbfc64e25 100644 --- a/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs +++ b/src/OpenTelemetry/Trace/TracerProviderBuilderExtensions.cs @@ -54,22 +54,6 @@ public static TracerProviderBuilder SetResourceBuilder(this TracerProviderBuilde return tracerProviderBuilder; } - /// - /// Registers a callback that will be executed to configure the for the . - /// - /// . - /// . - /// Returns for chaining. - public static TracerProviderBuilder ConfigureResource(this TracerProviderBuilder tracerProviderBuilder, Action configureResource) - { - if (tracerProviderBuilder is TracerProviderBuilderSdk tracerProviderBuilderSdk) - { - tracerProviderBuilderSdk.ConfigureResource(configureResource); - } - - return tracerProviderBuilder; - } - /// /// Adds processor to the provider. /// diff --git a/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs b/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs index 7ab09ae3e1d..cfa04785d57 100644 --- a/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs +++ b/test/Benchmarks/Instrumentation/InstrumentedHttpClientBenchmark.cs @@ -53,7 +53,7 @@ public void GlobalSetup() this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddHttpClientInstrumentation() - .ConfigureResource(r => r.AddService(ServiceName)) + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(ServiceName)) .AddSource(SourceName) .Build(); From 5e08d0f234493c528893a660c6a7e7d743911a85 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 16 Nov 2020 23:45:04 -0800 Subject: [PATCH 14/14] Cleanup. --- .../Resources/ResourceBuilderExtensions.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs index 991cb132de8..9f63cc6a50f 100644 --- a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs +++ b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs @@ -27,12 +27,12 @@ public static class ResourceBuilderExtensions { private static readonly Version Version = typeof(Resource).Assembly.GetName().Version; - private static Resource TelemetryResource { get; } = new Resource(new List> - { - new KeyValuePair(ResourceSemanticConventions.AttributeTelemetrySdkName, "opentelemetry"), - new KeyValuePair(ResourceSemanticConventions.AttributeTelemetrySdkLanguage, "dotnet"), - new KeyValuePair(ResourceSemanticConventions.AttributeTelemetrySdkVersion, Version.ToString()), - }); + private static Resource TelemetryResource { get; } = new Resource(new Dictionary + { + [ResourceSemanticConventions.AttributeTelemetrySdkName] = "opentelemetry", + [ResourceSemanticConventions.AttributeTelemetrySdkLanguage] = "dotnet", + [ResourceSemanticConventions.AttributeTelemetrySdkVersion] = Version.ToString(), + }); /// /// Adds service information to a