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:
parent
a48ff18b23
commit
8f0cf0bd1a
|
|
@ -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));
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Reference in New Issue