2017-10-27 03:21:06 +00:00
using System.Linq ;
using NzbDrone.Common.Extensions ;
using NzbDrone.Core.Download ;
using NzbDrone.Core.ThingiProvider.Events ;
namespace NzbDrone.Core.HealthCheck.Checks
{
[CheckOn(typeof(ProviderUpdatedEvent<IDownloadClient>))]
[CheckOn(typeof(ProviderDeletedEvent<IDownloadClient>))]
[CheckOn(typeof(ProviderStatusChangedEvent<IDownloadClient>))]
public class DownloadClientStatusCheck : HealthCheckBase
{
private readonly IDownloadClientFactory _providerFactory ;
private readonly IDownloadClientStatusService _providerStatusService ;
public DownloadClientStatusCheck ( IDownloadClientFactory providerFactory , IDownloadClientStatusService providerStatusService )
{
_providerFactory = providerFactory ;
_providerStatusService = providerStatusService ;
}
public override HealthCheck Check ( )
{
var enabledProviders = _providerFactory . GetAvailableProviders ( ) ;
var backOffProviders = enabledProviders . Join ( _providerStatusService . GetBlockedProviders ( ) ,
i = > i . Definition . Id ,
s = > s . ProviderId ,
( i , s ) = > new { Provider = i , Status = s } )
. ToList ( ) ;
if ( backOffProviders . Empty ( ) )
{
return new HealthCheck ( GetType ( ) ) ;
}
if ( backOffProviders . Count = = enabledProviders . Count )
{
2021-08-04 22:47:40 +00:00
return new HealthCheck ( GetType ( ) , HealthCheckResult . Error , "All download clients are unavailable due to failures" , "#download-clients-are-unavailable-due-to-failures" ) ;
2017-10-27 03:21:06 +00:00
}
2021-08-04 22:47:40 +00:00
return new HealthCheck ( GetType ( ) , HealthCheckResult . Warning , string . Format ( "Download clients unavailable due to failures: {0}" , string . Join ( ", " , backOffProviders . Select ( v = > v . Provider . Definition . Name ) ) ) , "#download-clients-are-unavailable-due-to-failures" ) ;
2017-10-27 03:21:06 +00:00
}
}
}