31 lines
896 B
C#
31 lines
896 B
C#
using System.Threading;
|
|
using PepperBot.Application.Interfaces;
|
|
|
|
namespace PepperBot.Infrastructure.Health;
|
|
|
|
public class PepperHealthMonitor : IHealthMonitor
|
|
{
|
|
private DateTimeOffset? _lastSuccessfulRequestAt;
|
|
|
|
public DateTimeOffset? LastSuccessfulRequestAt => _lastSuccessfulRequestAt;
|
|
|
|
public void ReportSuccess(DateTimeOffset timestamp)
|
|
{
|
|
// Просто запоминаем последнее успешное время; избыточную синхронизацию не вводим
|
|
// так как запись идёт по одному воркеру.
|
|
_lastSuccessfulRequestAt = timestamp;
|
|
}
|
|
|
|
public bool IsHealthy(TimeSpan successTtl)
|
|
{
|
|
var last = _lastSuccessfulRequestAt;
|
|
if (last is null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return DateTimeOffset.UtcNow - last.Value < successTtl;
|
|
}
|
|
}
|
|
|