Skip to content

Commit

Permalink
Add environment variable detectors to the default ResourceBuilder (#2247
Browse files Browse the repository at this point in the history
)
  • Loading branch information
pellared authored Aug 13, 2021
1 parent adb2b6c commit 0959e56
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 10 deletions.
4 changes: 4 additions & 0 deletions src/OpenTelemetry/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Unreleased

* `ResourceBuilder.CreateDefault` has detectors for
`OTEL_RESOURCE_ATTRIBUTES`, `OTEL_SERVICE_NAME` environment variables
so that explicit `AddEnvironmentVariableDetector` call is not needed. ([#2247](https://github.com/open-telemetry/opentelemetry-dotnet/pull/2247))

* `ResourceBuilder.AddEnvironmentVariableDetector` handles `OTEL_SERVICE_NAME`
environmental variable. ([#2209](https://github.com/open-telemetry/opentelemetry-dotnet/pull/2209))

Expand Down
4 changes: 2 additions & 2 deletions src/OpenTelemetry/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -245,8 +245,8 @@ using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.Build();
```

It is also possible to configure the `Resource` by using `AddEnvironmentVariableDetector`
together with following environmental variables:
It is also possible to configure the `Resource` by using following
environmental variables:

<!-- markdownlint-disable MD013 -->
| Environment variable | Description |
Expand Down
6 changes: 5 additions & 1 deletion src/OpenTelemetry/Resources/ResourceBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@ private ResourceBuilder()
/// service.name added. See <a
/// href="https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource/semantic_conventions#semantic-attributes-with-sdk-provided-default-value">resource
/// semantic conventions</a> for details.
/// Additionally it adds resource attributes parsed from OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME environment variables
/// to a <see cref="ResourceBuilder"/> following the <a
/// href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/sdk.md#specifying-resource-information-via-an-environment-variable">Resource
/// SDK</a>.
/// </summary>
/// <returns>Created <see cref="ResourceBuilder"/>.</returns>
public static ResourceBuilder CreateDefault()
=> new ResourceBuilder().AddResource(DefaultResource);
=> new ResourceBuilder().AddResource(DefaultResource).AddEnvironmentVariableDetector();

/// <summary>
/// Creates an empty <see cref="ResourceBuilder"/> instance.
Expand Down
28 changes: 21 additions & 7 deletions test/OpenTelemetry.Tests/Resources/ResourceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ public void MergeResource_UpdatingResourceOverridesCurrentResource()
public void GetResourceWithTelemetrySDKAttributes()
{
// Arrange
var resource = ResourceBuilder.CreateDefault().AddTelemetrySdk().AddEnvironmentVariableDetector().Build();
var resource = ResourceBuilder.CreateDefault().AddTelemetrySdk().Build();

// Assert
var attributes = resource.Attributes;
Expand All @@ -403,7 +403,7 @@ public void GetResourceWithTelemetrySDKAttributes()
public void GetResourceWithDefaultAttributes_EmptyResource()
{
// Arrange
var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().Build();
var resource = ResourceBuilder.CreateDefault().Build();

// Assert
var attributes = resource.Attributes;
Expand All @@ -415,7 +415,7 @@ public void GetResourceWithDefaultAttributes_EmptyResource()
public void GetResourceWithDefaultAttributes_ResourceWithAttrs()
{
// Arrange
var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build();
var resource = ResourceBuilder.CreateDefault().AddAttributes(this.CreateAttributes(2)).Build();

// Assert
var attributes = resource.Attributes;
Expand All @@ -429,7 +429,7 @@ public void GetResourceWithDefaultAttributes_WithResourceEnvVar()
{
// Arrange
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, "EVKey1=EVVal1,EVKey2=EVVal2");
var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build();
var resource = ResourceBuilder.CreateDefault().AddAttributes(this.CreateAttributes(2)).Build();

// Assert
var attributes = resource.Attributes;
Expand All @@ -440,12 +440,26 @@ public void GetResourceWithDefaultAttributes_WithResourceEnvVar()
Assert.Contains(new KeyValuePair<string, object>("EVKey2", "EVVal2"), attributes);
}

[Fact]
public void EnvironmentVariableDetectors_DoNotDuplicateAttributes()
{
// Arrange
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, "EVKey1=EVVal1,EVKey2=EVVal2");
var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddEnvironmentVariableDetector().Build();

// Assert
var attributes = resource.Attributes;
Assert.Equal(3, attributes.Count());
Assert.Contains(new KeyValuePair<string, object>("EVKey1", "EVVal1"), attributes);
Assert.Contains(new KeyValuePair<string, object>("EVKey2", "EVVal2"), attributes);
}

[Fact]
public void GetResource_WithServiceEnvVar()
{
// Arrange
Environment.SetEnvironmentVariable(OtelServiceNameEnvVarDetector.EnvVarKey, "some-service");
var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build();
var resource = ResourceBuilder.CreateDefault().AddAttributes(this.CreateAttributes(2)).Build();

// Assert
var attributes = resource.Attributes;
Expand All @@ -460,7 +474,7 @@ public void GetResource_WithServiceNameSetWithTwoEnvVars()
// Arrange
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, "service.name=from-resource-attr");
Environment.SetEnvironmentVariable(OtelServiceNameEnvVarDetector.EnvVarKey, "from-service-name");
var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddAttributes(this.CreateAttributes(2)).Build();
var resource = ResourceBuilder.CreateDefault().AddAttributes(this.CreateAttributes(2)).Build();

// Assert
var attributes = resource.Attributes;
Expand All @@ -475,7 +489,7 @@ public void GetResource_WithServiceNameSetWithTwoEnvVarsAndCode()
// Arrange
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, "service.name=from-resource-attr");
Environment.SetEnvironmentVariable(OtelServiceNameEnvVarDetector.EnvVarKey, "from-service-name");
var resource = ResourceBuilder.CreateDefault().AddEnvironmentVariableDetector().AddService("from-code").AddAttributes(this.CreateAttributes(2)).Build();
var resource = ResourceBuilder.CreateDefault().AddService("from-code").AddAttributes(this.CreateAttributes(2)).Build();

// Assert
var attributes = resource.Attributes;
Expand Down

0 comments on commit 0959e56

Please sign in to comment.