Skip to content

Commit df5422a

Browse files
committed
Fixed an issue where user sessions were not sending heartbeats correctly
1 parent 91118f6 commit df5422a

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

Source/Shared/EventBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class EventBuilder {
1010
public EventBuilder(Event ev, ExceptionlessClient client = null, ContextData pluginContextData = null) {
1111
Client = client ?? ExceptionlessClient.Default;
1212
Target = ev;
13-
PluginContextData = pluginContextData;
13+
PluginContextData = pluginContextData ?? new ContextData();
1414
}
1515

1616
/// <summary>

Source/Shared/Plugins/Default/110 _HeartbeatPlugin.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Threading;
4-
using Exceptionless.Models;
4+
using Exceptionless;
5+
using Exceptionless.Models.Data;
56

67
namespace Exceptionless.Plugins.Default {
78
[Priority(110)]
@@ -10,18 +11,23 @@ public class HeartbeatPlugin : IEventPlugin, IDisposable {
1011
private readonly object _lock = new object();
1112

1213
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))
1520
return;
1621

1722
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()) {
2126
_sessionHeartbeats[sessionIdentifier].Dispose();
2227
_sessionHeartbeats.Remove(sessionIdentifier);
23-
} else
28+
} else {
2429
_sessionHeartbeats[sessionIdentifier].DelayNext();
30+
}
2531
}
2632
}
2733

@@ -34,6 +40,7 @@ public void Dispose() {
3440
_sessionHeartbeats.Clear();
3541
}
3642
}
43+
3744
public class SessionHeartbeat : IDisposable {
3845
private readonly Timer _timer;
3946
private readonly int _interval = 30 * 1000;
@@ -45,14 +52,20 @@ public SessionHeartbeat(string sessionId, ExceptionlessClient client) {
4552
_timer = new Timer(SendHeartbeat, null, _interval, _interval);
4653
}
4754

55+
public SessionHeartbeat(string sessionId, UserInfo user, ExceptionlessClient client) : this(sessionId, client) {
56+
UserInfo = user;
57+
}
58+
4859
public string SessionId { get; set; }
4960

61+
public UserInfo UserInfo { get; set; }
62+
5063
public void DelayNext() {
5164
_timer.Change(_interval, _interval);
5265
}
5366

5467
private void SendHeartbeat(object state) {
55-
_client.SubmitSessionHeartbeat(SessionId);
68+
_client.CreateSessionHeartbeat(SessionId).SetUserIdentity(UserInfo?.Identity, UserInfo?.Name).Submit();
5669
}
5770

5871
public void Dispose() {

0 commit comments

Comments
 (0)