using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ErsatzTV.Core.Health; using ErsatzTV.Core.Health.Checks; using LanguageExt; namespace ErsatzTV.Infrastructure.Health { public class HealthCheckService : IHealthCheckService { private readonly List _checks; // ReSharper disable SuggestBaseTypeForParameterInConstructor public HealthCheckService( IFFmpegVersionHealthCheck ffmpegVersionHealthCheck, IFFmpegReportsHealthCheck ffmpegReportsHealthCheck, IHardwareAccelerationHealthCheck hardwareAccelerationHealthCheck, IMovieMetadataHealthCheck movieMetadataHealthCheck, IEpisodeMetadataHealthCheck episodeMetadataHealthCheck, IZeroDurationHealthCheck zeroDurationHealthCheck, IFileNotFoundHealthCheck fileNotFoundHealthCheck, IVaapiDriverHealthCheck vaapiDriverHealthCheck) { _checks = new List { ffmpegVersionHealthCheck, ffmpegReportsHealthCheck, hardwareAccelerationHealthCheck, movieMetadataHealthCheck, episodeMetadataHealthCheck, zeroDurationHealthCheck, fileNotFoundHealthCheck, vaapiDriverHealthCheck }; } public Task> PerformHealthChecks() => _checks.Map(c => c.Check()).SequenceParallel().Map(results => results.ToList()); } }