diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization/ResourceUtilizationHealthCheck.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization/ResourceUtilizationHealthCheck.cs index ec9beb016ee..072060c8fa3 100644 --- a/src/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization/ResourceUtilizationHealthCheck.cs +++ b/src/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization/ResourceUtilizationHealthCheck.cs @@ -18,6 +18,9 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks; /// internal sealed partial class ResourceUtilizationHealthCheck : IHealthCheck, IDisposable { +#if !NETFRAMEWORK + private const double Hundred = 100.0; +#endif private readonly double _multiplier; private readonly MeterListener? _meterListener; private readonly ResourceUtilizationHealthCheckOptions _options; @@ -82,12 +85,14 @@ public static Task EvaluateHealthStatusAsync(double cpuUsedPe } #pragma warning restore EA0014 // The async method doesn't support cancellation +#if !NETFRAMEWORK /// /// Initializes a new instance of the class. /// /// The options. /// The datatracker. - public ResourceUtilizationHealthCheck(IOptions options, IResourceMonitor dataTracker) + /// The Resource Monitoring options. + public ResourceUtilizationHealthCheck(IOptions options, IResourceMonitor dataTracker, IOptions rmOptions) { _options = Throw.IfMemberNull(options, options.Value); if (!_options.UseObservableResourceMonitoringInstruments) @@ -96,25 +101,44 @@ public ResourceUtilizationHealthCheck(IOptions(OnMeasurementRecorded); + _meterListener.Start(); + } +#else + /// + /// Initializes a new instance of the class. + /// + /// The options. + /// The datatracker. + public ResourceUtilizationHealthCheck(IOptions options, IResourceMonitor dataTracker) + { + _options = Throw.IfMemberNull(options, options.Value); + if (!_options.UseObservableResourceMonitoringInstruments) + { + ObsoleteConstructor(dataTracker); + return; } -#endif + _multiplier = 1; _meterListener = new() { InstrumentPublished = OnInstrumentPublished @@ -123,6 +147,7 @@ public ResourceUtilizationHealthCheck(IOptions(OnMeasurementRecorded); _meterListener.Start(); } +#endif /// /// Runs the health check. diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/Linux/LinuxResourceHealthCheckTests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/Linux/LinuxResourceHealthCheckTests.cs index ddf2a40a784..53bc425c6a8 100644 --- a/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/Linux/LinuxResourceHealthCheckTests.cs +++ b/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/Linux/LinuxResourceHealthCheckTests.cs @@ -183,7 +183,10 @@ public async Task TestCpuAndMemoryChecks_WithMetrics( }; var options = Microsoft.Extensions.Options.Options.Create(checkOptions); - using var healthCheck = new ResourceUtilizationHealthCheck(options, dataTracker.Object); + using var healthCheck = new ResourceUtilizationHealthCheck( + options, + dataTracker.Object, + Microsoft.Extensions.Options.Options.Create(new ResourceMonitoringOptions())); // Act fakeClock.Advance(TimeSpan.FromMilliseconds(1)); diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckExtensionsTests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckExtensionsTests.cs index dcd9fccce53..16ec64fa003 100644 --- a/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckExtensionsTests.cs +++ b/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckExtensionsTests.cs @@ -81,6 +81,10 @@ public void AddResourceHealthCheck_RegistersInternalResourceMonitoring() IResourceMonitor? resourceMonitor = serviceProvider.GetService(); Assert.NotNull(resourceMonitor); + + // check Resource Monitoring Options: + var resourceMonitoringOptions = serviceProvider.GetRequiredService>().Value; + Assert.NotNull(resourceMonitoringOptions); } [ConditionalFact] @@ -522,7 +526,16 @@ public async Task TestCpuAndMemoryChecks_WithMetrics( }; var options = Microsoft.Extensions.Options.Options.Create(checkOptions); - using var healthCheck = new ResourceUtilizationHealthCheck(options, dataTracker.Object); +#if !NETFRAMEWORK + using var healthCheck = new ResourceUtilizationHealthCheck( + options, + dataTracker.Object, + Microsoft.Extensions.Options.Options.Create(new ResourceMonitoringOptions())); +#else + using var healthCheck = new ResourceUtilizationHealthCheck( + options, + dataTracker.Object); +#endif // Act fakeClock.Advance(TimeSpan.FromMilliseconds(1)); diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckTests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckTests.cs index c5d90fa58a1..fc2266cf1f6 100644 --- a/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckTests.cs +++ b/test/Libraries/Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization.Tests/ResourceHealthCheckTests.cs @@ -33,7 +33,16 @@ public async Task TestCpuAndMemoryChecks(HealthStatus expected, double utilizati }; var options = Microsoft.Extensions.Options.Options.Create(checkOptions); - using var healthCheck = new ResourceUtilizationHealthCheck(options, dataTracker.Object); +#if !NETFRAMEWORK + using var healthCheck = new ResourceUtilizationHealthCheck( + options, + dataTracker.Object, + Microsoft.Extensions.Options.Options.Create(new ResourceMonitoringOptions())); +#else + using var healthCheck = new ResourceUtilizationHealthCheck( + options, + dataTracker.Object); +#endif var healthCheckResult = await healthCheck.CheckHealthAsync(checkContext); Assert.Equal(expected, healthCheckResult.Status); Assert.NotEmpty(healthCheckResult.Data); @@ -43,9 +52,22 @@ public async Task TestCpuAndMemoryChecks(HealthStatus expected, double utilizati } } +#if !NETFRAMEWORK [Fact] public void TestNullChecks() { - Assert.Throws(() => new ResourceUtilizationHealthCheck(Mock.Of>(), null!)); + Assert.Throws(() => new ResourceUtilizationHealthCheck( + Mock.Of>(), + null!, + Mock.Of>())); } +#else + [Fact] + public void TestNullChecks() + { + Assert.Throws(() => new ResourceUtilizationHealthCheck( + Mock.Of>(), + null!)); + } +#endif } diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringExtensionsTests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringExtensionsTests.cs index ccdd81e6c4e..995afb65c62 100644 --- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringExtensionsTests.cs +++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringExtensionsTests.cs @@ -31,7 +31,7 @@ public void Throw_Null_When_Registration_Ingredients_Null() } [ConditionalFact] - public void AddResourceUtilization_AddsResourceMonitoringService_ToServicesCollection() + public void AddsResourceMonitoringService_ToServicesCollection() { using var provider = new ServiceCollection() .AddLogging() @@ -51,7 +51,7 @@ public void AddResourceUtilization_AddsResourceMonitoringService_ToServicesColle } [ConditionalFact] - public void AddResourceUtilization_AddsResourceMonitoringService_ToServicesCollection_NoArgs() + public void AddsResourceMonitoringService_ToServicesCollection_NoArgs() { using var provider = new ServiceCollection() .AddLogging() @@ -67,7 +67,7 @@ public void AddResourceUtilization_AddsResourceMonitoringService_ToServicesColle } [ConditionalFact] - public void AddResourceUtilization_AddsResourceMonitoringService_AsHostedService() + public void AddsResourceMonitoringService_AsHostedService() { using var provider = new ServiceCollection() .AddLogging() @@ -114,7 +114,7 @@ public void ConfigureResourceUtilization_InitializeTrackerProperly() } [ConditionalFact] - public void ConfigureTracker_GivenOptionsDelegate_InitializeTrackerWithOptionsProperly() + public void ConfigureMonitor_GivenOptionsDelegate_InitializeTrackerWithOptionsProperly() { const int SamplingWindowValue = 3; const int CalculationPeriodValue = 2; @@ -142,7 +142,7 @@ public void ConfigureTracker_GivenOptionsDelegate_InitializeTrackerWithOptionsPr } [ConditionalFact] - public void ConfigureTracker_GivenIConfigurationSection_InitializeTrackerWithOptionsProperly() + public void ConfigureMonitor_GivenIConfigurationSection_InitializeTrackerWithOptionsProperly() { const int SamplingWindowValue = 3; const int CalculationPeriod = 2;