Skip to content

Commit bc106c9

Browse files
authored
[blazor] Diagnostic traces - OTEL names review (#62751)
1 parent 4d5e043 commit bc106c9

File tree

6 files changed

+35
-34
lines changed

6 files changed

+35
-34
lines changed

src/Components/Components/src/ComponentsActivitySource.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Components;
1212
internal class ComponentsActivitySource
1313
{
1414
internal const string Name = "Microsoft.AspNetCore.Components";
15-
internal const string OnRouteName = $"{Name}.RouteChange";
15+
internal const string OnRouteName = $"{Name}.Navigate";
1616
internal const string OnEventName = $"{Name}.HandleEvent";
1717

1818
private static ActivitySource ActivitySource { get; } = new ActivitySource(Name);
@@ -23,7 +23,7 @@ public void Init(ComponentsActivityLinkStore store)
2323
_componentsActivityLinkStore = store;
2424
}
2525

26-
public ComponentsActivityHandle StartRouteActivity(string componentType, string route)
26+
public ComponentsActivityHandle StartNavigateActivity(string componentType, string route)
2727
{
2828
var activity = ActivitySource.CreateActivity(OnRouteName, ActivityKind.Internal, parentId: null, null, null);
2929
if (activity is not null)
@@ -54,12 +54,12 @@ public ComponentsActivityHandle StartRouteActivity(string componentType, string
5454
return default;
5555
}
5656

57-
public void StopRouteActivity(ComponentsActivityHandle activityHandle, Exception? ex)
57+
public void StopNavigateActivity(ComponentsActivityHandle activityHandle, Exception? ex)
5858
{
5959
StopComponentActivity(ComponentsActivityLinkStore.Route, activityHandle, ex);
6060
}
6161

62-
public static ComponentsActivityHandle StartEventActivity(string? componentType, string? methodName, string? attributeName)
62+
public static ComponentsActivityHandle StartHandleEventActivity(string? componentType, string? methodName, string? attributeName)
6363
{
6464
var activity = ActivitySource.CreateActivity(OnEventName, ActivityKind.Internal, parentId: null, null, null);
6565

@@ -91,21 +91,21 @@ public static ComponentsActivityHandle StartEventActivity(string? componentType,
9191
return default;
9292
}
9393

94-
public void StopEventActivity(ComponentsActivityHandle activityHandle, Exception? ex)
94+
public void StopHandleEventActivity(ComponentsActivityHandle activityHandle, Exception? ex)
9595
{
9696
StopComponentActivity(ComponentsActivityLinkStore.Event, activityHandle, ex);
9797
}
9898

99-
public async Task CaptureEventStopAsync(Task task, ComponentsActivityHandle activityHandle)
99+
public async Task CaptureHandleEventStopAsync(Task task, ComponentsActivityHandle activityHandle)
100100
{
101101
try
102102
{
103103
await task;
104-
StopEventActivity(activityHandle, null);
104+
StopHandleEventActivity(activityHandle, null);
105105
}
106106
catch (Exception ex)
107107
{
108-
StopEventActivity(activityHandle, ex);
108+
StopHandleEventActivity(activityHandle, ex);
109109
}
110110
}
111111

src/Components/Components/src/RenderTree/Renderer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo? fie
461461
{
462462
receiverName ??= (callback.Receiver?.GetType() ?? callback.Delegate.Target?.GetType())?.FullName;
463463
methodName ??= callback.Delegate.Method?.Name;
464-
activityHandle = ComponentsActivitySource.StartEventActivity(receiverName, methodName, attributeName);
464+
activityHandle = ComponentsActivitySource.StartHandleEventActivity(receiverName, methodName, attributeName);
465465
}
466466

467467
var eventStartTimestamp = ComponentMetrics != null && ComponentMetrics.IsEventEnabled ? Stopwatch.GetTimestamp() : 0;
@@ -518,7 +518,7 @@ public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo? fie
518518
// stop activity/trace
519519
if (ComponentActivitySource != null && activityHandle.Activity != null)
520520
{
521-
_ = ComponentActivitySource.CaptureEventStopAsync(task, activityHandle);
521+
_ = ComponentActivitySource.CaptureHandleEventStopAsync(task, activityHandle);
522522
}
523523
}
524524
catch (Exception e)
@@ -532,7 +532,7 @@ public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo? fie
532532

533533
if (ComponentActivitySource != null && activityHandle.Activity != null)
534534
{
535-
ComponentActivitySource.StopEventActivity(activityHandle, e);
535+
ComponentActivitySource.StopHandleEventActivity(activityHandle, e);
536536
}
537537

538538
HandleExceptionViaErrorBoundary(e, receiverComponentState);

src/Components/Components/src/Routing/Router.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ internal virtual void Refresh(bool isNavigationIntercepted)
253253
endpointRouteData = RouteTable.ProcessParameters(endpointRouteData);
254254
_renderHandle.Render(Found(endpointRouteData));
255255

256-
_renderHandle.ComponentActivitySource?.StopRouteActivity(activityHandle, null);
256+
_renderHandle.ComponentActivitySource?.StopNavigateActivity(activityHandle, null);
257257
return;
258258
}
259259

@@ -308,15 +308,15 @@ internal virtual void Refresh(bool isNavigationIntercepted)
308308
NavigationManager.NavigateTo(_locationAbsolute, forceLoad: true);
309309
}
310310
}
311-
_renderHandle.ComponentActivitySource?.StopRouteActivity(activityHandle, null);
311+
_renderHandle.ComponentActivitySource?.StopNavigateActivity(activityHandle, null);
312312
}
313313

314314
private ComponentsActivityHandle RecordDiagnostics(string componentType, string template)
315315
{
316316
ComponentsActivityHandle activityHandle = default;
317317
if (_renderHandle.ComponentActivitySource != null)
318318
{
319-
activityHandle = _renderHandle.ComponentActivitySource.StartRouteActivity(componentType, template);
319+
activityHandle = _renderHandle.ComponentActivitySource.StartNavigateActivity(componentType, template);
320320
}
321321

322322
if (_renderHandle.ComponentMetrics != null && _renderHandle.ComponentMetrics.IsNavigationEnabled)

src/Components/Components/test/ComponentsActivitySourceTest.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void StartRouteActivity_CreatesAndStartsActivity()
5050
linkstore.SetActivityContext(ComponentsActivityLinkStore.Circuit, new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), new KeyValuePair<string, object>("aspnetcore.components.circuit.id", "test-circuit-id"));
5151

5252
// Act
53-
var activityHandle = componentsActivitySource.StartRouteActivity(componentType, route);
53+
var activityHandle = componentsActivitySource.StartNavigateActivity(componentType, route);
5454
var activity = activityHandle.Activity;
5555

5656
// Assert
@@ -63,7 +63,7 @@ public void StartRouteActivity_CreatesAndStartsActivity()
6363
Assert.Equal(route, activity.GetTagItem("aspnetcore.components.route"));
6464
Assert.False(activity.IsStopped);
6565

66-
componentsActivitySource.StopRouteActivity(activityHandle, null);
66+
componentsActivitySource.StopNavigateActivity(activityHandle, null);
6767
Assert.True(activity.IsStopped);
6868
Assert.Equal("test-circuit-id", activity.GetTagItem("aspnetcore.components.circuit.id"));
6969
Assert.Single(activity.Links);
@@ -83,10 +83,10 @@ public void StartEventActivity_CreatesAndStartsActivity()
8383

8484
// First set up a circuit and route context
8585
linkstore.SetActivityContext(ComponentsActivityLinkStore.Circuit, default, new KeyValuePair<string, object>("aspnetcore.components.circuit.id", "test-circuit-id"));
86-
componentsActivitySource.StartRouteActivity("ParentComponent", "/parent");
86+
componentsActivitySource.StartNavigateActivity("ParentComponent", "/parent");
8787

8888
// Act
89-
var activityHandle = ComponentsActivitySource.StartEventActivity(componentType, methodName, attributeName);
89+
var activityHandle = ComponentsActivitySource.StartHandleEventActivity(componentType, methodName, attributeName);
9090
var activity = activityHandle.Activity;
9191

9292
// Assert
@@ -100,7 +100,7 @@ public void StartEventActivity_CreatesAndStartsActivity()
100100
Assert.Equal(attributeName, activity.GetTagItem("aspnetcore.components.attribute.name"));
101101
Assert.False(activity.IsStopped);
102102

103-
componentsActivitySource.StopRouteActivity(activityHandle, null);
103+
componentsActivitySource.StopNavigateActivity(activityHandle, null);
104104
Assert.True(activity.IsStopped);
105105
Assert.Equal("test-circuit-id", activity.GetTagItem("aspnetcore.components.circuit.id"));
106106
Assert.Empty(activity.Links);
@@ -113,12 +113,12 @@ public void FailEventActivity_SetsErrorStatusAndStopsActivity()
113113
var componentsActivitySource = new ComponentsActivitySource();
114114
var linkstore = new ComponentsActivityLinkStore(null);
115115
componentsActivitySource.Init(linkstore);
116-
var activityHandle = ComponentsActivitySource.StartEventActivity("TestComponent", "OnClick", "onclick");
116+
var activityHandle = ComponentsActivitySource.StartHandleEventActivity("TestComponent", "OnClick", "onclick");
117117
var activity = activityHandle.Activity;
118118
var exception = new InvalidOperationException("Test exception");
119119

120120
// Act
121-
componentsActivitySource.StopEventActivity(activityHandle, exception);
121+
componentsActivitySource.StopHandleEventActivity(activityHandle, exception);
122122

123123
// Assert
124124
Assert.True(activity!.IsStopped);
@@ -133,12 +133,12 @@ public async Task CaptureEventStopAsync_StopsActivityOnSuccessfulTask()
133133
var componentsActivitySource = new ComponentsActivitySource();
134134
var linkstore = new ComponentsActivityLinkStore(null);
135135
componentsActivitySource.Init(linkstore);
136-
var activityHandle = ComponentsActivitySource.StartEventActivity("TestComponent", "OnClick", "onclick");
136+
var activityHandle = ComponentsActivitySource.StartHandleEventActivity("TestComponent", "OnClick", "onclick");
137137
var activity = activityHandle.Activity;
138138
var task = Task.CompletedTask;
139139

140140
// Act
141-
await componentsActivitySource.CaptureEventStopAsync(task, activityHandle);
141+
await componentsActivitySource.CaptureHandleEventStopAsync(task, activityHandle);
142142

143143
// Assert
144144
Assert.True(activity!.IsStopped);
@@ -152,13 +152,13 @@ public async Task CaptureEventStopAsync_FailsActivityOnException()
152152
var componentsActivitySource = new ComponentsActivitySource();
153153
var linkstore = new ComponentsActivityLinkStore(null);
154154
componentsActivitySource.Init(linkstore);
155-
var activityHandle = ComponentsActivitySource.StartEventActivity("TestComponent", "OnClick", "onclick");
155+
var activityHandle = ComponentsActivitySource.StartHandleEventActivity("TestComponent", "OnClick", "onclick");
156156
var activity = activityHandle.Activity;
157157
var exception = new InvalidOperationException("Test exception");
158158
var task = Task.FromException(exception);
159159

160160
// Act
161-
await componentsActivitySource.CaptureEventStopAsync(task, activityHandle);
161+
await componentsActivitySource.CaptureHandleEventStopAsync(task, activityHandle);
162162

163163
// Assert
164164
Assert.True(activity!.IsStopped);
@@ -175,7 +175,7 @@ public void StartRouteActivity_HandlesNullValues()
175175
componentsActivitySource.Init(linkstore);
176176

177177
// Act
178-
var activityHandle = componentsActivitySource.StartRouteActivity(null, null);
178+
var activityHandle = componentsActivitySource.StartNavigateActivity(null, null);
179179
var activity = activityHandle.Activity;
180180

181181
// Assert
@@ -192,7 +192,7 @@ public void StartEventActivity_HandlesNullValues()
192192
componentsActivitySource.Init(linkstore);
193193

194194
// Act
195-
var activityHandle = ComponentsActivitySource.StartEventActivity(null, null, null);
195+
var activityHandle = ComponentsActivitySource.StartHandleEventActivity(null, null, null);
196196
var activity = activityHandle.Activity;
197197

198198
// Assert

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits;
99
internal class CircuitActivitySource
1010
{
1111
internal const string Name = "Microsoft.AspNetCore.Components.Server.Circuits";
12-
internal const string OnCircuitName = $"{Name}.CircuitStart";
12+
internal const string OnCircuitName = $"{Name}.StartCircuit";
1313

1414
private ComponentsActivityLinkStore? _activityLinkStore;
1515

@@ -42,20 +42,22 @@ public CircuitActivityHandle StartCircuitActivity(string circuitId, ActivityCont
4242
}
4343
if (httpActivityContext != default)
4444
{
45-
// store the http link
46-
_activityLinkStore.SetActivityContext(ComponentsActivityLinkStore.Http, httpActivityContext, null);
45+
// add the http link
46+
activity.AddLink(new ActivityLink(httpActivityContext));
4747
}
4848
if (signalRActivity != null && signalRActivity.Source.Name == "Microsoft.AspNetCore.SignalR.Server")
4949
{
50-
// store the SignalR link
51-
_activityLinkStore.SetActivityContext(ComponentsActivityLinkStore.SignalR, signalRActivity.Context, null);
50+
// add the SignalR link
51+
activity.AddLink(new ActivityLink(signalRActivity.Context));
5252
}
5353
}
5454
return new CircuitActivityHandle { Previous = signalRActivity, Activity = activity };
5555
}
5656
return default;
5757
}
5858

59+
// We call this at the end of circuit creation, rather than at the end of the circuit lifecycle
60+
// because long-lived traces are difficult to work with in the telemetry UIs
5961
public void StopCircuitActivity(CircuitActivityHandle activityHandle, Exception? ex)
6062
{
6163
var activity = activityHandle.Activity;

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,11 @@ public void StartCircuitActivity_CreatesAndStartsActivity()
5454
Assert.Equal(ActivityKind.Internal, activity.Kind);
5555
Assert.True(activity.IsAllDataRequested);
5656
Assert.Equal(circuitId, activity.GetTagItem("aspnetcore.components.circuit.id"));
57-
Assert.Empty(activity.Links);
57+
Assert.Contains(activity.Links, link => link.Context == httpContext);
5858
Assert.False(activity.IsStopped);
5959

6060
circuitActivitySource.StopCircuitActivity(activityHandle, null);
6161
Assert.True(activity.IsStopped);
62-
Assert.Contains(activity.Links, link => link.Context == httpContext);
6362
}
6463

6564
[Fact]

0 commit comments

Comments
 (0)