InstanceSettingsConfigurationKeplerRetriever
using Polly;
using Relativity.Transfer.Dto;
using Relativity.Transfer.Resources;
using System;
using System.Globalization;
using System.Net;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Relativity.Transfer.InstanceSettings.Configuration
{
internal class InstanceSettingsConfigurationKeplerRetriever : IInstanceSettingsConfigurationRetriever
{
private const string _ENDPOINT = "/Relativity.Rest/api/webapi-replacement/v1/tapi/RetrieveConfigurationAsync";
private readonly ITransferLog transferLog;
private readonly RelativityConnectionInfo connectionInfo;
private readonly IRestClient restClient;
public InstanceSettingsConfigurationKeplerRetriever(ITransferLog transferLog, RelativityConnectionInfo connectionInfo, IRestClient restClient)
{
this.transferLog = transferLog;
this.connectionInfo = connectionInfo;
this.restClient = restClient;
}
[AsyncStateMachine(typeof(<GetConfigurationAsync>d__5))]
public Task<InstanceSettingsConfiguration> GetConfigurationAsync(CancellationToken token)
{
<GetConfigurationAsync>d__5 stateMachine = default(<GetConfigurationAsync>d__5);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<InstanceSettingsConfiguration>.Create();
stateMachine.<>4__this = this;
stateMachine.token = token;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<ExecuteRequestAsync>d__6))]
private Task<InstanceSettingsConfigurationDto> ExecuteRequestAsync(CancellationToken token)
{
<ExecuteRequestAsync>d__6 stateMachine = default(<ExecuteRequestAsync>d__6);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<InstanceSettingsConfigurationDto>.Create();
stateMachine.<>4__this = this;
stateMachine.token = token;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
private static TimeSpan GetSleepDurationProvider(int retryAttempt)
{
return TimeSpan.FromSeconds(Math.Pow(2, (double)retryAttempt));
}
private static string OnEndpointErrorTitle(HttpStatusCode statusCode)
{
return "query TAPI instance settings configuration";
}
private string OnEndpointErrorMessage(HttpStatusCode statusCode)
{
return string.Format(CultureInfo.CurrentCulture, CoreStrings.InstanceSettingHttpPostExceptionMessage, connectionInfo.Host, statusCode);
}
private void OnRetry(Exception exception, TimeSpan timeSpan, Context context)
{
transferLog.LogError(exception, "Retry - {Timespan} - Failed to retrieve a single instance setting.", timeSpan);
}
private static InstanceSettingsConfiguration CreateConfiguration(InstanceSettingsConfigurationDto result)
{
return new InstanceSettingsConfiguration {
IsCloudInstance = result.IsCloudInstance,
MaxAllowedTargetDataRateMbpsAsync = result.TapiMaxAllowedTargetDataRateMbps
};
}
}
}