@@ -38,6 +38,7 @@ namespace QuantConnect.Lean.Engine.Results
38
38
/// </summary>
39
39
public abstract class BaseResultsHandler
40
40
{
41
+ private bool _packetDroppedWarning ;
41
42
// used for resetting out/error upon completion
42
43
private static readonly TextWriter StandardOut = Console . Out ;
43
44
private static readonly TextWriter StandardError = Console . Error ;
@@ -47,7 +48,7 @@ public abstract class BaseResultsHandler
47
48
/// <summary>
48
49
/// The main loop update interval
49
50
/// </summary>
50
- protected virtual TimeSpan MainUpdateInterval => TimeSpan . FromSeconds ( 3 ) ;
51
+ protected virtual TimeSpan MainUpdateInterval { get ; } = TimeSpan . FromSeconds ( 3 ) ;
51
52
52
53
/// <summary>
53
54
/// The chart update interval
@@ -731,16 +732,14 @@ protected void ProcessAlgorithmLogs(int? messageQueueLimit = null)
731
732
732
733
private void ProcessAlgorithmLogsImpl ( ConcurrentQueue < string > concurrentQueue , PacketType packetType , int ? messageQueueLimit = null )
733
734
{
734
- if ( concurrentQueue . Count <= 0 )
735
+ if ( concurrentQueue . IsEmpty )
735
736
{
736
737
return ;
737
738
}
738
739
739
- var result = new List < string > ( ) ;
740
740
var endTime = DateTime . UtcNow . AddMilliseconds ( 250 ) . Ticks ;
741
- string message ;
742
741
var currentMessageCount = - 1 ;
743
- while ( DateTime . UtcNow . Ticks < endTime && concurrentQueue . TryDequeue ( out message ) )
742
+ while ( DateTime . UtcNow . Ticks < endTime && concurrentQueue . TryDequeue ( out var message ) )
744
743
{
745
744
if ( messageQueueLimit . HasValue )
746
745
{
@@ -751,19 +750,17 @@ private void ProcessAlgorithmLogsImpl(ConcurrentQueue<string> concurrentQueue, P
751
750
}
752
751
if ( currentMessageCount > messageQueueLimit )
753
752
{
753
+ if ( ! _packetDroppedWarning )
754
+ {
755
+ _packetDroppedWarning = true ;
756
+ // this shouldn't happen in most cases, queue limit is high and consumed often but just in case let's not silently drop packets without a warning
757
+ Messages . Enqueue ( new HandledErrorPacket ( AlgorithmId , "Your algorithm messaging has been rate limited to prevent browser flooding." ) ) ;
758
+ }
754
759
//if too many in the queue already skip the logging and drop the messages
755
760
continue ;
756
761
}
757
762
}
758
- AddToLogStore ( message ) ;
759
- result . Add ( message ) ;
760
- // increase count after we add
761
- currentMessageCount ++ ;
762
- }
763
763
764
- if ( result . Count > 0 )
765
- {
766
- message = string . Join ( Environment . NewLine , result ) ;
767
764
if ( packetType == PacketType . Debug )
768
765
{
769
766
Messages . Enqueue ( new DebugPacket ( ProjectId , AlgorithmId , CompileId , message ) ) ;
@@ -776,6 +773,10 @@ private void ProcessAlgorithmLogsImpl(ConcurrentQueue<string> concurrentQueue, P
776
773
{
777
774
Messages . Enqueue ( new HandledErrorPacket ( AlgorithmId , message ) ) ;
778
775
}
776
+ AddToLogStore ( message ) ;
777
+
778
+ // increase count after we add
779
+ currentMessageCount ++ ;
779
780
}
780
781
}
781
782
}
0 commit comments