28 lines
1.0 KiB
C#
28 lines
1.0 KiB
C#
using static PostFundManagement.Domain.Extensions.Constants;
|
|
|
|
namespace PostFundManagement.Domain.Health;
|
|
|
|
public sealed class PostgresHealthCheck(IConfiguration configuration) : IHealthCheck
|
|
{
|
|
private readonly string connectionString = configuration.GetConnectionString(DatabaseConfigName)!;
|
|
|
|
public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
|
|
{
|
|
try
|
|
{
|
|
await using var dataSource = NpgsqlDataSource.Create(connectionString);
|
|
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($"{DatabaseConfigName} is responsive.");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return HealthCheckResult.Unhealthy($"{DatabaseConfigName} is unreachable.", ex);
|
|
}
|
|
}
|
|
} |