feat: add database circuit breaker and health-readiness endpoint
Introduce a process-wide DatabaseCircuitBreaker that fails fast when Postgres is unavailable (e.g. disk full) instead of letting every request burn doomed EF Core retries. CircuitAwareExecutionStrategy derives from NpgsqlRetryingExecutionStrategy and records success/failure around the public Execute/ExecuteAsync seams; background workers skip work and back off while the circuit is open; the exception middleware maps an open circuit (and other DB outages) to 503. Adds /health (liveness) and /health/ready (readiness, reporting circuit state), plus unit tests for the open/half-open transitions and non-transient SQLSTATE detection. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
namespace LiveRecorder.Application.Models.Reports;
|
||||
|
||||
public sealed class HealthReadyResponse
|
||||
{
|
||||
public string Status { get; set; } = "ready";
|
||||
public DateTimeOffset Timestamp { get; set; }
|
||||
public DatabaseHealthStatus Database { get; set; } = new();
|
||||
}
|
||||
|
||||
public sealed class DatabaseHealthStatus
|
||||
{
|
||||
public bool Reachable { get; set; }
|
||||
public string? Reason { get; set; }
|
||||
public int ConsecutiveFailures { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user