From 5c5dfed000c05fb4efe7e41de9022ff26a283786 Mon Sep 17 00:00:00 2001 From: Qstick Date: Fri, 23 Apr 2021 00:45:42 -0400 Subject: [PATCH] New: Old/Obsolete Indexer Check --- .../Checks/OutdatedDefinitionCheck.cs | 46 +++++++++++++++++++ .../IndexerDefinitionUpdateService.cs | 6 +++ src/NzbDrone.Core/Localization/Core/en.json | 1 + 3 files changed, 53 insertions(+) create mode 100644 src/NzbDrone.Core/HealthCheck/Checks/OutdatedDefinitionCheck.cs diff --git a/src/NzbDrone.Core/HealthCheck/Checks/OutdatedDefinitionCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/OutdatedDefinitionCheck.cs new file mode 100644 index 000000000..dd71e080a --- /dev/null +++ b/src/NzbDrone.Core/HealthCheck/Checks/OutdatedDefinitionCheck.cs @@ -0,0 +1,46 @@ +using System.Linq; +using NLog; +using NzbDrone.Core.Indexers; +using NzbDrone.Core.Indexers.Cardigann; +using NzbDrone.Core.IndexerVersions; +using NzbDrone.Core.Localization; +using NzbDrone.Core.ThingiProvider.Events; + +namespace NzbDrone.Core.HealthCheck.Checks +{ + [CheckOn(typeof(ProviderDeletedEvent))] + public class OutdatedDefinitionCheck : HealthCheckBase + { + private readonly IIndexerDefinitionUpdateService _indexerDefinitionUpdateService; + private readonly IIndexerFactory _indexerFactory; + private readonly Logger _logger; + + public OutdatedDefinitionCheck(IIndexerDefinitionUpdateService indexerDefinitionUpdateService, IIndexerFactory indexerFactory, ILocalizationService localizationService, Logger logger) + : base(localizationService) + { + _indexerDefinitionUpdateService = indexerDefinitionUpdateService; + _indexerFactory = indexerFactory; + _logger = logger; + } + + public override HealthCheck Check() + { + var blacklist = _indexerDefinitionUpdateService.GetBlacklist(); + + var oldIndexers = _indexerFactory.All().Where(i => i.Implementation == "Cardigann" && blacklist.Contains(((CardigannSettings)i.Settings).DefinitionFile)).ToList(); + + if (oldIndexers.Count == 0) + { + return new HealthCheck(GetType()); + } + + return new HealthCheck(GetType(), + HealthCheckResult.Warning, + string.Format(_localizationService.GetLocalizedString("IndexerObsoleteCheckMessage"), + string.Join(", ", oldIndexers.Select(v => v.Name))), + "#indexers-are-obsolete"); + } + + public override bool CheckOnSchedule => false; + } +} diff --git a/src/NzbDrone.Core/IndexerVersions/IndexerDefinitionUpdateService.cs b/src/NzbDrone.Core/IndexerVersions/IndexerDefinitionUpdateService.cs index 3cf24d3a9..f9ae906cc 100644 --- a/src/NzbDrone.Core/IndexerVersions/IndexerDefinitionUpdateService.cs +++ b/src/NzbDrone.Core/IndexerVersions/IndexerDefinitionUpdateService.cs @@ -18,6 +18,7 @@ namespace NzbDrone.Core.IndexerVersions { List All(); CardigannDefinition GetDefinition(string fileKey); + List GetBlacklist(); } public class IndexerDefinitionUpdateService : IIndexerDefinitionUpdateService, IExecute @@ -79,6 +80,11 @@ namespace NzbDrone.Core.IndexerVersions return definition; } + public List GetBlacklist() + { + return _defintionBlacklist; + } + private CardigannDefinition GetHttpDefinition(string id) { var req = new HttpRequest($"https://indexers.prowlarr.com/master/{DEFINITION_VERSION}/{id}"); diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 9d2938823..0519f26b1 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -82,6 +82,7 @@ "DevelopmentSettings": "Development Settings", "Disabled": "Disabled", "Docker": "Docker", + "IndexerObsoleteCheckMessage": "Indexers are obsolete or have been updated: {0}. Please remove and (or) re-add to Prowlarr", "DownloadClient": "Download Client", "DownloadClientCheckNoneAvailableMessage": "No download client is available", "DownloadClientCheckUnableToCommunicateMessage": "Unable to communicate with {0}.",