try fix download clients factory

This commit is contained in:
Flaminel
2025-06-16 22:40:12 +03:00
parent cacd62058f
commit 7b2af6dd5d
5 changed files with 103 additions and 1 deletions

View File

@@ -1,5 +1,7 @@
using System.Net;
using Common.Enums;
using Data.Models.Configuration.General;
using Microsoft.Extensions.Logging;
namespace Infrastructure.Http.DynamicHttpClientSystem;
@@ -10,11 +12,16 @@ public class DynamicHttpClientFactory : IDynamicHttpClientFactory
{
private readonly IHttpClientFactory _httpClientFactory;
private readonly IHttpClientConfigStore _configStore;
private readonly ILogger<DynamicHttpClientFactory> _logger;
public DynamicHttpClientFactory(IHttpClientFactory httpClientFactory, IHttpClientConfigStore configStore)
public DynamicHttpClientFactory(
IHttpClientFactory httpClientFactory,
IHttpClientConfigStore configStore,
ILogger<DynamicHttpClientFactory> logger)
{
_httpClientFactory = httpClientFactory;
_configStore = configStore;
_logger = logger;
}
public HttpClient CreateClient(string clientName, HttpClientConfig config)
@@ -93,4 +100,47 @@ public class DynamicHttpClientFactory : IDynamicHttpClientFactory
{
_configStore.RemoveConfiguration(clientName);
}
public void UpdateAllClientsFromGeneralConfig(GeneralConfig generalConfig)
{
var allConfigurations = _configStore.GetAllConfigurations().ToList();
if (!allConfigurations.Any())
{
_logger.LogDebug("No HTTP client configurations to update");
return;
}
var updatedConfigurations = allConfigurations.Select(kvp =>
{
var config = kvp.Value;
// Update timeout and certificate validation for all clients
config.Timeout = generalConfig.HttpTimeout;
config.CertificateValidationType = generalConfig.HttpCertificateValidation;
// Update retry configuration if it exists
if (config.RetryConfig != null)
{
config.RetryConfig.MaxRetries = generalConfig.HttpMaxRetries;
}
return new KeyValuePair<string, HttpClientConfig>(kvp.Key, config);
}).ToList();
// Apply all updates
_configStore.UpdateConfigurations(updatedConfigurations);
_logger.LogInformation("Updated {Count} HTTP client configurations with new general settings: " +
"Timeout={Timeout}s, MaxRetries={MaxRetries}, CertificateValidation={CertValidation}",
updatedConfigurations.Count,
generalConfig.HttpTimeout,
generalConfig.HttpMaxRetries,
generalConfig.HttpCertificateValidation);
}
public IEnumerable<string> GetRegisteredClientNames()
{
return _configStore.GetAllConfigurations().Select(kvp => kvp.Key);
}
}

View File

@@ -35,4 +35,17 @@ public class HttpClientConfigStore : IHttpClientConfigStore
{
return _retryConfigurations.TryGetValue(clientName, out retryConfig!);
}
public IEnumerable<KeyValuePair<string, HttpClientConfig>> GetAllConfigurations()
{
return _configurations.ToList(); // Return a snapshot to avoid collection modification issues
}
public void UpdateConfigurations(IEnumerable<KeyValuePair<string, HttpClientConfig>> configurations)
{
foreach (var kvp in configurations)
{
_configurations.AddOrUpdate(kvp.Key, kvp.Value, (_, _) => kvp.Value);
}
}
}

View File

@@ -1,4 +1,5 @@
using Common.Enums;
using Data.Models.Configuration.General;
namespace Infrastructure.Http.DynamicHttpClientSystem;
@@ -41,4 +42,14 @@ public interface IDynamicHttpClientFactory
/// Unregisters a configuration
/// </summary>
void UnregisterConfiguration(string clientName);
/// <summary>
/// Updates all registered HTTP client configurations with new general config settings
/// </summary>
void UpdateAllClientsFromGeneralConfig(GeneralConfig generalConfig);
/// <summary>
/// Gets all currently registered client names
/// </summary>
IEnumerable<string> GetRegisteredClientNames();
}

View File

@@ -24,4 +24,14 @@ public interface IHttpClientConfigStore
/// Adds or updates a retry configuration for the specified client name
/// </summary>
void AddRetryConfiguration(string clientName, RetryConfig retryConfig);
/// <summary>
/// Gets all currently registered configurations
/// </summary>
IEnumerable<KeyValuePair<string, HttpClientConfig>> GetAllConfigurations();
/// <summary>
/// Updates multiple configurations atomically
/// </summary>
void UpdateConfigurations(IEnumerable<KeyValuePair<string, HttpClientConfig>> configurations);
}