From 3f1edb1005fcb4058d0f0505c2206ca5eb419d84 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:26:42 +0000 Subject: [PATCH 1/5] Initial plan From a82a5945e7f59691987a806e6b1f1abd408716d3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:47:10 +0000 Subject: [PATCH 2/5] Register metrics and tracing services by default in WebAssembly host Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../src/Hosting/WebAssemblyHostBuilder.cs | 2 ++ ...crosoft.AspNetCore.Components.WebAssembly.csproj | 1 + .../test/Hosting/WebAssemblyHostBuilderTest.cs | 13 +++++++++++++ ...t.AspNetCore.Components.WebAssembly.Tests.csproj | 1 + 4 files changed, 17 insertions(+) diff --git a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs index 30e4c5b03a89..a6a7479dfdf9 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs +++ b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs @@ -342,5 +342,7 @@ internal void InitializeDefaultServices() Services.AddSingleton(); RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(Services, RenderMode.InteractiveWebAssembly); Services.AddSupplyValueFromQueryProvider(); + ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Services); + ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Services); } } diff --git a/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj b/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj index 94d3670617d0..7ddd6a54e3c1 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj +++ b/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj @@ -21,6 +21,7 @@ + diff --git a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs index e2321da4593a..0f278b9d883b 100644 --- a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs +++ b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics.Metrics; using System.Text; using System.Text.Json; using Microsoft.AspNetCore.Components.Routing; @@ -341,4 +342,16 @@ public void Configuration_IncludesEnvironmentVariables_WhenAddedExplicitly() Environment.SetEnvironmentVariable(testEnvVarKey, null); } } + + [Fact] + public void Constructor_RegistersMetricsServices() + { + // Arrange & Act + var builder = new WebAssemblyHostBuilder(new TestInternalJSImportMethods()); + var host = builder.Build(); + + // Assert - Verify that IMeterFactory is registered (required for ComponentsMetrics) + var meterFactory = host.Services.GetService(); + Assert.NotNull(meterFactory); + } } diff --git a/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj b/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj index 2f9ac20c7c09..4b9e33b6041e 100644 --- a/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj +++ b/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj @@ -7,6 +7,7 @@ + From bc5752879e97508e0ac8fd042ff7acc0c156dccf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Dec 2025 10:23:36 +0000 Subject: [PATCH 3/5] Guard metrics/tracing registration with feature switch check Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs | 9 +++++++-- ...rosoft.AspNetCore.Components.WebAssembly.Tests.csproj | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs index a6a7479dfdf9..fa7108628f50 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs +++ b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs @@ -342,7 +342,12 @@ internal void InitializeDefaultServices() Services.AddSingleton(); RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(Services, RenderMode.InteractiveWebAssembly); Services.AddSupplyValueFromQueryProvider(); - ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Services); - ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Services); + + // Register metrics and tracing when supported (opt-out via feature switch) + if (!AppContext.TryGetSwitch("System.Diagnostics.Metrics.Meter.IsSupported", out var metricsDisabled) || !metricsDisabled) + { + ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Services); + ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Services); + } } } diff --git a/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj b/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj index 4b9e33b6041e..2f9ac20c7c09 100644 --- a/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj +++ b/src/Components/WebAssembly/WebAssembly/test/Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj @@ -7,7 +7,6 @@ - From 500e99aef7f8a5df77322499667881a3f15adc90 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Dec 2025 10:25:40 +0000 Subject: [PATCH 4/5] Improve test documentation for metrics and tracing registration Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs index 0f278b9d883b..e9be298b2c32 100644 --- a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs +++ b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs @@ -344,14 +344,19 @@ public void Configuration_IncludesEnvironmentVariables_WhenAddedExplicitly() } [Fact] - public void Constructor_RegistersMetricsServices() + public void Constructor_RegistersMetricsAndTracingServices() { // Arrange & Act var builder = new WebAssemblyHostBuilder(new TestInternalJSImportMethods()); var host = builder.Build(); // Assert - Verify that IMeterFactory is registered (required for ComponentsMetrics) + // and that the service collection was configured for both metrics and tracing var meterFactory = host.Services.GetService(); Assert.NotNull(meterFactory); + + // Note: ComponentsActivitySource is scoped and internal, so we can't directly + // test for it here, but both AddComponentsMetrics and AddComponentsTracing + // are called together, ensuring both telemetry services are registered. } } From e4fbf0dfd03545da252941ef4f4a69016a5fb0d1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Dec 2025 10:27:38 +0000 Subject: [PATCH 5/5] Simplify feature switch condition logic for better readability Co-authored-by: javiercn <6995051+javiercn@users.noreply.github.com> --- .../WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs index fa7108628f50..f126d964fe19 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs +++ b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs @@ -343,8 +343,9 @@ internal void InitializeDefaultServices() RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(Services, RenderMode.InteractiveWebAssembly); Services.AddSupplyValueFromQueryProvider(); - // Register metrics and tracing when supported (opt-out via feature switch) - if (!AppContext.TryGetSwitch("System.Diagnostics.Metrics.Meter.IsSupported", out var metricsDisabled) || !metricsDisabled) + // Register metrics and tracing by default (opt-out via feature switch for trimming) + var isTelemetryDisabled = AppContext.TryGetSwitch("System.Diagnostics.Metrics.Meter.IsSupported", out var switchValue) && switchValue == false; + if (!isTelemetryDisabled) { ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Services); ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Services);