Add resources to instrumentation (#779)

* Add resources to instrumentation

* Unit test activitysourcedapter

Co-authored-by: Sergey Kanzhelev <S.Kanzhelev@live.com>
This commit is contained in:
Cijo Thomas 2020-07-07 15:42:29 -07:00 committed by GitHub
parent a48ff18b23
commit 8f0cf0bd1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 48 additions and 9 deletions

View File

@ -17,6 +17,7 @@ using System;
using System.Diagnostics;
using System.Net.Http;
using OpenTelemetry.Exporter.Console;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace.Configuration;
namespace Samples
@ -29,6 +30,7 @@ namespace Samples
using var openTelemetry = OpenTelemetrySdk.EnableOpenTelemetry(
(builder) => builder.AddHttpClientDependencyInstrumentation()
.SetResource(Resources.CreateServiceResource("http-service-example"))
.AddActivitySource("http-client-test")
.UseConsoleActivityExporter(opt => opt.DisplayAsJson = false));

View File

@ -15,6 +15,7 @@
// </copyright>
using System.Diagnostics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace.Export;
namespace OpenTelemetry.Trace
@ -32,11 +33,13 @@ namespace OpenTelemetry.Trace
{
private ActivitySampler activitySampler;
private ActivityProcessor activityProcessor;
private Resource resource;
internal ActivitySourceAdapter(ActivitySampler activitySampler, ActivityProcessor activityProcessor)
internal ActivitySourceAdapter(ActivitySampler activitySampler, ActivityProcessor activityProcessor, Resource resource)
{
this.activitySampler = activitySampler;
this.activityProcessor = activityProcessor;
this.resource = resource;
}
private ActivitySourceAdapter()
@ -48,6 +51,7 @@ namespace OpenTelemetry.Trace
this.RunGetRequestedData(activity);
if (activity.IsAllDataRequested)
{
activity.SetResource(this.resource);
this.activityProcessor.OnStart(activity);
}
}

View File

@ -84,7 +84,9 @@ namespace OpenTelemetry.Trace.Configuration
activityProcessor = new BroadcastActivityProcessor(processors);
}
var activitySource = new ActivitySourceAdapter(sampler, activityProcessor);
openTelemetrySDK.resource = openTelemetryBuilder.Resource;
var activitySource = new ActivitySourceAdapter(sampler, activityProcessor, openTelemetrySDK.resource);
if (openTelemetryBuilder.InstrumentationFactories != null)
{
@ -94,8 +96,6 @@ namespace OpenTelemetry.Trace.Configuration
}
}
openTelemetrySDK.resource = openTelemetryBuilder.Resource;
// This is what subscribes to Activities.
// Think of this as the replacement for DiagnosticListener.AllListeners.Subscribe(onNext => diagnosticListener.Subscribe(..));
openTelemetrySDK.listener = new ActivityListener

View File

@ -69,6 +69,7 @@ namespace OpenTelemetry.Instrumentation.AspNet.Tests
string filter = null,
bool restoreCurrentActivity = false)
{
var expectedResource = Resources.Resources.CreateServiceResource("test-service");
var s = carrierFormat;
IDisposable openTelemetry = null;
RouteData routeData;
@ -162,6 +163,7 @@ namespace OpenTelemetry.Instrumentation.AspNet.Tests
options.TextFormat = textFormat.Object;
}
})
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(_ => activityProcessor.Object))))
{
activity.Start();
@ -251,6 +253,8 @@ namespace OpenTelemetry.Instrumentation.AspNet.Tests
Assert.Equal(
HttpContext.Current.Request.UserAgent,
span.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.HttpUserAgentKey).Value as string);
Assert.Equal(expectedResource, span.GetResource());
}
private class FakeAspNetDiagnosticSource : IDisposable

View File

@ -27,6 +27,7 @@ using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using OpenTelemetry.Context.Propagation;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using OpenTelemetry.Trace.Configuration;
using OpenTelemetry.Trace.Export;
@ -57,11 +58,14 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
[Fact]
public async Task SuccessfulTemplateControllerCallGeneratesASpan()
{
var expectedResource = Resources.Resources.CreateServiceResource("test-service");
var spanProcessor = new Mock<ActivityProcessor>();
void ConfigureTestServices(IServiceCollection services)
{
this.openTelemetrySdk = OpenTelemetrySdk.EnableOpenTelemetry((builder) => builder.AddRequestInstrumentation()
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
this.openTelemetrySdk = OpenTelemetrySdk.EnableOpenTelemetry(
(builder) => builder.AddRequestInstrumentation()
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)));
}
// Arrange
@ -84,6 +88,7 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
Assert.Equal(ActivityKind.Server, span.Kind);
Assert.Equal("/api/values", span.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.HttpPathKey).Value);
Assert.Equal(expectedResource, span.GetResource());
}
[Fact]
@ -207,8 +212,7 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests
var span = (Activity)spanProcessor.Invocations[1].Arguments[0];
Assert.Equal(ActivityKind.Server, span.Kind);
// Assert.Equal("/api/values", span.Tags.GetValue("http.path"));
Assert.Equal("/api/values", span.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.HttpPathKey).Value);
}
public void Dispose()

View File

@ -50,6 +50,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests
out var host,
out var port);
var expectedResource = Resources.Resources.CreateServiceResource("test-service");
var spanProcessor = new Mock<ActivityProcessor>();
tc.Url = HttpTestData.NormalizeValues(tc.Url, host, port);
@ -57,6 +58,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests
using (OpenTelemetrySdk.EnableOpenTelemetry(
(builder) => builder.AddHttpClientDependencyInstrumentation((opt) => opt.SetHttpFlavor = tc.SetHttpFlavor)
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
{
try
@ -133,6 +135,8 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests
// TODO: Fix this test. This is mostly broken because Status is stored in tags.
// Assert.Contains(span.Tags, i => i.Key == kv.Key && i.Value.Equals(kv.Value, StringComparison.InvariantCultureIgnoreCase));
}
Assert.Equal(expectedResource, span.GetResource());
}
[Fact]

View File

@ -47,9 +47,11 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests
out var host,
out var port);
var expectedResource = Resources.Resources.CreateServiceResource("test-service");
var activityProcessor = new Mock<ActivityProcessor>();
using var shutdownSignal = OpenTelemetrySdk.EnableOpenTelemetry(b =>
{
b.SetResource(expectedResource);
b.AddProcessorPipeline(c => c.AddProcessor(ap => activityProcessor.Object));
b.AddHttpWebRequestDependencyInstrumentation();
});
@ -156,6 +158,8 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests
Assert.Equal(value, tag.Value);
}
Assert.Equal(expectedResource, activity.GetResource());
}
[Fact]

View File

@ -51,6 +51,7 @@ namespace OpenTelemetry.Instrumentation.GrpcClient.Tests
var uri = new Uri($"{baseAddress}:{this.fixture.Port}");
var uriHostNameType = Uri.CheckHostName(uri.Host);
var expectedResource = Resources.Resources.CreateServiceResource("test-service");
var spanProcessor = new Mock<ActivityProcessor>();
var parent = new Activity("parent")
@ -59,6 +60,7 @@ namespace OpenTelemetry.Instrumentation.GrpcClient.Tests
using (OpenTelemetrySdk.EnableOpenTelemetry(
(builder) => builder
.AddGrpcClientDependencyInstrumentation()
.SetResource(expectedResource)
.AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object))))
{
var channel = GrpcChannel.ForAddress(uri);
@ -93,6 +95,7 @@ namespace OpenTelemetry.Instrumentation.GrpcClient.Tests
Assert.Equal(uri.Port.ToString(), span.Tags.FirstOrDefault(i => i.Key == "net.peer.port").Value);
Assert.Equal("Ok", span.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.StatusCodeKey).Value);
Assert.Equal(expectedResource, span.GetResource());
}
[Fact]

View File

@ -16,6 +16,7 @@
using System;
using System.Diagnostics;
using OpenTelemetry.Resources;
using OpenTelemetry.Tests.Implementation.Testing.Export;
using OpenTelemetry.Trace;
using Xunit;
@ -26,6 +27,7 @@ namespace OpenTelemetry.Tests.Implementation.Trace
{
private TestSampler testSampler;
private TestActivityProcessor testProcessor;
private Resource testResource = Resources.Resources.CreateServiceResource("test-resource");
private ActivitySourceAdapter activitySourceAdapter;
static ActivitySourceAdapterTest()
@ -38,7 +40,19 @@ namespace OpenTelemetry.Tests.Implementation.Trace
{
this.testSampler = new TestSampler();
this.testProcessor = new TestActivityProcessor();
this.activitySourceAdapter = new ActivitySourceAdapter(this.testSampler, this.testProcessor);
this.activitySourceAdapter = new ActivitySourceAdapter(this.testSampler, this.testProcessor, this.testResource);
}
[Fact]
public void ActivitySourceAdapterSetsResource()
{
var activity = new Activity("test");
activity.Start();
this.activitySourceAdapter.Start(activity);
activity.Stop();
this.activitySourceAdapter.Stop(activity);
Assert.Equal(this.testResource, activity.GetResource());
}
[Theory]