| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | using System;using System.Threading;using System.Threading.Tasks;using Microsoft.EntityFrameworkCore;using Microsoft.Extensions.Diagnostics.HealthChecks;namespace Jellyfin.Server.HealthChecks;/// <summary>/// Implementation of the <see cref="DbContextHealthCheck{TContext}"/> for a <see cref="IDbContextFactory{TContext}"/>./// </summary>/// <typeparam name="TContext">The type of database context.</typeparam>public class DbContextFactoryHealthCheck<TContext> : IHealthCheck    where TContext : DbContext{    private readonly IDbContextFactory<TContext> _dbContextFactory;    /// <summary>    /// Initializes a new instance of the <see cref="DbContextFactoryHealthCheck{TContext}"/> class.    /// </summary>    /// <param name="contextFactory">Instance of the <see cref="IDbContextFactory{TContext}"/> interface.</param>    public DbContextFactoryHealthCheck(IDbContextFactory<TContext> contextFactory)    {        _dbContextFactory = contextFactory;    }    /// <inheritdoc />    public async Task<HealthCheckResult> 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();    }}
 |