InstanceSettingsConfigurationWebApiRetriever
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Relativity.Transfer.InstanceSettings.Configuration
{
internal class InstanceSettingsConfigurationWebApiRetriever : IInstanceSettingsConfigurationRetriever
{
private const string _INSTANCE_SETTING_NOT_FOUND_MESSAGE = "Service did not return {InstanceSettingName} instance setting.";
private const string _INSTANCE_SETTING_PARSE_FAILED_MESSAGE = "Service returned {InstanceSettingValue} value for {InstanceSettingName} instance setting which could not be parsed.";
private readonly ITransferLog transferLog;
private readonly IInstanceSettingRetriever webApiInstanceSettingRetriever;
public InstanceSettingsConfigurationWebApiRetriever(ITransferLog transferLog, IInstanceSettingRetriever webApiInstanceSettingRetriever)
{
this.transferLog = transferLog;
this.webApiInstanceSettingRetriever = webApiInstanceSettingRetriever;
}
[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<IEnumerable<InstanceSetting>> ExecuteRequestAsync(CancellationToken token)
{
<ExecuteRequestAsync>d__6 stateMachine = default(<ExecuteRequestAsync>d__6);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<IEnumerable<InstanceSetting>>.Create();
stateMachine.<>4__this = this;
stateMachine.token = token;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
private InstanceSettingsConfiguration CreateConfiguration(IList<InstanceSetting> instanceSettings)
{
bool isCloudInstance = ExtractIsCloudInstance(instanceSettings);
uint? maxAllowedTargetDataRateMbpsAsync = ExtractMaxAllowedTargetDataRate(instanceSettings);
return new InstanceSettingsConfiguration {
IsCloudInstance = isCloudInstance,
MaxAllowedTargetDataRateMbpsAsync = maxAllowedTargetDataRateMbpsAsync
};
}
private uint? ExtractMaxAllowedTargetDataRate(IEnumerable<InstanceSetting> instanceSettings)
{
InstanceSetting instanceSetting = ExtractInstanceSetting(instanceSettings, "Relativity.DataTransfer", "TapiMaxAllowedTargetDataRateMbps");
if (instanceSetting == null) {
transferLog.LogWarning("Service did not return {InstanceSettingName} instance setting.", "TapiMaxAllowedTargetDataRateMbps");
return null;
}
if (!uint.TryParse(instanceSetting.Value, out uint result))
return null;
return result;
}
private bool ExtractIsCloudInstance(IEnumerable<InstanceSetting> instanceSettings)
{
InstanceSetting instanceSetting = ExtractInstanceSetting(instanceSettings, "Relativity.Core", "CloudInstance");
if (instanceSetting != null) {
bool result;
bool flag = bool.TryParse(instanceSetting.Value, out result);
if (!flag)
transferLog.LogWarning("Service returned {InstanceSettingValue} value for {InstanceSettingName} instance setting which could not be parsed.", instanceSetting.Value, "CloudInstance");
return flag & result;
}
transferLog.LogWarning("Service did not return {InstanceSettingName} instance setting.", "CloudInstance");
return false;
}
private static InstanceSetting ExtractInstanceSetting(IEnumerable<InstanceSetting> instanceSettings, string section, string name)
{
return instanceSettings.FirstOrDefault(delegate(InstanceSetting x) {
if (x.Section == section)
return x.Name == name;
return false;
});
}
}
}