@@ -612,7 +612,7 @@ protected async Task StartUpAndCommandArgs()
612
612
var args = Environment . GetCommandLineArgs ( ) ;
613
613
if ( args . Length <= 1 )
614
614
{
615
- await LogReuploader . ProcessLogs ( semaphore , HttpUploadLogAsync ) ;
615
+ await HandleLogReuploads ( ) ;
616
616
return ;
617
617
}
618
618
var argIndex = - 1 ;
@@ -671,7 +671,7 @@ protected async Task StartUpAndCommandArgs()
671
671
}
672
672
}
673
673
}
674
- await LogReuploader . ProcessLogs ( semaphore , HttpUploadLogAsync ) ;
674
+ await HandleLogReuploads ( ) ;
675
675
}
676
676
677
677
protected async Task ValidateGW2Tokens ( )
@@ -755,7 +755,7 @@ internal async Task HttpUploadLogAsync(string file, Dictionary<string, string> p
755
755
if ( ! responseMessage . IsSuccessStatusCode )
756
756
{
757
757
var statusCode = ( int ) responseMessage . StatusCode ;
758
- if ( ( statusCode == 403 ) || ( statusCode == 408 ) || ( statusCode == 429 ) || ( statusCode >= 500 ) )
758
+ if ( ( statusCode == 403 ) || ( statusCode == 408 ) )
759
759
{
760
760
if ( statusCode == 403 )
761
761
{
@@ -765,19 +765,22 @@ internal async Task HttpUploadLogAsync(string file, Dictionary<string, string> p
765
765
{
766
766
AddToText ( $ ">:> Unable to upload file { Path . GetFileName ( file ) } , dps.report responded with a Timeout error (408). Log will be reuploaded shortly.") ;
767
767
}
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 )
769
774
{
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 .") ;
771
776
}
772
777
else if ( statusCode >= 500 )
773
778
{
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 .") ;
775
780
}
776
781
LogReuploader . FailedLogs . Add ( file ) ;
777
782
LogReuploader . SaveFailedLogs ( ) ;
778
- timerFailedLogsReupload . Enabled = true ;
779
- timerFailedLogsReupload . Stop ( ) ;
780
- timerFailedLogsReupload . Start ( ) ;
783
+ EnsureReuploadTimerStart ( ) ;
781
784
return ;
782
785
}
783
786
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
887
890
catch
888
891
{
889
892
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 ) ;
924
894
}
925
895
}
926
896
catch
@@ -930,6 +900,44 @@ internal async Task HttpUploadLogAsync(string file, Dictionary<string, string> p
930
900
}
931
901
}
932
902
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
+
933
941
internal async Task ExecuteAllDiscordWebhooks ( DpsReportJson reportJson , List < LogPlayer > players )
934
942
{
935
943
if ( logSessionLink . SessionRunning )
@@ -1661,9 +1669,40 @@ private void TimerCheckUpdate_Tick(object sender, EventArgs e)
1661
1669
1662
1670
private async void TimerFailedLogsReupload_Tick ( object sender , EventArgs e )
1663
1671
{
1672
+ await HandleReuploadTimerStop ( ) ;
1673
+ }
1674
+
1675
+ private void EnsureReuploadTimerStart ( )
1676
+ {
1677
+ if ( timerFailedLogsReupload . Enabled )
1678
+ {
1679
+ return ;
1680
+ }
1681
+ timerFailedLogsReupload . Enabled = true ;
1664
1682
timerFailedLogsReupload . Stop ( ) ;
1683
+ timerFailedLogsReupload . Start ( ) ;
1684
+ }
1685
+
1686
+ private async Task HandleReuploadTimerStop ( )
1687
+ {
1688
+ if ( ! timerFailedLogsReupload . Enabled )
1689
+ {
1690
+ return ;
1691
+ }
1665
1692
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" : "" ) } ...") ;
1666
1704
await LogReuploader . ProcessLogs ( semaphore , HttpUploadLogAsync ) ;
1705
+ AddToText ( ">:> Log reuploading has ended." ) ;
1667
1706
}
1668
1707
1669
1708
private void ComboBoxMaxUploads_SelectedIndexChanged ( object sender , EventArgs e )
0 commit comments