TargetRateThrottler
using Relativity.Transfer.InstanceSettings;
using Relativity.Transfer.Resources;
using System;
using System.Globalization;
using System.Threading;
namespace Relativity.Transfer.Validator
{
internal class TargetRateThrottler : ITargetRateThrottler
{
private readonly IInstanceSettingsConfigurationService instanceSettingsConfigurationService;
private readonly ITransferLog logger;
public TargetRateThrottler(IInstanceSettingsConfigurationService instanceSettingsConfigurationService, ITransferLog log)
{
this.instanceSettingsConfigurationService = instanceSettingsConfigurationService;
logger = log;
}
public void ThrottleToMaxAllowedValue(ClientConfiguration configuration)
{
if (configuration == null)
throw new ArgumentNullException("configuration");
configuration.TargetDataRateMbps = ThrottleToMaxAllowedValue(configuration.TargetDataRateMbps);
}
public int ThrottleToMaxAllowedValue(int targetRateMbps)
{
uint? result = instanceSettingsConfigurationService.GetMaxAllowedTargetDataRateMbpsAsync(CancellationToken.None).Result;
if (result.HasValue) {
long num = targetRateMbps;
long? nullable = result;
if ((num > nullable.GetValueOrDefault()) & nullable.HasValue) {
string messageTemplate = string.Format(CultureInfo.CurrentCulture, CoreStrings.TargetDataRateOverMaxAllowedValueExceptionMessage, result);
logger.LogWarning(messageTemplate, Array.Empty<object>());
return (int)result.Value;
}
}
return targetRateMbps;
}
}
}