New: Per Indexer Proxies

Fixes #281
This commit is contained in:
Qstick
2021-07-31 16:30:41 -04:00
parent 31886e8d35
commit 7480ebea85
149 changed files with 2374 additions and 393 deletions

View File

@@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using FluentValidation.Results;
using NLog;
using NzbDrone.Common.Cloud;
using NzbDrone.Common.Http;
using NzbDrone.Core.Validation;
namespace NzbDrone.Core.IndexerProxies
{
public abstract class HttpIndexerProxyBase<TSettings> : IndexerProxyBase<TSettings>
where TSettings : IIndexerProxySettings, new()
{
protected readonly IHttpClient _httpClient;
protected readonly IHttpRequestBuilderFactory _cloudRequestBuilder;
protected readonly Logger _logger;
public HttpIndexerProxyBase(IProwlarrCloudRequestBuilder cloudRequestBuilder, IHttpClient httpClient, Logger logger)
{
_httpClient = httpClient;
_logger = logger;
_cloudRequestBuilder = cloudRequestBuilder.Services;
}
public override ValidationResult Test()
{
var failures = new List<ValidationFailure>();
var addresses = Dns.GetHostAddresses(Settings.Host);
if (!addresses.Any())
{
failures.Add(new NzbDroneValidationFailure("Host", "ProxyCheckResolveIpMessage"));
}
var request = PreRequest(_cloudRequestBuilder.Create()
.Resource("/ping")
.Build());
try
{
var response = _httpClient.Execute(request);
// We only care about 400 responses, other error codes can be ignored
if (response.StatusCode == HttpStatusCode.BadRequest)
{
_logger.Error("Proxy Health Check failed: {0}", response.StatusCode);
failures.Add(new NzbDroneValidationFailure("Host", "ProxyCheckBadRequestMessage"));
}
}
catch (Exception ex)
{
_logger.Error(ex, "Proxy Health Check failed");
failures.Add(new NzbDroneValidationFailure("Host", "ProxyCheckFailedToTestMessage"));
}
return new ValidationResult(failures);
}
}
}