RestServiceBase
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace Relativity.Transfer
{
public abstract class RestServiceBase
{
public RelativityConnectionInfo ConnectionInfo { get; }
public int MaxRetryAttempts { get; set; }
public double TimeoutSeconds { get; set; }
internal IServiceFactory ServiceFactory { get; }
protected IFileSystemService FileSystemService { get; }
protected ITransferLog Log { get; }
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "This object is properly disposed.")]
protected RestServiceBase(RelativityConnectionInfo connectionInfo)
: this(connectionInfo, new NullTransferLog())
{
}
protected RestServiceBase(RelativityConnectionInfo connectionInfo, ITransferLog log)
: this(connectionInfo, log, 5, 300)
{
}
protected RestServiceBase(RelativityConnectionInfo connectionInfo, ITransferLog log, int maxRetryAttempts, double timeoutSeconds)
{
if (connectionInfo == null)
throw new ArgumentNullException("connectionInfo");
if (log == null)
throw new ArgumentNullException("log");
ConnectionInfo = connectionInfo;
FileSystemService = ServiceObjectLocator.GetService<IFileSystemService>();
Log = log;
MaxRetryAttempts = maxRetryAttempts;
TimeoutSeconds = timeoutSeconds;
ServiceFactory = new ServiceFactory(connectionInfo, Log, maxRetryAttempts, timeoutSeconds);
}
protected async Task<bool> GetIsRelativityOneInstanceAsync(CancellationToken token)
{
using (MemoryCacheRepository cacheRepository = new MemoryCacheRepository(TransferCache.Default)) {
string key = CoreMemoryCacheKeys.CreateCloudInstanceKey(ConnectionInfo.Host);
List<InstanceSetting> instanceSettings = cacheRepository.SelectByKey<List<InstanceSetting>>(key);
if (instanceSettings == null) {
instanceSettings = new List<InstanceSetting>();
ClientConfiguration configuration = new ClientConfiguration();
using (IUserManagerService userManagerService = ServiceFactory.CreateUserManagerService(configuration))
using (IRelativityManagerService relativityManagerService = ServiceFactory.CreateRelativityManagerService(userManagerService, configuration)) {
Log.LogDebug("Preparing to retrieve instance settings from the '{Host}' Relativity server...", ConnectionInfo.Host);
userManagerService.Login();
instanceSettings.AddRange(await relativityManagerService.GetInstanceSettingsAsync(token).ConfigureAwait(false));
Log.LogDebug("Successfully retrieved {Count} instance setttings from the '{Host}' Relativity server.", instanceSettings.Count, ConnectionInfo.Host);
}
}
cacheRepository.Upsert(key, instanceSettings);
InstanceSetting instanceSetting = instanceSettings.FirstOrDefault(delegate(InstanceSetting x) {
if (string.Compare(x.Section, "Relativity.Core", StringComparison.OrdinalIgnoreCase) == 0)
return string.Compare(x.Name, "CloudInstance", StringComparison.OrdinalIgnoreCase) == 0;
return false;
});
if (instanceSetting == null)
return false;
bool result;
return bool.TryParse(instanceSetting.Value, out result) & result;
}
}
}
}