Skip to content

Commit 4649449

Browse files
Liudmila Molkovadavidfowl
authored andcommitted
Call DiagnosticListener.OnActivityImport before starting Activity to support sampling better (#9340)
* use OnActivityImport and HttpContext in the extra argument
1 parent 7718671 commit 4649449

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ private Activity StartActivity(HttpContext httpContext)
273273
}
274274
}
275275

276+
_diagnosticListener.OnActivityImport(activity, httpContext);
277+
276278
if (_diagnosticListener.IsEnabled(ActivityStartKey))
277279
{
278280
_diagnosticListener.StartActivity(activity, new { HttpContext = httpContext });

src/Hosting/Hosting/test/HostingApplicationTests.cs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
using Microsoft.AspNetCore.Http;
1212
using Microsoft.AspNetCore.Http.Features;
1313
using Microsoft.Extensions.Logging;
14-
using Microsoft.Extensions.ObjectPool;
15-
using Microsoft.Extensions.Options;
1614
using Moq;
1715
using Xunit;
1816

@@ -304,6 +302,34 @@ public void ActivityTraceParentAndTraceStateFromHeaders()
304302
Assert.Contains(Activity.Current.Baggage, pair => pair.Key == "Key2" && pair.Value == "value2");
305303
}
306304

305+
[Fact]
306+
public void ActivityOnExportHookIsCalled()
307+
{
308+
var diagnosticSource = new DiagnosticListener("DummySource");
309+
var hostingApplication = CreateApplication(out var features, diagnosticSource: diagnosticSource);
310+
311+
bool onActivityImportCalled = false;
312+
diagnosticSource.Subscribe(
313+
observer: new CallbackDiagnosticListener(pair => { }),
314+
isEnabled: (s, o, _) => true,
315+
onActivityImport: (activity, context) =>
316+
{
317+
onActivityImportCalled = true;
318+
Assert.Null(Activity.Current);
319+
Assert.Equal("Microsoft.AspNetCore.Hosting.HttpRequestIn", activity.OperationName);
320+
Assert.NotNull(context);
321+
Assert.IsAssignableFrom<HttpContext>(context);
322+
323+
activity.ActivityTraceFlags = ActivityTraceFlags.Recorded;
324+
});
325+
326+
hostingApplication.CreateContext(features);
327+
328+
Assert.True(onActivityImportCalled);
329+
Assert.NotNull(Activity.Current);
330+
Assert.True(Activity.Current.Recorded);
331+
}
332+
307333

308334
private static void AssertProperty<T>(object o, string name)
309335
{

0 commit comments

Comments
 (0)