Fixed: Refresh applicable healthchecks on bulk deletes

This commit is contained in:
Qstick
2022-12-18 00:02:59 -06:00
parent 9227efdb65
commit a8234c9ce0
12 changed files with 40 additions and 21 deletions

View File

@@ -8,6 +8,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
[CheckOn(typeof(ProviderAddedEvent<IIndexer>))] [CheckOn(typeof(ProviderAddedEvent<IIndexer>))]
[CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))] [CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))]
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))] [CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderBulkDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderStatusChangedEvent<IIndexer>))] [CheckOn(typeof(ProviderStatusChangedEvent<IIndexer>))]
public class IndexerCheck : HealthCheckBase public class IndexerCheck : HealthCheckBase
{ {

View File

@@ -9,6 +9,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
{ {
[CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))] [CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))]
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))] [CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderBulkDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderStatusChangedEvent<IIndexer>))] [CheckOn(typeof(ProviderStatusChangedEvent<IIndexer>))]
public class IndexerLongTermStatusCheck : HealthCheckBase public class IndexerLongTermStatusCheck : HealthCheckBase
{ {

View File

@@ -9,6 +9,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
{ {
[CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))] [CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))]
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))] [CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderBulkDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderStatusChangedEvent<IIndexer>))] [CheckOn(typeof(ProviderStatusChangedEvent<IIndexer>))]
public class IndexerStatusCheck : HealthCheckBase public class IndexerStatusCheck : HealthCheckBase
{ {

View File

@@ -11,6 +11,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
[CheckOn(typeof(ProviderAddedEvent<IIndexer>))] [CheckOn(typeof(ProviderAddedEvent<IIndexer>))]
[CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))] [CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))]
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))] [CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderBulkDeletedEvent<IIndexer>))]
public class IndexerVIPCheck : HealthCheckBase public class IndexerVIPCheck : HealthCheckBase
{ {
private readonly IIndexerFactory _indexerFactory; private readonly IIndexerFactory _indexerFactory;

View File

@@ -11,6 +11,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
[CheckOn(typeof(ProviderAddedEvent<IIndexer>))] [CheckOn(typeof(ProviderAddedEvent<IIndexer>))]
[CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))] [CheckOn(typeof(ProviderUpdatedEvent<IIndexer>))]
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))] [CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderBulkDeletedEvent<IIndexer>))]
public class IndexerVIPExpiredCheck : HealthCheckBase public class IndexerVIPExpiredCheck : HealthCheckBase
{ {
private readonly IIndexerFactory _indexerFactory; private readonly IIndexerFactory _indexerFactory;

View File

@@ -9,6 +9,7 @@ using NzbDrone.Core.ThingiProvider.Events;
namespace NzbDrone.Core.HealthCheck.Checks namespace NzbDrone.Core.HealthCheck.Checks
{ {
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))] [CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderBulkDeletedEvent<IIndexer>))]
public class NoDefinitionCheck : HealthCheckBase public class NoDefinitionCheck : HealthCheckBase
{ {
private readonly IIndexerDefinitionUpdateService _indexerDefinitionUpdateService; private readonly IIndexerDefinitionUpdateService _indexerDefinitionUpdateService;

View File

@@ -9,6 +9,7 @@ using NzbDrone.Core.ThingiProvider.Events;
namespace NzbDrone.Core.HealthCheck.Checks namespace NzbDrone.Core.HealthCheck.Checks
{ {
[CheckOn(typeof(ProviderDeletedEvent<IIndexer>))] [CheckOn(typeof(ProviderDeletedEvent<IIndexer>))]
[CheckOn(typeof(ProviderBulkDeletedEvent<IIndexer>))]
public class OutdatedDefinitionCheck : HealthCheckBase public class OutdatedDefinitionCheck : HealthCheckBase
{ {
private readonly IIndexerDefinitionUpdateService _indexerDefinitionUpdateService; private readonly IIndexerDefinitionUpdateService _indexerDefinitionUpdateService;

View File

@@ -10,6 +10,7 @@ using NzbDrone.Core.Indexers.Newznab;
using NzbDrone.Core.IndexerVersions; using NzbDrone.Core.IndexerVersions;
using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.ThingiProvider;
using NzbDrone.Core.ThingiProvider.Events;
namespace NzbDrone.Core.Indexers namespace NzbDrone.Core.Indexers
{ {
@@ -17,7 +18,6 @@ namespace NzbDrone.Core.Indexers
{ {
List<IIndexer> Enabled(bool filterBlockedIndexers = true); List<IIndexer> Enabled(bool filterBlockedIndexers = true);
List<IIndexer> AllProviders(bool filterBlockedIndexers = true); List<IIndexer> AllProviders(bool filterBlockedIndexers = true);
void DeleteIndexers(List<int> indexerIds);
} }
public class IndexerFactory : ProviderFactory<IIndexer, IndexerDefinition>, IIndexerFactory public class IndexerFactory : ProviderFactory<IIndexer, IndexerDefinition>, IIndexerFactory
@@ -256,18 +256,6 @@ namespace NzbDrone.Core.Indexers
} }
} }
public void DeleteIndexers(List<int> indexerIds)
{
var indexersToDelete = _providerRepository.Get(indexerIds).ToList();
_providerRepository.DeleteMany(indexerIds);
foreach (var indexer in indexersToDelete)
{
_logger.Info("Deleted indexer {0}", indexer.Name);
}
}
public override ValidationResult Test(IndexerDefinition definition) public override ValidationResult Test(IndexerDefinition definition)
{ {
var result = base.Test(definition); var result = base.Test(definition);

View File

@@ -0,0 +1,16 @@
using System.Collections;
using System.Collections.Generic;
using NzbDrone.Common.Messaging;
namespace NzbDrone.Core.ThingiProvider.Events
{
public class ProviderBulkDeletedEvent<TProvider> : IEvent
{
public IEnumerable<int> ProviderIds { get; private set; }
public ProviderBulkDeletedEvent(IEnumerable<int> ids)
{
ProviderIds = ids;
}
}
}

View File

@@ -14,6 +14,7 @@ namespace NzbDrone.Core.ThingiProvider
void Update(TProviderDefinition definition); void Update(TProviderDefinition definition);
void Update(IEnumerable<TProviderDefinition> definitions); void Update(IEnumerable<TProviderDefinition> definitions);
void Delete(int id); void Delete(int id);
void Delete(IEnumerable<int> ids);
IEnumerable<TProviderDefinition> GetDefaultDefinitions(); IEnumerable<TProviderDefinition> GetDefaultDefinitions();
IEnumerable<TProviderDefinition> GetPresetDefinitions(TProviderDefinition providerDefinition); IEnumerable<TProviderDefinition> GetPresetDefinitions(TProviderDefinition providerDefinition);
void SetProviderCharacteristics(TProviderDefinition definition); void SetProviderCharacteristics(TProviderDefinition definition);

View File

@@ -121,6 +121,13 @@ namespace NzbDrone.Core.ThingiProvider
_eventAggregator.PublishEvent(new ProviderDeletedEvent<TProvider>(id)); _eventAggregator.PublishEvent(new ProviderDeletedEvent<TProvider>(id));
} }
public void Delete(IEnumerable<int> ids)
{
_providerRepository.DeleteMany(ids);
_eventAggregator.PublishEvent(new ProviderBulkDeletedEvent<TProvider>(ids));
}
public TProvider GetInstance(TProviderDefinition definition) public TProvider GetInstance(TProviderDefinition definition)
{ {
var type = GetImplementation(definition); var type = GetImplementation(definition);

View File

@@ -11,13 +11,13 @@ namespace Prowlarr.Api.V1.Indexers
[V1ApiController("indexer/editor")] [V1ApiController("indexer/editor")]
public class IndexerEditorController : Controller public class IndexerEditorController : Controller
{ {
private readonly IIndexerFactory _indexerService; private readonly IIndexerFactory _indexerFactory;
private readonly IManageCommandQueue _commandQueueManager; private readonly IManageCommandQueue _commandQueueManager;
private readonly IndexerResourceMapper _resourceMapper; private readonly IndexerResourceMapper _resourceMapper;
public IndexerEditorController(IIndexerFactory indexerService, IManageCommandQueue commandQueueManager, IndexerResourceMapper resourceMapper) public IndexerEditorController(IIndexerFactory indexerFactory, IManageCommandQueue commandQueueManager, IndexerResourceMapper resourceMapper)
{ {
_indexerService = indexerService; _indexerFactory = indexerFactory;
_commandQueueManager = commandQueueManager; _commandQueueManager = commandQueueManager;
_resourceMapper = resourceMapper; _resourceMapper = resourceMapper;
} }
@@ -25,7 +25,7 @@ namespace Prowlarr.Api.V1.Indexers
[HttpPut] [HttpPut]
public IActionResult SaveAll(IndexerEditorResource resource) public IActionResult SaveAll(IndexerEditorResource resource)
{ {
var indexersToUpdate = _indexerService.AllProviders(false).Select(x => (IndexerDefinition)x.Definition).Where(d => resource.IndexerIds.Contains(d.Id)); var indexersToUpdate = _indexerFactory.AllProviders(false).Select(x => (IndexerDefinition)x.Definition).Where(d => resource.IndexerIds.Contains(d.Id));
foreach (var indexer in indexersToUpdate) foreach (var indexer in indexersToUpdate)
{ {
@@ -59,13 +59,13 @@ namespace Prowlarr.Api.V1.Indexers
} }
} }
_indexerService.Update(indexersToUpdate); _indexerFactory.Update(indexersToUpdate);
var indexers = _indexerService.All(); var indexers = _indexerFactory.All();
foreach (var definition in indexers) foreach (var definition in indexers)
{ {
_indexerService.SetProviderCharacteristics(definition); _indexerFactory.SetProviderCharacteristics(definition);
} }
return Accepted(_resourceMapper.ToResource(indexers)); return Accepted(_resourceMapper.ToResource(indexers));
@@ -74,7 +74,7 @@ namespace Prowlarr.Api.V1.Indexers
[HttpDelete] [HttpDelete]
public object DeleteIndexers([FromBody] IndexerEditorResource resource) public object DeleteIndexers([FromBody] IndexerEditorResource resource)
{ {
_indexerService.DeleteIndexers(resource.IndexerIds); _indexerFactory.Delete(resource.IndexerIds);
return new { }; return new { };
} }