using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Diagnostics.HealthChecks;
namespace Jellyfin.Server.HealthChecks;
///
/// Implementation of the for a .
///
/// The type of database context.
public class DbContextFactoryHealthCheck : IHealthCheck
where TContext : DbContext
{
private readonly IDbContextFactory _dbContextFactory;
///
/// Initializes a new instance of the class.
///
/// Instance of the interface.
public DbContextFactoryHealthCheck(IDbContextFactory contextFactory)
{
_dbContextFactory = contextFactory;
}
///
public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
ArgumentNullException.ThrowIfNull(context);
var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false);
await using (dbContext.ConfigureAwait(false))
{
if (await dbContext.Database.CanConnectAsync(cancellationToken).ConfigureAwait(false))
{
return HealthCheckResult.Healthy();
}
}
return HealthCheckResult.Unhealthy();
}
}