HealthMetrics
The health metrics for advanced circuit breaker.
All operations here are executed from CircuitStateController<T> under a lock and are thread safe.
using System;
using System.Runtime.CompilerServices;
namespace Polly.CircuitBreaker.Health
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
internal abstract class HealthMetrics
{
private const short NumberOfWindows = 10;
private static readonly TimeSpan ResolutionOfCircuitTimer = TimeSpan.FromMilliseconds(20);
protected TimeProvider TimeProvider { get; }
protected HealthMetrics(TimeProvider timeProvider)
{
TimeProvider = timeProvider;
}
public static HealthMetrics Create(TimeSpan samplingDuration, TimeProvider timeProvider)
{
if (!(samplingDuration < TimeSpan.FromTicks(ResolutionOfCircuitTimer.Ticks * 10)))
return new RollingHealthMetrics(samplingDuration, 10, timeProvider);
return new SingleHealthMetrics(samplingDuration, timeProvider);
}
public abstract void IncrementSuccess();
public abstract void IncrementFailure();
public abstract void Reset();
public abstract HealthInfo GetHealthInfo();
}
}