Skip to content

Commit ee482de

Browse files
committed
fixes
1 parent 32fd189 commit ee482de

File tree

8 files changed

+46
-43
lines changed

8 files changed

+46
-43
lines changed

src/Components/Components/src/ComponentsActivityLinkStore.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,13 @@ public void AddActivityContexts(int exceptCategory, Activity targetActivity)
7373
{
7474
if (i != exceptCategory)
7575
{
76-
if (_activityLinks[i] != default)
76+
var link = _activityLinks[i];
77+
var tag = _activityTags[i];
78+
79+
if (link != default)
7780
{
78-
targetActivity.AddLink(new ActivityLink(_activityLinks[i]));
81+
targetActivity.AddLink(new ActivityLink(link));
7982
}
80-
var tag = _activityTags[i];
8183
if (tag != null)
8284
{
8385
targetActivity.SetTag(tag.Value.Key, tag.Value.Value);

src/Components/Components/src/ComponentsActivitySource.cs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ public ComponentsActivityHandle StartRouteActivity(string componentType, string
2828
var activity = ActivitySource.CreateActivity(OnRouteName, ActivityKind.Internal, parentId: null, null, null);
2929
if (activity is not null)
3030
{
31-
var previousActivity = Activity.Current;
31+
var httpActivity = Activity.Current;
32+
activity.DisplayName = $"Route {route ?? "[unknown path]"} -> {componentType ?? "[unknown component]"}";
33+
Activity.Current = null; // do not inherit the parent activity
34+
activity.Start();
35+
3236
if (activity.IsAllDataRequested)
3337
{
3438
if (componentType != null)
@@ -38,21 +42,19 @@ public ComponentsActivityHandle StartRouteActivity(string componentType, string
3842
if (route != null)
3943
{
4044
activity.SetTag("aspnetcore.components.route", route);
45+
46+
// store self link
47+
_activityLinkStore.SetActivityContext(ComponentsActivityCategory.Route, activity.Context,
48+
new KeyValuePair<string, object?>("aspnetcore.components.route", route));
4149
}
42-
if (previousActivity != null)
50+
if (httpActivity != null && httpActivity.Source.Name == "Microsoft.AspNetCore")
4351
{
44-
activity.AddLink(new ActivityLink(previousActivity.Context));
52+
// store the http link
53+
_activityLinkStore.SetActivityContext(ComponentsActivityCategory.Http, httpActivity.Context, null);
4554
}
46-
47-
// store the link
48-
_activityLinkStore.SetActivityContext(ComponentsActivityCategory.Route, activity.Context,
49-
new KeyValuePair<string, object?>("aspnetcore.components.route", route));
5055
}
5156

52-
activity.DisplayName = $"Route {route ?? "[unknown path]"} -> {componentType ?? "[unknown component]"}";
53-
Activity.Current = null; // do not inherit the parent activity
54-
activity.Start();
55-
return new ComponentsActivityHandle { Activity = activity, Previous = previousActivity };
57+
return new ComponentsActivityHandle { Activity = activity, Previous = httpActivity };
5658
}
5759
return default;
5860
}
@@ -65,8 +67,14 @@ public void StopRouteActivity(ComponentsActivityHandle activityHandle, Exception
6567
public ComponentsActivityHandle StartEventActivity(string? componentType, string? methodName, string? attributeName)
6668
{
6769
var activity = ActivitySource.CreateActivity(OnEventName, ActivityKind.Internal, parentId: null, null, null);
70+
6871
if (activity is not null)
6972
{
73+
var previousActivity = Activity.Current;
74+
activity.DisplayName = $"Event {attributeName ?? "[unknown attribute]"} -> {componentType ?? "[unknown component]"}.{methodName ?? "[unknown method]"}";
75+
Activity.Current = null; // do not inherit the parent activity
76+
activity.Start();
77+
7078
if (activity.IsAllDataRequested)
7179
{
7280
if (componentType != null)
@@ -83,10 +91,6 @@ public ComponentsActivityHandle StartEventActivity(string? componentType, string
8391
}
8492
}
8593

86-
activity.DisplayName = $"Event {attributeName ?? "[unknown attribute]"} -> {componentType ?? "[unknown component]"}.{methodName ?? "[unknown method]"}";
87-
var previousActivity = Activity.Current;
88-
Activity.Current = null; // do not inherit the parent activity
89-
activity.Start();
9094
return new ComponentsActivityHandle { Activity = activity, Previous = previousActivity };
9195
}
9296
return default;

src/Components/Components/src/RegisterRenderingMetricsServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public static IServiceCollection AddComponentsMetrics(
3838
public static IServiceCollection AddComponentsTracing(
3939
IServiceCollection services)
4040
{
41-
services.TryAddScoped<ComponentsActivitySource>();
4241
services.TryAddScoped<IComponentsActivityLinkStore, ComponentsActivityLinkStore>();
42+
services.TryAddScoped<ComponentsActivitySource>();
4343

4444
return services;
4545
}

src/Components/Endpoints/src/RazorComponentEndpointInvoker.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using System.Text.Encodings.Web;
88
using Microsoft.AspNetCore.Antiforgery;
99
using Microsoft.AspNetCore.Components.Endpoints.Rendering;
10-
using Microsoft.AspNetCore.Components.RenderTree;
1110
using Microsoft.AspNetCore.Diagnostics;
1211
using Microsoft.AspNetCore.Http;
1312
using Microsoft.AspNetCore.Http.Features;

src/Components/Endpoints/test/RazorComponentEndpointInvokerTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public async Task Invoker_RejectsPostRequestsWithNonFormDataContentTypesAsync()
2828
new EndpointHtmlRenderer(
2929
services,
3030
NullLoggerFactory.Instance),
31+
new ComponentsActivityLinkStore(),
3132
NullLogger<RazorComponentEndpointInvoker>.Instance);
3233

3334
var context = new DefaultHttpContext();

src/Components/Server/src/Circuits/CircuitActivitySource.cs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using System.Diagnostics;
5-
using System.Runtime.CompilerServices;
65
using Microsoft.AspNetCore.Components;
76
using Microsoft.AspNetCore.Components.RenderTree;
8-
using Microsoft.AspNetCore.Routing;
97

108
internal class CircuitActivitySource
119
{
@@ -21,41 +19,37 @@ public CircuitActivitySource(IComponentsActivityLinkStore activityLinkStore)
2119
_activityLinkStore = activityLinkStore ?? throw new ArgumentNullException(nameof(activityLinkStore));
2220
}
2321

24-
public CircuitActivityHandle StartCircuitActivity(string circuitId, ActivityContext httpActivityContext, Renderer? renderer)
22+
public CircuitActivityHandle StartCircuitActivity(string circuitId, ActivityContext httpActivityContext)
2523
{
26-
var activity = ActivitySource.CreateActivity(OnCircuitName, ActivityKind.Internal, parentId:null, null, null);
24+
var activity = ActivitySource.CreateActivity(OnCircuitName, ActivityKind.Internal, parentId: null, null, null);
2725
if (activity is not null)
2826
{
2927
var signalRActivity = Activity.Current;
28+
activity.DisplayName = $"Circuit {circuitId ?? ""}";
29+
Activity.Current = null; // do not inherit the parent activity
30+
activity.Start();
3031

3132
if (activity.IsAllDataRequested)
3233
{
3334
if (circuitId != null)
3435
{
3536
activity.SetTag("aspnetcore.components.circuit.id", circuitId);
3637

37-
// store the circuit link
38-
_activityLinkStore.SetActivityContext(ComponentsActivityCategory.Route, activity.Context,
38+
// store self link
39+
_activityLinkStore.SetActivityContext(ComponentsActivityCategory.Circuit, activity.Context,
3940
new KeyValuePair<string, object?>("aspnetcore.components.circuit.id", circuitId));
4041
}
4142
if (httpActivityContext != default)
4243
{
43-
activity.AddLink(new ActivityLink(httpActivityContext));
44-
4544
// store the http link
4645
_activityLinkStore.SetActivityContext(ComponentsActivityCategory.Http, httpActivityContext, null);
4746
}
48-
if (signalRActivity != null)
47+
if (signalRActivity != null && signalRActivity.Source.Name == "Microsoft.AspNetCore.SignalR.Server")
4948
{
50-
activity.AddLink(new ActivityLink(signalRActivity.Context));
51-
5249
// store the SignalR link
5350
_activityLinkStore.SetActivityContext(ComponentsActivityCategory.SignalR, signalRActivity.Context, null);
5451
}
5552
}
56-
activity.DisplayName = $"Circuit {circuitId ?? ""}";
57-
Activity.Current = null; // do not inherit the parent activity
58-
activity.Start();
5953
return new CircuitActivityHandle { Previous = signalRActivity, Activity = activity };
6054
}
6155
return default;
@@ -73,8 +67,7 @@ public void StopCircuitActivity(CircuitActivityHandle activityHandle, Exception?
7367
}
7468
if (activity.IsAllDataRequested)
7569
{
76-
// ComponentsActivityCategory.Circuit = 5;
77-
_activityLinkStore.AddActivityContexts(5, activity);
70+
_activityLinkStore.AddActivityContexts(ComponentsActivityCategory.Circuit, activity);
7871
}
7972
activityHandle.Activity.Stop();
8073

src/Components/Server/src/Circuits/CircuitHost.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public Task InitializeAsync(ProtectedPrerenderComponentApplicationStore store, A
125125
{
126126
_initialized = true; // We're ready to accept incoming JSInterop calls from here on
127127

128-
activityHandle = _circuitActivitySource.StartCircuitActivity(CircuitId.Id, httpActivityContext, Renderer);
128+
activityHandle = _circuitActivitySource.StartCircuitActivity(CircuitId.Id, httpActivityContext);
129129
_startTime = (_circuitMetrics != null && _circuitMetrics.IsDurationEnabled()) ? Stopwatch.GetTimestamp() : 0;
130130

131131
// We only run the handlers in case we are in a Blazor Server scenario, which renders

src/Components/Server/test/Circuits/CircuitActivitySourceTest.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public void StartCircuitActivity_CreatesAndStartsActivity()
4141
var httpContext = new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded);
4242

4343
// Act
44-
var wrapper = circuitActivitySource.StartCircuitActivity(circuitId, httpContext, null);
45-
var activity = wrapper.Activity;
44+
var activityHandle = circuitActivitySource.StartCircuitActivity(circuitId, httpContext);
45+
var activity = activityHandle.Activity;
4646

4747
// Assert
4848
Assert.NotNull(activity);
@@ -51,8 +51,12 @@ public void StartCircuitActivity_CreatesAndStartsActivity()
5151
Assert.Equal(ActivityKind.Internal, activity.Kind);
5252
Assert.True(activity.IsAllDataRequested);
5353
Assert.Equal(circuitId, activity.GetTagItem("aspnetcore.components.circuit.id"));
54-
Assert.Contains(activity.Links, link => link.Context == httpContext);
54+
Assert.Empty(activity.Links);
5555
Assert.False(activity.IsStopped);
56+
57+
circuitActivitySource.StopCircuitActivity(activityHandle, null);
58+
Assert.True(activity.IsStopped);
59+
Assert.Contains(activity.Links, link => link.Context == httpContext);
5660
}
5761

5862
[Fact]
@@ -62,7 +66,7 @@ public void FailCircuitActivity_SetsErrorStatusAndStopsActivity()
6266
var circuitActivitySource = new CircuitActivitySource(new ComponentsActivityLinkStore());
6367
var circuitId = "test-circuit-id";
6468
var httpContext = default(ActivityContext);
65-
var activityHandle = circuitActivitySource.StartCircuitActivity(circuitId, httpContext, null);
69+
var activityHandle = circuitActivitySource.StartCircuitActivity(circuitId, httpContext);
6670
var activity = activityHandle.Activity;
6771
var exception = new InvalidOperationException("Test exception");
6872

@@ -82,8 +86,8 @@ public void StartCircuitActivity_HandlesNullValues()
8286
var circuitActivitySource = new CircuitActivitySource(new ComponentsActivityLinkStore());
8387

8488
// Act
85-
var wrapper = circuitActivitySource.StartCircuitActivity(null, default, null);
86-
var activity = wrapper.Activity;
89+
var activityHandle = circuitActivitySource.StartCircuitActivity(null, default);
90+
var activity = activityHandle.Activity;
8791

8892
// Assert
8993
Assert.NotNull(activity);

0 commit comments

Comments
 (0)