diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/CompatibilitySuppressionFile.xml b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/CompatibilitySuppressionFile.xml
new file mode 100644
index 00000000000..9bd8f7fbbcb
--- /dev/null
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/CompatibilitySuppressionFile.xml
@@ -0,0 +1,31 @@
+
+
+
+ CP0001
+ T:Microsoft.Extensions.DependencyInjection.KubernetesResourceQuotaServiceCollectionExtensions
+ lib/net462/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ lib/net462/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ true
+
+
+ CP0001
+ T:Microsoft.Extensions.DependencyInjection.KubernetesResourceQuotaServiceCollectionExtensions
+ lib/net8.0/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ lib/net8.0/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ true
+
+
+ CP0001
+ T:Microsoft.Extensions.DependencyInjection.KubernetesResourceQuotaServiceCollectionExtensions
+ lib/net9.0/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ lib/net9.0/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ true
+
+
+ CP0001
+ T:Microsoft.Extensions.DependencyInjection.KubernetesResourceQuotaServiceCollectionExtensions
+ lib/net10.0/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ lib/net10.0/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.dll
+ true
+
+
\ No newline at end of file
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.csproj b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.csproj
index a60a0e4d505..e66e3a6f558 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.csproj
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.csproj
@@ -7,14 +7,10 @@
- true
-
-
-
- dev
- EXTEXP0016
+ normal
99
- 90
+ 95
+ false
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.json b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.json
index e69de29bb2d..f6b997eac9f 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.json
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes.json
@@ -0,0 +1,15 @@
+{
+ "Name": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes, Version=10.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
+ "Types": [
+ {
+ "Type": "static class Microsoft.Extensions.DependencyInjection.KubernetesResourceQuotaServiceCollectionExtensions",
+ "Stage": "Stable",
+ "Methods": [
+ {
+ "Member": "static Microsoft.Extensions.DependencyInjection.IServiceCollection Microsoft.Extensions.DependencyInjection.KubernetesResourceQuotaServiceCollectionExtensions.AddKubernetesResourceMonitoring(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, string? environmentVariablePrefix = null);",
+ "Stage": "Stable"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ISnapshotProvider.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ISnapshotProvider.cs
index a143724b4b8..0c2a0a657c7 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ISnapshotProvider.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ISnapshotProvider.cs
@@ -2,7 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using System.Diagnostics.CodeAnalysis;
using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring;
@@ -10,7 +9,6 @@ namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring;
///
/// An interface to be implemented by a provider that represents an underlying system and gets resources data about it.
///
-[Experimental(diagnosticId: DiagnosticIds.Experiments.ResourceMonitoring, UrlFormat = DiagnosticIds.UrlFormat)]
[Obsolete(DiagnosticIds.Obsoletions.NonObservableResourceMonitoringApiMessage,
DiagnosticId = DiagnosticIds.Obsoletions.NonObservableResourceMonitoringApiDiagId,
UrlFormat = DiagnosticIds.UrlFormat)]
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Microsoft.Extensions.Diagnostics.ResourceMonitoring.json b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Microsoft.Extensions.Diagnostics.ResourceMonitoring.json
index f20b3d49685..fa50043b6e5 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Microsoft.Extensions.Diagnostics.ResourceMonitoring.json
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Microsoft.Extensions.Diagnostics.ResourceMonitoring.json
@@ -1,53 +1,69 @@
{
- "Name": "Microsoft.Extensions.Diagnostics.ResourceMonitoring, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
+ "Name": "Microsoft.Extensions.Diagnostics.ResourceMonitoring, Version=10.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Types": [
{
"Type": "interface Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitor",
- "Stage": "Stable",
+ "Stage": "Obsolete",
"Methods": [
{
"Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitor.GetUtilization(System.TimeSpan window);",
- "Stage": "Stable"
+ "Stage": "Obsolete"
}
]
},
{
"Type": "interface Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder",
- "Stage": "Stable",
+ "Stage": "Obsolete",
"Methods": [
{
"Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder.AddPublisher();",
- "Stage": "Stable"
+ "Stage": "Obsolete"
}
],
"Properties": [
{
"Member": "Microsoft.Extensions.DependencyInjection.IServiceCollection Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder.Services { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
}
]
},
{
"Type": "interface Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceUtilizationPublisher",
- "Stage": "Stable",
+ "Stage": "Obsolete",
"Methods": [
{
"Member": "System.Threading.Tasks.ValueTask Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceUtilizationPublisher.PublishAsync(Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization utilization, System.Threading.CancellationToken cancellationToken);",
- "Stage": "Stable"
+ "Stage": "Obsolete"
+ }
+ ]
+ },
+ {
+ "Type": "interface Microsoft.Extensions.Diagnostics.ResourceMonitoring.ISnapshotProvider",
+ "Stage": "Obsolete",
+ "Methods": [
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot Microsoft.Extensions.Diagnostics.ResourceMonitoring.ISnapshotProvider.GetSnapshot();",
+ "Stage": "Obsolete"
+ }
+ ],
+ "Properties": [
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources Microsoft.Extensions.Diagnostics.ResourceMonitoring.ISnapshotProvider.Resources { get; }",
+ "Stage": "Obsolete"
}
]
},
{
"Type": "static class Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringBuilderExtensions",
- "Stage": "Stable",
+ "Stage": "Obsolete",
"Methods": [
{
"Member": "static Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringBuilderExtensions.ConfigureMonitor(this Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder builder, System.Action configure);",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "static Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringBuilderExtensions.ConfigureMonitor(this Microsoft.Extensions.Diagnostics.ResourceMonitoring.IResourceMonitorBuilder builder, Microsoft.Extensions.Configuration.IConfigurationSection section);",
- "Stage": "Stable"
+ "Stage": "Obsolete"
}
]
},
@@ -63,27 +79,39 @@
"Properties": [
{
"Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.CollectionWindow { get; set; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.CpuConsumptionRefreshInterval { get; set; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
+ },
+ {
+ "Member": "bool Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.EnableSystemDiskIoMetrics { get; set; }",
+ "Stage": "Experimental"
},
{
"Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.MemoryConsumptionRefreshInterval { get; set; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.PublishingWindow { get; set; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.SamplingInterval { get; set; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "System.Collections.Generic.ISet Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.SourceIpAddresses { get; set; }",
"Stage": "Stable"
+ },
+ {
+ "Member": "bool Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.UseLinuxCalculationV2 { get; set; }",
+ "Stage": "Experimental"
+ },
+ {
+ "Member": "bool Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceMonitoringOptions.UseZeroToOneRangeForMetrics { get; set; }",
+ "Stage": "Experimental"
}
]
},
@@ -97,71 +125,149 @@
},
{
"Member": "static Microsoft.Extensions.DependencyInjection.IServiceCollection Microsoft.Extensions.DependencyInjection.ResourceMonitoringServiceCollectionExtensions.AddResourceMonitoring(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action configure);",
+ "Stage": "Obsolete"
+ }
+ ]
+ },
+ {
+ "Type": "sealed class Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuota",
+ "Stage": "Stable",
+ "Methods": [
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuota.ResourceQuota();",
+ "Stage": "Stable"
+ }
+ ],
+ "Properties": [
+ {
+ "Member": "double Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuota.BaselineCpuInCores { get; set; }",
+ "Stage": "Stable"
+ },
+ {
+ "Member": "ulong Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuota.BaselineMemoryInBytes { get; set; }",
+ "Stage": "Stable"
+ },
+ {
+ "Member": "double Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuota.MaxCpuInCores { get; set; }",
+ "Stage": "Stable"
+ },
+ {
+ "Member": "ulong Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuota.MaxMemoryInBytes { get; set; }",
"Stage": "Stable"
}
]
},
{
- "Type": "readonly struct Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization",
+ "Type": "abstract class Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuotaProvider",
"Stage": "Stable",
"Methods": [
{
- "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.ResourceUtilization(double cpuUsedPercentage, ulong memoryUsedInBytes, Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources systemResources);",
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuotaProvider.ResourceQuotaProvider();",
"Stage": "Stable"
},
{
- "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.ResourceUtilization();",
+ "Member": "abstract Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuota Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceQuotaProvider.GetResourceQuota();",
"Stage": "Stable"
}
+ ]
+ },
+ {
+ "Type": "readonly struct Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization",
+ "Stage": "Obsolete",
+ "Methods": [
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.ResourceUtilization(double cpuUsedPercentage, ulong memoryUsedInBytes, Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources systemResources);",
+ "Stage": "Obsolete"
+ },
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.ResourceUtilization();",
+ "Stage": "Obsolete"
+ }
],
"Properties": [
{
"Member": "double Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.CpuUsedPercentage { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "ulong Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.MemoryUsedInBytes { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "double Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.MemoryUsedPercentage { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
+ },
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.Snapshot { get; }",
+ "Stage": "Experimental"
},
{
"Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources Microsoft.Extensions.Diagnostics.ResourceMonitoring.ResourceUtilization.SystemResources { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
+ }
+ ]
+ },
+ {
+ "Type": "readonly struct Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot",
+ "Stage": "Obsolete",
+ "Methods": [
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot.Snapshot(System.TimeSpan totalTimeSinceStart, System.TimeSpan kernelTimeSinceStart, System.TimeSpan userTimeSinceStart, ulong memoryUsageInBytes);",
+ "Stage": "Obsolete"
+ },
+ {
+ "Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot.Snapshot();",
+ "Stage": "Obsolete"
+ }
+ ],
+ "Properties": [
+ {
+ "Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot.KernelTimeSinceStart { get; }",
+ "Stage": "Obsolete"
+ },
+ {
+ "Member": "ulong Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot.MemoryUsageInBytes { get; }",
+ "Stage": "Obsolete"
+ },
+ {
+ "Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot.TotalTimeSinceStart { get; }",
+ "Stage": "Obsolete"
+ },
+ {
+ "Member": "System.TimeSpan Microsoft.Extensions.Diagnostics.ResourceMonitoring.Snapshot.UserTimeSinceStart { get; }",
+ "Stage": "Obsolete"
}
]
},
{
"Type": "readonly struct Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources",
- "Stage": "Stable",
+ "Stage": "Obsolete",
"Methods": [
{
"Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources.SystemResources(double guaranteedCpuUnits, double maximumCpuUnits, ulong guaranteedMemoryInBytes, ulong maximumMemoryInBytes);",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources.SystemResources();",
- "Stage": "Stable"
+ "Stage": "Obsolete"
}
],
"Properties": [
{
"Member": "double Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources.GuaranteedCpuUnits { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "ulong Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources.GuaranteedMemoryInBytes { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "double Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources.MaximumCpuUnits { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
},
{
"Member": "ulong Microsoft.Extensions.Diagnostics.ResourceMonitoring.SystemResources.MaximumMemoryInBytes { get; }",
- "Stage": "Stable"
+ "Stage": "Obsolete"
}
]
}
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuota.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuota.cs
index d5131923637..0f1c1e03a08 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuota.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuota.cs
@@ -1,9 +1,6 @@
// 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.CodeAnalysis;
-using Microsoft.Shared.DiagnosticIds;
-
namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring;
///
@@ -15,7 +12,6 @@ namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring;
///
/// Max values will be emitted by limit metrics, and baseline values will be emmited by request metrics.
///
-[Experimental(diagnosticId: DiagnosticIds.Experiments.ResourceMonitoring, UrlFormat = DiagnosticIds.UrlFormat)]
public sealed class ResourceQuota
{
///
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuotaProvider.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuotaProvider.cs
index b7b7ce1eaa2..4ef6c434dc7 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuotaProvider.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceQuotaProvider.cs
@@ -1,9 +1,6 @@
// 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.CodeAnalysis;
-using Microsoft.Shared.DiagnosticIds;
-
namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring;
///
@@ -15,7 +12,6 @@ namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring;
/// resource management systems, or other runtime constraints.
///
#pragma warning disable S1694 // An abstract class should have both abstract and concrete methods. It's for better .NET Framework support, to have more flexible API if we add more methods here.
-[Experimental(diagnosticId: DiagnosticIds.Experiments.ResourceMonitoring, UrlFormat = DiagnosticIds.UrlFormat)]
public abstract class ResourceQuotaProvider
#pragma warning restore S1694 // An abstract class should have both abstract and concrete methods
{
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Snapshot.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Snapshot.cs
index 174a46ebb6a..c160ef3aeb6 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Snapshot.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Snapshot.cs
@@ -12,7 +12,6 @@ namespace Microsoft.Extensions.Diagnostics.ResourceMonitoring;
/// A snapshot of CPU and memory usage taken periodically over time.
///
[SuppressMessage("Performance", "CA1815:Override equals and operator equals on value types", Justification = "Comparing instances is not an expected scenario")]
-[Experimental(diagnosticId: DiagnosticIds.Experiments.ResourceMonitoring, UrlFormat = DiagnosticIds.UrlFormat)]
[Obsolete(DiagnosticIds.Obsoletions.NonObservableResourceMonitoringApiMessage,
DiagnosticId = DiagnosticIds.Obsoletions.NonObservableResourceMonitoringApiDiagId,
UrlFormat = DiagnosticIds.UrlFormat)]