Files
QVPN/src/QVPN.Core/RecoveryPolicy.cs
T

15 lines
728 B
C#

namespace QVPN.Core;
public sealed class RecoveryPolicy
{
public int ConsecutiveFailures { get; private set; }
public int Attempts { get; private set; }
public DateTimeOffset NextAttempt { get; private set; }
public bool HealthFailed() => ++ConsecutiveFailures >= 3;
public void Healthy() { ConsecutiveFailures = 0; }
public void Stable() { Healthy(); Attempts = 0; }
public void Failed(DateTimeOffset now) { ConsecutiveFailures = 0; Attempts = Math.Min(Attempts + 1, 10); NextAttempt = now.AddSeconds(Math.Min(60, 2 * Math.Pow(2, Attempts - 1))); }
public void Reset() { Stable(); NextAttempt = DateTimeOffset.MinValue; }
public bool CanAttempt(DateTimeOffset now) => now >= NextAttempt;
}