Add support for custom RetryAfter in RequestLimitReachedException

(cherry picked from commit 47cf8e6430b7f7704ce2f1524fa9e3c8e6f9b47a)
pull/2445/head
Mark McDowall 1 year ago committed by Bogdan
parent 63506e5a72
commit 816969d0f5

@ -20,6 +20,7 @@ namespace NzbDrone.Common.Http
public Dictionary<string, string> Segments { get; private set; } public Dictionary<string, string> Segments { get; private set; }
public HttpHeader Headers { get; private set; } public HttpHeader Headers { get; private set; }
public bool SuppressHttpError { get; set; } public bool SuppressHttpError { get; set; }
public IEnumerable<HttpStatusCode> SuppressHttpErrorStatusCodes { get; set; }
public bool LogHttpError { get; set; } public bool LogHttpError { get; set; }
public bool UseSimplifiedUserAgent { get; set; } public bool UseSimplifiedUserAgent { get; set; }
public bool AllowAutoRedirect { get; set; } public bool AllowAutoRedirect { get; set; }
@ -102,6 +103,7 @@ namespace NzbDrone.Common.Http
{ {
request.Method = Method; request.Method = Method;
request.SuppressHttpError = SuppressHttpError; request.SuppressHttpError = SuppressHttpError;
request.SuppressHttpErrorStatusCodes = SuppressHttpErrorStatusCodes;
request.LogHttpError = LogHttpError; request.LogHttpError = LogHttpError;
request.UseSimplifiedUserAgent = UseSimplifiedUserAgent; request.UseSimplifiedUserAgent = UseSimplifiedUserAgent;
request.AllowAutoRedirect = AllowAutoRedirect; request.AllowAutoRedirect = AllowAutoRedirect;

@ -1,4 +1,4 @@
using System; using System;
namespace NzbDrone.Common.Http namespace NzbDrone.Common.Http
{ {

@ -1,9 +1,12 @@
using NzbDrone.Common.Exceptions; using System;
using NzbDrone.Common.Exceptions;
namespace NzbDrone.Core.Indexers.Exceptions namespace NzbDrone.Core.Indexers.Exceptions
{ {
public class RequestLimitReachedException : NzbDroneException public class RequestLimitReachedException : NzbDroneException
{ {
public TimeSpan RetryAfter { get; private set; }
public RequestLimitReachedException(string message, params object[] args) public RequestLimitReachedException(string message, params object[] args)
: base(message, args) : base(message, args)
{ {
@ -13,5 +16,11 @@ namespace NzbDrone.Core.Indexers.Exceptions
: base(message) : base(message)
{ {
} }
public RequestLimitReachedException(string message, TimeSpan retryAfter)
: base(message)
{
RetryAfter = retryAfter;
}
} }
} }

@ -207,9 +207,17 @@ namespace NzbDrone.Core.Indexers
_indexerStatusService.RecordFailure(Definition.Id); _indexerStatusService.RecordFailure(Definition.Id);
_logger.Warn("{0} {1}", this, ex.Message); _logger.Warn("{0} {1}", this, ex.Message);
} }
catch (RequestLimitReachedException) catch (RequestLimitReachedException ex)
{ {
_indexerStatusService.RecordFailure(Definition.Id, TimeSpan.FromHours(1)); if (ex.RetryAfter != TimeSpan.Zero)
{
_indexerStatusService.RecordFailure(Definition.Id, ex.RetryAfter);
}
else
{
_indexerStatusService.RecordFailure(Definition.Id, TimeSpan.FromHours(1));
}
_logger.Warn("API Request Limit reached for {0}", this); _logger.Warn("API Request Limit reached for {0}", this);
} }
catch (ApiKeyException) catch (ApiKeyException)

Loading…
Cancel
Save