Merge pull request #2731 from pizzaboxer/feature/improve-connectivity-test

Improve connectivity test
This commit is contained in:
pizzaboxer 2024-08-25 22:26:51 +01:00 committed by GitHub
commit d47bb6c5e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,6 +4,8 @@
{
public const string DefaultChannel = "production";
private const string VersionStudioHash = "version-012732894899482c";
public static string BaseUrl { get; private set; } = null!;
private static readonly Dictionary<string, ClientVersion> ClientVersionCache = new();
@ -18,23 +20,31 @@
{ "https://s3.amazonaws.com/setup.roblox.com", 4 }
};
private static async Task<string?> TestConnection(string url, int priority)
private static async Task<string?> TestConnection(string url, int priority, CancellationToken token)
{
string LOG_IDENT = $"RobloxDeployment::TestConnection.{url}";
await Task.Delay(priority * 1000);
if (BaseUrl is not null)
return null;
await Task.Delay(priority * 1000, token);
App.Logger.WriteLine(LOG_IDENT, "Connecting...");
try
{
var response = await App.HttpClient.GetAsync($"{url}/version");
var response = await App.HttpClient.GetAsync($"{url}/versionStudio", token);
if (!response.IsSuccessStatusCode)
throw new HttpResponseException(response);
// versionStudio is the version hash for the last MFC studio to be deployed.
// the response body should always be "version-012732894899482c".
string content = await response.Content.ReadAsStringAsync(token);
if (content != VersionStudioHash)
throw new Exception($"versionStudio response does not match (expected \"{VersionStudioHash}\", got \"{content}\")");
}
catch (TaskCanceledException)
{
App.Logger.WriteLine(LOG_IDENT, "Connectivity test cancelled.");
throw;
}
catch (Exception ex)
{
@ -56,11 +66,11 @@
// returns null for success
if (!String.IsNullOrEmpty(BaseUrl))
return null;
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
var exceptions = new List<Exception>();
var tasks = (from entry in BaseUrls select TestConnection(entry.Key, entry.Value)).ToList();
var tasks = (from entry in BaseUrls select TestConnection(entry.Key, entry.Value, token)).ToList();
App.Logger.WriteLine(LOG_IDENT, "Testing connectivity...");
@ -79,6 +89,9 @@
break;
}
// stop other running connectivity tests
tokenSource.Cancel();
if (String.IsNullOrEmpty(BaseUrl))
return exceptions[0];