1
1
using System ;
2
- using System . Collections . Concurrent ;
3
- using System . Linq ;
4
2
using System . Threading ;
5
3
using Exceptionless . Logging ;
6
4
using Exceptionless . Dependency ;
5
+ using System . Collections . Generic ;
6
+ using System . Linq ;
7
7
8
8
namespace Exceptionless . Plugins . Default {
9
9
[ Priority ( 1010 ) ]
10
10
public class DuplicateCheckerPlugin : IEventPlugin , IDisposable {
11
- private readonly ConcurrentQueue < Tuple < int , DateTimeOffset > > _processed = new ConcurrentQueue < Tuple < int , DateTimeOffset > > ( ) ;
12
- private readonly ConcurrentQueue < MergedEvent > _mergedEvents = new ConcurrentQueue < MergedEvent > ( ) ;
11
+ private readonly Queue < Tuple < int , DateTimeOffset > > _processed = new Queue < Tuple < int , DateTimeOffset > > ( ) ;
12
+ private readonly Queue < MergedEvent > _mergedEvents = new Queue < MergedEvent > ( ) ;
13
13
private readonly object _lock = new object ( ) ;
14
14
private readonly TimeSpan _interval ;
15
15
private Timer _timer ;
@@ -55,10 +55,9 @@ public void Run(EventPluginContext context) {
55
55
56
56
context . Log . FormattedInfo ( typeof ( DuplicateCheckerPlugin ) , String . Concat ( "Enqueueing event with hash:" , hashCode , " to cache." ) ) ;
57
57
_processed . Enqueue ( Tuple . Create ( hashCode , DateTimeOffset . UtcNow ) ) ;
58
-
59
- Tuple < int , DateTimeOffset > temp ;
58
+
60
59
while ( _processed . Count > 50 )
61
- _processed . TryDequeue ( out temp ) ;
60
+ _processed . Dequeue ( ) ;
62
61
}
63
62
}
64
63
@@ -68,9 +67,8 @@ private void OnTimer(object state) {
68
67
69
68
private void EnqueueMergedEvents ( ) {
70
69
lock ( _lock ) {
71
- MergedEvent mergedEvent ;
72
- while ( _mergedEvents . TryDequeue ( out mergedEvent ) )
73
- mergedEvent . Enqueue ( ) ;
70
+ while ( _mergedEvents . Count > 0 )
71
+ _mergedEvents . Dequeue ( ) . Resubmit ( ) ;
74
72
}
75
73
}
76
74
@@ -100,7 +98,7 @@ public void IncrementCount(int value) {
100
98
Interlocked . Add ( ref _count , value ) ;
101
99
}
102
100
103
- public void Enqueue ( ) {
101
+ public void Resubmit ( ) {
104
102
_context . Event . Count = _count ;
105
103
_context . Resolver . GetEventQueue ( ) . Enqueue ( _context . Event ) ;
106
104
}
0 commit comments