From 1b96a43037f7e01604790e0d639e3a453464dad0 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Tue, 27 May 2014 23:04:13 +0200 Subject: [PATCH] Fixed performance issues with the QueueModule and limited the number of items the Download Client will fetch as history. --- src/NzbDrone.Api/Queue/QueueResource.cs | 6 ++++-- .../DownloadClientTests/DownloadClientFixtureBase.cs | 5 +++++ src/NzbDrone.Core/Configuration/ConfigService.cs | 7 +++++++ src/NzbDrone.Core/Configuration/IConfigService.cs | 1 + src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs | 6 ++++-- src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs | 8 +++----- src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs | 8 +++++--- .../Download/Clients/UsenetBlackhole/UsenetBlackhole.cs | 6 ++++-- src/NzbDrone.Core/Download/DownloadClientBase.cs | 5 ++++- 9 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/NzbDrone.Api/Queue/QueueResource.cs b/src/NzbDrone.Api/Queue/QueueResource.cs index 5d8cc2642..d47dbbd8f 100644 --- a/src/NzbDrone.Api/Queue/QueueResource.cs +++ b/src/NzbDrone.Api/Queue/QueueResource.cs @@ -2,13 +2,15 @@ using NzbDrone.Api.REST; using NzbDrone.Core.Qualities; using NzbDrone.Core.Tv; +using NzbDrone.Api.Series; +using NzbDrone.Api.Episodes; namespace NzbDrone.Api.Queue { public class QueueResource : RestResource { - public Core.Tv.Series Series { get; set; } - public Episode Episode { get; set; } + public SeriesResource Series { get; set; } + public EpisodeResource Episode { get; set; } public QualityModel Quality { get; set; } public Decimal Size { get; set; } public String Title { get; set; } diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs index 30ed654bb..2ba721adb 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs @@ -10,6 +10,7 @@ using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser; using NzbDrone.Core.Tv; using NzbDrone.Core.Download; +using NzbDrone.Core.Configuration; namespace NzbDrone.Core.Test.Download.DownloadClientTests { @@ -22,6 +23,10 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests [SetUp] public void SetupBase() { + Mocker.GetMock() + .SetupGet(s => s.DownloadClientHistoryLimit) + .Returns(30); + Mocker.GetMock() .Setup(s => s.Map(It.IsAny(), It.IsAny(), null)) .Returns(CreateRemoteEpisode()); diff --git a/src/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs index af776e904..e1462a561 100644 --- a/src/NzbDrone.Core/Configuration/ConfigService.cs +++ b/src/NzbDrone.Core/Configuration/ConfigService.cs @@ -205,6 +205,13 @@ namespace NzbDrone.Core.Configuration set { SetValue("DownloadedEpisodesScanInterval", value); } } + public Int32 DownloadClientHistoryLimit + { + get { return GetValueInt("DownloadClientHistoryLimit", 30); } + + set { SetValue("DownloadClientHistoryLimit", value); } + } + public Boolean SkipFreeSpaceCheckWhenImporting { get { return GetValueBoolean("SkipFreeSpaceCheckWhenImporting", false); } diff --git a/src/NzbDrone.Core/Configuration/IConfigService.cs b/src/NzbDrone.Core/Configuration/IConfigService.cs index a295a1ac3..f471762c5 100644 --- a/src/NzbDrone.Core/Configuration/IConfigService.cs +++ b/src/NzbDrone.Core/Configuration/IConfigService.cs @@ -17,6 +17,7 @@ namespace NzbDrone.Core.Configuration String DownloadedEpisodesFolder { get; set; } String DownloadClientWorkingFolders { get; set; } Int32 DownloadedEpisodesScanInterval { get; set; } + Int32 DownloadClientHistoryLimit { get; set; } //Completed/Failed Download Handling (Download client) Boolean EnableCompletedDownloadHandling { get; set; } diff --git a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs index b4f67bec3..2fb35f2a0 100644 --- a/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs +++ b/src/NzbDrone.Core/Download/Clients/Nzbget/Nzbget.cs @@ -4,6 +4,7 @@ using System.Linq; using NLog; using NzbDrone.Common; using NzbDrone.Common.Http; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Parser; @@ -18,10 +19,11 @@ namespace NzbDrone.Core.Download.Clients.Nzbget private readonly IHttpProvider _httpProvider; public Nzbget(INzbgetProxy proxy, + IConfigService configService, IParsingService parsingService, IHttpProvider httpProvider, Logger logger) - : base(parsingService, logger) + : base(configService, parsingService, logger) { _proxy = proxy; _httpProvider = httpProvider; @@ -139,7 +141,7 @@ namespace NzbDrone.Core.Download.Clients.Nzbget try { - history = _proxy.GetHistory(Settings); + history = _proxy.GetHistory(Settings).Take(_configService.DownloadClientHistoryLimit).ToList(); } catch (DownloadClientException ex) { diff --git a/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs b/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs index 7e3bb56de..2753d9056 100644 --- a/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs +++ b/src/NzbDrone.Core/Download/Clients/Pneumatic/Pneumatic.cs @@ -17,20 +17,18 @@ namespace NzbDrone.Core.Download.Clients.Pneumatic { public class Pneumatic : DownloadClientBase, IExecute { - private readonly IConfigService _configService; private readonly IHttpProvider _httpProvider; private readonly IDiskProvider _diskProvider; private static readonly Logger logger = NzbDroneLogger.GetLogger(); - public Pneumatic(IConfigService configService, - IHttpProvider httpProvider, + public Pneumatic(IHttpProvider httpProvider, IDiskProvider diskProvider, + IConfigService configService, IParsingService parsingService, Logger logger) - : base(parsingService, logger) + : base(configService, parsingService, logger) { - _configService = configService; _httpProvider = httpProvider; _diskProvider = diskProvider; } diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs index 998f8876b..d97914a45 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs @@ -4,6 +4,7 @@ using System.Linq; using NLog; using NzbDrone.Common; using NzbDrone.Common.Http; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Parser; @@ -18,10 +19,11 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd private readonly ISabnzbdProxy _proxy; public Sabnzbd(IHttpProvider httpProvider, - IParsingService parsingService, ISabnzbdProxy proxy, + IConfigService configService, + IParsingService parsingService, Logger logger) - : base(parsingService, logger) + : base(configService, parsingService, logger) { _httpProvider = httpProvider; _proxy = proxy; @@ -116,7 +118,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd try { - sabHistory = _proxy.GetHistory(0, 0, Settings); + sabHistory = _proxy.GetHistory(0, _configService.DownloadClientHistoryLimit, Settings); } catch (DownloadClientException ex) { diff --git a/src/NzbDrone.Core/Download/Clients/UsenetBlackhole/UsenetBlackhole.cs b/src/NzbDrone.Core/Download/Clients/UsenetBlackhole/UsenetBlackhole.cs index 260d99198..036be4338 100644 --- a/src/NzbDrone.Core/Download/Clients/UsenetBlackhole/UsenetBlackhole.cs +++ b/src/NzbDrone.Core/Download/Clients/UsenetBlackhole/UsenetBlackhole.cs @@ -6,6 +6,7 @@ using NLog; using NzbDrone.Common; using NzbDrone.Common.Disk; using NzbDrone.Common.Http; +using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Organizer; @@ -23,10 +24,11 @@ namespace NzbDrone.Core.Download.Clients.UsenetBlackhole public UsenetBlackhole(IDiskProvider diskProvider, IDiskScanService diskScanService, - IParsingService parsingService, IHttpProvider httpProvider, + IConfigService configService, + IParsingService parsingService, Logger logger) - : base(parsingService, logger) + : base(configService, parsingService, logger) { _diskProvider = diskProvider; _diskScanService = diskScanService; diff --git a/src/NzbDrone.Core/Download/DownloadClientBase.cs b/src/NzbDrone.Core/Download/DownloadClientBase.cs index 410286aee..453dcc479 100644 --- a/src/NzbDrone.Core/Download/DownloadClientBase.cs +++ b/src/NzbDrone.Core/Download/DownloadClientBase.cs @@ -5,6 +5,7 @@ using NzbDrone.Core.Indexers; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.ThingiProvider; +using NzbDrone.Core.Configuration; using NLog; namespace NzbDrone.Core.Download @@ -12,6 +13,7 @@ namespace NzbDrone.Core.Download public abstract class DownloadClientBase : IDownloadClient where TSettings : IProviderConfig, new() { + protected readonly IConfigService _configService; private readonly IParsingService _parsingService; protected readonly Logger _logger; @@ -41,8 +43,9 @@ namespace NzbDrone.Core.Download } } - protected DownloadClientBase(IParsingService parsingService, Logger logger) + protected DownloadClientBase(IConfigService configService, IParsingService parsingService, Logger logger) { + _configService = configService; _parsingService = parsingService; _logger = logger; }