<PackageReference Include="Polly.Core" Version="8.3.0" />

SingleHealthMetrics

using System; using System.Runtime.CompilerServices; namespace Polly.CircuitBreaker.Health { internal sealed class SingleHealthMetrics : HealthMetrics { private readonly TimeSpan _samplingDuration; private int _successes; private int _failures; private DateTimeOffset _startedAt; [System.Runtime.CompilerServices.NullableContext(1)] public SingleHealthMetrics(TimeSpan samplingDuration, TimeProvider timeProvider) : base(timeProvider) { _samplingDuration = samplingDuration; _startedAt = timeProvider.GetUtcNow(); } public override void IncrementSuccess() { TryReset(); _successes++; } public override void IncrementFailure() { TryReset(); _failures++; } public override void Reset() { _startedAt = base.TimeProvider.GetUtcNow(); _successes = 0; _failures = 0; } public override HealthInfo GetHealthInfo() { TryReset(); return HealthInfo.Create(_successes, _failures); } private void TryReset() { if (base.TimeProvider.GetUtcNow() - _startedAt >= _samplingDuration) Reset(); } } }