Skip to content

Commit 79eedf6

Browse files
committed
Reworked short log reupload retry and log uploader retries
1 parent 40d3a3e commit 79eedf6

File tree

1 file changed

+82
-43
lines changed

1 file changed

+82
-43
lines changed

Forms/FormMain.cs

+82-43
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ protected async Task StartUpAndCommandArgs()
612612
var args = Environment.GetCommandLineArgs();
613613
if (args.Length <= 1)
614614
{
615-
await LogReuploader.ProcessLogs(semaphore, HttpUploadLogAsync);
615+
await HandleLogReuploads();
616616
return;
617617
}
618618
var argIndex = -1;
@@ -671,7 +671,7 @@ protected async Task StartUpAndCommandArgs()
671671
}
672672
}
673673
}
674-
await LogReuploader.ProcessLogs(semaphore, HttpUploadLogAsync);
674+
await HandleLogReuploads();
675675
}
676676

677677
protected async Task ValidateGW2Tokens()
@@ -755,7 +755,7 @@ internal async Task HttpUploadLogAsync(string file, Dictionary<string, string> p
755755
if (!responseMessage.IsSuccessStatusCode)
756756
{
757757
var statusCode = (int)responseMessage.StatusCode;
758-
if ((statusCode == 403) || (statusCode == 408) || (statusCode == 429) || (statusCode >= 500))
758+
if ((statusCode == 403) || (statusCode == 408))
759759
{
760760
if (statusCode == 403)
761761
{
@@ -765,19 +765,22 @@ internal async Task HttpUploadLogAsync(string file, Dictionary<string, string> p
765765
{
766766
AddToText($">:> Unable to upload file {Path.GetFileName(file)}, dps.report responded with a Timeout error (408). Log will be reuploaded shortly.");
767767
}
768-
else if (statusCode == 429)
768+
await HandleQuickLogUploadRetry(file, postData, bypassMessage);
769+
return;
770+
}
771+
else if ((statusCode == 429) || (statusCode >= 500))
772+
{
773+
if (statusCode == 429)
769774
{
770-
AddToText($">:> Unable to upload file {Path.GetFileName(file)}, dps.report responded with Too-Many-Logs-Per-Minute error (429). Log will be reuploaded after a delay.");
775+
AddToText($">:> Unable to upload file {Path.GetFileName(file)}, dps.report responded with Too-Many-Logs-Per-Minute error (429). Log has been added to the reuploader queue.");
771776
}
772777
else if (statusCode >= 500)
773778
{
774-
AddToText($">:> Unable to upload file {Path.GetFileName(file)}, dps.report responded with a server processing error (>500). Log will be reuploaded after a delay.");
779+
AddToText($">:> Unable to upload file {Path.GetFileName(file)}, dps.report responded with a server processing error (>=500). Log has been added to the reuploader queue.");
775780
}
776781
LogReuploader.FailedLogs.Add(file);
777782
LogReuploader.SaveFailedLogs();
778-
timerFailedLogsReupload.Enabled = true;
779-
timerFailedLogsReupload.Stop();
780-
timerFailedLogsReupload.Start();
783+
EnsureReuploadTimerStart();
781784
return;
782785
}
783786
AddToText($">:> Unable to upload file {Path.GetFileName(file)}, dps.report responded with an non-ok status code ({(int)responseMessage.StatusCode}).");
@@ -887,40 +890,7 @@ internal async Task HttpUploadLogAsync(string file, Dictionary<string, string> p
887890
catch
888891
{
889892
AddToText($">:> Unable to upload file {Path.GetFileName(file)}, dps.report not responding");
890-
if (uploadFailCounters.TryGetValue(file, out int uploadFailCounter))
891-
{
892-
uploadFailCounters[file]++;
893-
if (uploadFailCounter > 4)
894-
{
895-
uploadFailCounters.Remove(file);
896-
AddToText($">:> Upload retry failed 4 times for {Path.GetFileName(file)}, will try again in 15 minutes.");
897-
LogReuploader.FailedLogs.Add(file);
898-
LogReuploader.SaveFailedLogs();
899-
timerFailedLogsReupload.Enabled = true;
900-
timerFailedLogsReupload.Stop();
901-
timerFailedLogsReupload.Start();
902-
}
903-
else
904-
{
905-
var delay = uploadFailCounter switch
906-
{
907-
4 => 180000,
908-
3 => 90000,
909-
2 => 30000,
910-
_ => 3000,
911-
};
912-
AddToText($">:> Retrying in {delay / 1000}s...");
913-
await Task.Delay(delay);
914-
await HttpUploadLogAsync(file, postData, bypassMessage);
915-
}
916-
}
917-
else
918-
{
919-
uploadFailCounters.Add(file, 1);
920-
AddToText($">:> Retrying in 3s...");
921-
await Task.Delay(3000);
922-
await HttpUploadLogAsync(file, postData, bypassMessage);
923-
}
893+
await HandleQuickLogUploadRetry(file, postData, bypassMessage);
924894
}
925895
}
926896
catch
@@ -930,6 +900,44 @@ internal async Task HttpUploadLogAsync(string file, Dictionary<string, string> p
930900
}
931901
}
932902

903+
internal async Task HandleQuickLogUploadRetry(string file, Dictionary<string, string> postData, bool bypassMessage)
904+
{
905+
if (uploadFailCounters.TryGetValue(file, out int uploadFailCounter))
906+
{
907+
if (uploadFailCounter > 4)
908+
{
909+
uploadFailCounters.Remove(file);
910+
AddToText($">:> Upload retry failed 4 times for {Path.GetFileName(file)}, will try again during log reupload timer.");
911+
LogReuploader.FailedLogs.Add(file);
912+
LogReuploader.SaveFailedLogs();
913+
timerFailedLogsReupload.Enabled = true;
914+
timerFailedLogsReupload.Stop();
915+
timerFailedLogsReupload.Start();
916+
}
917+
else
918+
{
919+
uploadFailCounters[file]++;
920+
var delay = uploadFailCounters[file] switch
921+
{
922+
4 => 180000,
923+
3 => 90000,
924+
2 => 30000,
925+
_ => 3000,
926+
};
927+
AddToText($">:> Retrying in {delay / 1000}s...");
928+
await Task.Delay(delay);
929+
await HttpUploadLogAsync(file, postData, bypassMessage);
930+
}
931+
}
932+
else
933+
{
934+
uploadFailCounters.Add(file, 1);
935+
AddToText($">:> Retrying in 3s...");
936+
await Task.Delay(3000);
937+
await HttpUploadLogAsync(file, postData, bypassMessage);
938+
}
939+
}
940+
933941
internal async Task ExecuteAllDiscordWebhooks(DpsReportJson reportJson, List<LogPlayer> players)
934942
{
935943
if (logSessionLink.SessionRunning)
@@ -1661,9 +1669,40 @@ private void TimerCheckUpdate_Tick(object sender, EventArgs e)
16611669

16621670
private async void TimerFailedLogsReupload_Tick(object sender, EventArgs e)
16631671
{
1672+
await HandleReuploadTimerStop();
1673+
}
1674+
1675+
private void EnsureReuploadTimerStart()
1676+
{
1677+
if (timerFailedLogsReupload.Enabled)
1678+
{
1679+
return;
1680+
}
1681+
timerFailedLogsReupload.Enabled = true;
16641682
timerFailedLogsReupload.Stop();
1683+
timerFailedLogsReupload.Start();
1684+
}
1685+
1686+
private async Task HandleReuploadTimerStop()
1687+
{
1688+
if (!timerFailedLogsReupload.Enabled)
1689+
{
1690+
return;
1691+
}
16651692
timerFailedLogsReupload.Enabled = false;
1693+
timerFailedLogsReupload.Stop();
1694+
await HandleLogReuploads();
1695+
}
1696+
1697+
private async Task HandleLogReuploads()
1698+
{
1699+
if (LogReuploader.FailedLogs.Count == 0)
1700+
{
1701+
return;
1702+
}
1703+
AddToText($">:> Starting log reuploads of {LogReuploader.FailedLogs.Count} log{(LogReuploader.FailedLogs.Count > 1 ? "s" : "")}...");
16661704
await LogReuploader.ProcessLogs(semaphore, HttpUploadLogAsync);
1705+
AddToText(">:> Log reuploading has ended.");
16671706
}
16681707

16691708
private void ComboBoxMaxUploads_SelectedIndexChanged(object sender, EventArgs e)

0 commit comments

Comments
 (0)