1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . Threading ;
4
- using Exceptionless . Models ;
4
+ using Exceptionless ;
5
+ using Exceptionless . Models . Data ;
5
6
6
7
namespace Exceptionless . Plugins . Default {
7
8
[ Priority ( 110 ) ]
@@ -10,18 +11,23 @@ public class HeartbeatPlugin : IEventPlugin, IDisposable {
10
11
private readonly object _lock = new object ( ) ;
11
12
12
13
public void Run ( EventPluginContext context ) {
13
- var sessionIdentifier = context . Event . SessionId ?? context . Event . GetUserIdentity ( ) ? . Identity ;
14
- if ( String . IsNullOrEmpty ( sessionIdentifier ) || context . Event . Type == Event . KnownTypes . SessionHeartbeat )
14
+ if ( context . Event . IsSessionHeartbeat ( ) )
15
+ return ;
16
+
17
+ var user = context . Event . GetUserIdentity ( ) ;
18
+ var sessionIdentifier = context . Event . SessionId ?? user ? . Identity ;
19
+ if ( String . IsNullOrEmpty ( sessionIdentifier ) )
15
20
return ;
16
21
17
22
lock ( _lock ) {
18
- if ( ! _sessionHeartbeats . ContainsKey ( sessionIdentifier ) )
19
- _sessionHeartbeats . Add ( sessionIdentifier , new SessionHeartbeat ( sessionIdentifier , context . Client ) ) ;
20
- else if ( context . Event . IsSessionEnd ( ) ) {
23
+ if ( ! _sessionHeartbeats . ContainsKey ( sessionIdentifier ) ) {
24
+ _sessionHeartbeats . Add ( sessionIdentifier , new SessionHeartbeat ( context . Event . SessionId , user , context . Client ) ) ;
25
+ } else if ( context . Event . IsSessionEnd ( ) ) {
21
26
_sessionHeartbeats [ sessionIdentifier ] . Dispose ( ) ;
22
27
_sessionHeartbeats . Remove ( sessionIdentifier ) ;
23
- } else
28
+ } else {
24
29
_sessionHeartbeats [ sessionIdentifier ] . DelayNext ( ) ;
30
+ }
25
31
}
26
32
}
27
33
@@ -34,6 +40,7 @@ public void Dispose() {
34
40
_sessionHeartbeats . Clear ( ) ;
35
41
}
36
42
}
43
+
37
44
public class SessionHeartbeat : IDisposable {
38
45
private readonly Timer _timer ;
39
46
private readonly int _interval = 30 * 1000 ;
@@ -45,14 +52,20 @@ public SessionHeartbeat(string sessionId, ExceptionlessClient client) {
45
52
_timer = new Timer ( SendHeartbeat , null , _interval , _interval ) ;
46
53
}
47
54
55
+ public SessionHeartbeat ( string sessionId , UserInfo user , ExceptionlessClient client ) : this ( sessionId , client ) {
56
+ UserInfo = user ;
57
+ }
58
+
48
59
public string SessionId { get ; set ; }
49
60
61
+ public UserInfo UserInfo { get ; set ; }
62
+
50
63
public void DelayNext ( ) {
51
64
_timer . Change ( _interval , _interval ) ;
52
65
}
53
66
54
67
private void SendHeartbeat ( object state ) {
55
- _client . SubmitSessionHeartbeat ( SessionId ) ;
68
+ _client . CreateSessionHeartbeat ( SessionId ) . SetUserIdentity ( UserInfo ? . Identity , UserInfo ? . Name ) . Submit ( ) ;
56
69
}
57
70
58
71
public void Dispose ( ) {
0 commit comments