More accurate indexer query times in History

pull/6/head
Qstick 3 years ago
parent 041596df4c
commit ff926d71f7

@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.IndexerTests.FileListTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(4);
releases.First().Should().BeOfType<TorrentInfo>();

@ -46,7 +46,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.POST)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), responseJson));
var torrents = Subject.Fetch(_movieSearchCriteria);
var torrents = Subject.Fetch(_movieSearchCriteria).Releases;
torrents.Should().HaveCount(2);
torrents.First().Should().BeOfType<HDBitsInfo>();
@ -75,7 +75,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
.Setup(v => v.Execute(It.IsAny<HttpRequest>()))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), Encoding.UTF8.GetBytes(responseJson)));
var torrents = Subject.Fetch(_movieSearchCriteria);
var torrents = Subject.Fetch(_movieSearchCriteria).Releases;
torrents.Should().BeEmpty();

@ -92,7 +92,7 @@ namespace NzbDrone.Core.Test.IndexerTests.IPTorrentsTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(5);
releases.First().Should().BeOfType<TorrentInfo>();

@ -44,7 +44,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 }, Limit = 100, Offset = 0 });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 }, Limit = 100, Offset = 0 }).Releases;
releases.Should().HaveCount(100);

@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NyaaTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria());
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
releases.Should().HaveCount(4);
releases.First().Should().BeOfType<TorrentInfo>();

@ -42,7 +42,7 @@ namespace NzbDrone.Core.Test.IndexerTests.PTPTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader { ContentType = HttpAccept.Json.Value }, responseJson));
var torrents = Subject.Fetch(new MovieSearchCriteria());
var torrents = Subject.Fetch(new MovieSearchCriteria()).Releases;
torrents.Should().HaveCount(293);
torrents.First().Should().BeOfType<PassThePopcornInfo>();

@ -39,7 +39,7 @@ namespace NzbDrone.Core.Test.IndexerTests.RarbgTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(4);
releases.First().Should().BeOfType<TorrentInfo>();
@ -66,7 +66,7 @@ namespace NzbDrone.Core.Test.IndexerTests.RarbgTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), "{ error_code: 20, error: \"some message\" }"));
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(0);
}
@ -78,7 +78,7 @@ namespace NzbDrone.Core.Test.IndexerTests.RarbgTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), "{ error_code: 25, error: \"some message\" }"));
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(0);

@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/ImmortalSeed.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(50);
releases.First().Should().BeOfType<TorrentInfo>();
@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/Ezrss.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(3);
releases.First().Should().BeOfType<TorrentInfo>();
@ -99,7 +99,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
GivenRecentFeedResponse("TorrentRss/ShowRSS.info.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(5);
releases.First().Should().BeOfType<TorrentInfo>();
@ -127,7 +127,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
GivenRecentFeedResponse("TorrentRss/Doki.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(5);
releases.First().Should().BeOfType<TorrentInfo>();
@ -153,7 +153,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/ExtraTorrents.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(5);
releases.First().Should().BeOfType<TorrentInfo>();
@ -179,7 +179,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/LimeTorrents.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(5);
releases.First().Should().BeOfType<TorrentInfo>();
@ -205,7 +205,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/AnimeTosho_NoSize.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(2);
releases.First().Should().BeOfType<TorrentInfo>();
@ -231,7 +231,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/AnimeTosho_NoSize.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(2);
releases.Last().Should().BeOfType<TorrentInfo>();
@ -248,7 +248,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/AlphaRatio.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(2);
releases.Last().Should().BeOfType<TorrentInfo>();
@ -266,7 +266,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
Subject.Definition.Settings.As<TorrentRssIndexerSettings>().AllowZeroSize = true;
GivenRecentFeedResponse("TorrentRss/EvolutionWorld.xml");
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
releases.Should().HaveCount(2);
releases.First().Should().BeOfType<TorrentInfo>();
@ -292,7 +292,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
{
GivenRecentFeedResponse("TorrentRss/invalid/TorrentDay_NoPubDate.xml");
Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Should().BeEmpty();
Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases.Should().BeEmpty();
Mocker.GetMock<IIndexerStatusService>()
.Verify(v => v.RecordFailure(It.IsAny<int>(), TimeSpan.Zero), Times.Once());

@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria());
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
releases.Should().HaveCount(5);
@ -74,7 +74,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria());
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
releases.Should().HaveCount(5);
@ -104,7 +104,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
var releases = Subject.Fetch(new MovieSearchCriteria());
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
releases.Should().HaveCount(2);

@ -91,6 +91,7 @@ namespace NzbDrone.Core.History
history.Data.Add("ElapsedTime", message.Time.ToString());
history.Data.Add("Query", message.Query.SearchTerm ?? string.Empty);
history.Data.Add("Categories", string.Join(',', message.Query.Categories) ?? string.Empty);
history.Data.Add("Successful", message.Successful.ToString());
history.Data.Add("QueryResults", message.Results.HasValue ? message.Results.ToString() : null);

@ -127,7 +127,7 @@ namespace NzbDrone.Core.IndexerSearch
return spec;
}
private List<ReleaseInfo> Dispatch(Func<IIndexer, IEnumerable<ReleaseInfo>> searchAction, SearchCriteriaBase criteriaBase)
private List<ReleaseInfo> Dispatch(Func<IIndexer, IndexerPageableQueryResult> searchAction, SearchCriteriaBase criteriaBase)
{
var indexers = criteriaBase.InteractiveSearch ?
_indexerFactory.InteractiveSearchEnabled() :
@ -151,25 +151,25 @@ namespace NzbDrone.Core.IndexerSearch
taskList.Add(taskFactory.StartNew(() =>
{
var sw = Stopwatch.StartNew();
try
{
var indexerReports = searchAction(indexerLocal);
lock (reports)
{
reports.AddRange(indexerReports);
reports.AddRange(indexerReports.Releases);
}
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, sw.ElapsedMilliseconds, true, indexerReports.Count()));
foreach (var query in indexerReports.Queries)
{
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, query.ElapsedTime, true, indexerReports.Releases.Count()));
}
}
catch (Exception e)
{
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, sw.ElapsedMilliseconds, false));
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, 0, false));
_logger.Error(e, "Error while searching for {0}", criteriaBase);
}
sw.Stop();
}).LogExceptions());
}

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using FluentValidation.Results;
@ -40,7 +41,7 @@ namespace NzbDrone.Core.Indexers
_httpClient = httpClient;
}
public override IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria)
public override IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria)
{
//if (!SupportsSearch)
//{
@ -49,41 +50,41 @@ namespace NzbDrone.Core.Indexers
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
}
public override IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria)
public override IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria)
{
if (!SupportsSearch)
{
return new List<ReleaseInfo>();
return new IndexerPageableQueryResult();
}
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
}
public override IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria)
public override IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria)
{
if (!SupportsSearch)
{
return new List<ReleaseInfo>();
return new IndexerPageableQueryResult();
}
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
}
public override IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria)
public override IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria)
{
if (!SupportsSearch)
{
return new List<ReleaseInfo>();
return new IndexerPageableQueryResult();
}
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
}
public override IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria)
public override IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria)
{
if (!SupportsSearch)
{
return new List<ReleaseInfo>();
return new IndexerPageableQueryResult();
}
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
@ -116,9 +117,10 @@ namespace NzbDrone.Core.Indexers
return requests;
}
protected virtual IList<ReleaseInfo> FetchReleases(Func<IIndexerRequestGenerator, IndexerPageableRequestChain> pageableRequestChainSelector, bool isRecent = false)
protected virtual IndexerPageableQueryResult FetchReleases(Func<IIndexerRequestGenerator, IndexerPageableRequestChain> pageableRequestChainSelector, bool isRecent = false)
{
var releases = new List<ReleaseInfo>();
var result = new IndexerPageableQueryResult();
var url = string.Empty;
try
@ -153,9 +155,11 @@ namespace NzbDrone.Core.Indexers
var page = FetchPage(request, parser);
pagedReleases.AddRange(page);
result.Queries.Add(page);
if (isRecent && page.Any())
pagedReleases.AddRange(page.Releases);
if (isRecent && page.Releases.Any())
{
if (lastReleaseInfo == null)
{
@ -163,8 +167,8 @@ namespace NzbDrone.Core.Indexers
break;
}
var oldestReleaseDate = page.Select(v => v.PublishDate).Min();
if (oldestReleaseDate < lastReleaseInfo.PublishDate || page.Any(v => v.DownloadUrl == lastReleaseInfo.DownloadUrl))
var oldestReleaseDate = page.Releases.Select(v => v.PublishDate).Min();
if (oldestReleaseDate < lastReleaseInfo.PublishDate || page.Releases.Any(v => v.DownloadUrl == lastReleaseInfo.DownloadUrl))
{
fullyUpdated = true;
break;
@ -182,7 +186,7 @@ namespace NzbDrone.Core.Indexers
break;
}
if (!IsFullPage(page))
if (!IsFullPage(page.Releases))
{
break;
}
@ -289,7 +293,9 @@ namespace NzbDrone.Core.Indexers
_logger.Error(ex, "An error occurred while processing indexer feed. {0}", url);
}
return CleanupReleases(releases);
result.Releases = CleanupReleases(releases);
return result;
}
public override IndexerCapabilities GetCapabilities()
@ -312,13 +318,18 @@ namespace NzbDrone.Core.Indexers
return PageSize != 0 && page.Count >= PageSize;
}
protected virtual IList<ReleaseInfo> FetchPage(IndexerRequest request, IParseIndexerResponse parser)
protected virtual IndexerQueryResult FetchPage(IndexerRequest request, IParseIndexerResponse parser)
{
var response = FetchIndexerResponse(request);
try
{
return parser.ParseResponse(response).ToList();
return new IndexerQueryResult
{
Releases = parser.ParseResponse(response).ToList(),
ElapsedTime = response.ElapsedTime,
StatusCode = (int)response.HttpResponse.StatusCode
};
}
catch (Exception ex)
{
@ -339,7 +350,13 @@ namespace NzbDrone.Core.Indexers
request.HttpRequest.AllowAutoRedirect = true;
return new IndexerResponse(request, _httpClient.Execute(request.HttpRequest));
var stopWatch = Stopwatch.StartNew();
var response = _httpClient.Execute(request.HttpRequest);
stopWatch.Stop();
return new IndexerResponse(request, response, stopWatch.ElapsedMilliseconds);
}
protected override void Test(List<ValidationFailure> failures)
@ -366,7 +383,7 @@ namespace NzbDrone.Core.Indexers
var releases = FetchPage(firstRequest, parser);
if (releases.Empty())
if (releases.Releases.Empty())
{
return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer or your indexer category settings.");
}

@ -14,11 +14,11 @@ namespace NzbDrone.Core.Indexers
DownloadProtocol Protocol { get; }
IndexerPrivacy Privacy { get; }
IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria);
IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria);
IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria);
IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria);
IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria);
IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria);
IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria);
IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria);
IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria);
IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria);
IndexerCapabilities GetCapabilities();
}

@ -65,11 +65,11 @@ namespace NzbDrone.Core.Indexers
protected TSettings Settings => (TSettings)Definition.Settings;
public abstract IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria);
public abstract IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria);
public abstract IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria);
public abstract IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria);
public abstract IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria);
public abstract IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria);
public abstract IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria);
public abstract IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria);
public abstract IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria);
public abstract IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria);
public abstract IndexerCapabilities GetCapabilities();

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Indexers
{
public class IndexerPageableQueryResult
{
public IndexerPageableQueryResult()
{
Releases = new List<ReleaseInfo>();
Queries = new List<IndexerQueryResult>();
}
public IList<ReleaseInfo> Releases { get; set; }
public IList<IndexerQueryResult> Queries { get; set; }
}
}

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Indexers
{
public class IndexerQueryResult
{
public IndexerQueryResult()
{
Releases = new List<ReleaseInfo>();
}
public IList<ReleaseInfo> Releases { get; set; }
public long ElapsedTime { get; set; }
public int StatusCode { get; set; }
}
}

@ -1,4 +1,4 @@
using NzbDrone.Common.Http;
using NzbDrone.Common.Http;
namespace NzbDrone.Core.Indexers
{
@ -7,10 +7,11 @@ namespace NzbDrone.Core.Indexers
private readonly IndexerRequest _indexerRequest;
private readonly HttpResponse _httpResponse;
public IndexerResponse(IndexerRequest indexerRequest, HttpResponse httpResponse)
public IndexerResponse(IndexerRequest indexerRequest, HttpResponse httpResponse, long elapsedTime = 0)
{
_indexerRequest = indexerRequest;
_httpResponse = httpResponse;
ElapsedTime = elapsedTime;
}
public IndexerRequest Request => _indexerRequest;
@ -20,5 +21,6 @@ namespace NzbDrone.Core.Indexers
public HttpResponse HttpResponse => _httpResponse;
public string Content => _httpResponse.Content;
public long ElapsedTime { get; private set; }
}
}

Loading…
Cancel
Save