using Microsoft.Extensions.Diagnostics.HealthChecks; using Npgsql; namespace GmRelay.Web.Health; public sealed class NpgsqlHealthCheck(NpgsqlDataSource dataSource) : IHealthCheck { public async Task CheckHealthAsync( HealthCheckContext context, CancellationToken cancellationToken = default) { try { await using var connection = await dataSource.OpenConnectionAsync(cancellationToken); await using var command = connection.CreateCommand(); command.CommandText = "SELECT 1"; await command.ExecuteScalarAsync(cancellationToken); return HealthCheckResult.Healthy(); } catch (Exception ex) { return HealthCheckResult.Unhealthy("PostgreSQL is unavailable", ex); } } }