mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
Fixed: Don't fail sync on single app failure
This commit is contained in:
@@ -114,7 +114,12 @@ namespace NzbDrone.Core.Applications
|
|||||||
var prowlarrMappings = indexerMappings.ToDictionary(i => i.RemoteIndexerId, i => i.IndexerId);
|
var prowlarrMappings = indexerMappings.ToDictionary(i => i.RemoteIndexerId, i => i.IndexerId);
|
||||||
|
|
||||||
//Get Dictionary of Remote Indexers point to Prowlarr and what they are mapped to
|
//Get Dictionary of Remote Indexers point to Prowlarr and what they are mapped to
|
||||||
var remoteMappings = app.GetIndexerMappings();
|
var remoteMappings = ExecuteAction(a => a.GetIndexerMappings(), app);
|
||||||
|
|
||||||
|
if (remoteMappings == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
//Add mappings if not already in db, these were setup manually in the app or orphaned by a table wipe
|
//Add mappings if not already in db, these were setup manually in the app or orphaned by a table wipe
|
||||||
foreach (var mapping in remoteMappings)
|
foreach (var mapping in remoteMappings)
|
||||||
@@ -214,5 +219,64 @@ namespace NzbDrone.Core.Applications
|
|||||||
_logger.Error(ex, "An error occurred while talking to remote application.");
|
_logger.Error(ex, "An error occurred while talking to remote application.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TResult ExecuteAction<TResult>(Func<IApplication, TResult> applicationAction, IApplication application)
|
||||||
|
{
|
||||||
|
TResult result;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = applicationAction(application);
|
||||||
|
_applicationStatusService.RecordSuccess(application.Definition.Id);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
catch (WebException webException)
|
||||||
|
{
|
||||||
|
if (webException.Status == WebExceptionStatus.NameResolutionFailure ||
|
||||||
|
webException.Status == WebExceptionStatus.ConnectFailure)
|
||||||
|
{
|
||||||
|
_applicationStatusService.RecordConnectionFailure(application.Definition.Id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_applicationStatusService.RecordFailure(application.Definition.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
|
||||||
|
webException.Message.Contains("timed out"))
|
||||||
|
{
|
||||||
|
_logger.Warn("{0} server is currently unavailable. {1}", this, webException.Message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.Warn("{0} {1}", this, webException.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (TooManyRequestsException ex)
|
||||||
|
{
|
||||||
|
if (ex.RetryAfter != TimeSpan.Zero)
|
||||||
|
{
|
||||||
|
_applicationStatusService.RecordFailure(application.Definition.Id, ex.RetryAfter);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_applicationStatusService.RecordFailure(application.Definition.Id, TimeSpan.FromHours(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.Warn("API Request Limit reached for {0}", this);
|
||||||
|
}
|
||||||
|
catch (HttpException ex)
|
||||||
|
{
|
||||||
|
_applicationStatusService.RecordFailure(application.Definition.Id);
|
||||||
|
_logger.Warn("{0} {1}", this, ex.Message);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_applicationStatusService.RecordFailure(application.Definition.Id);
|
||||||
|
_logger.Error(ex, "An error occurred while talking to remote application.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return default(TResult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user