Skip to content

Commit 249be4e

Browse files
committed
Updates to make session end events free too.
1 parent 47a68df commit 249be4e

File tree

14 files changed

+40
-139
lines changed

14 files changed

+40
-139
lines changed

Source/Extras/Submission/SubmissionClient.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,9 @@ public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSeri
8888
return new SettingsResponse(true, settings.Settings, settings.Version);
8989
}
9090

91-
public void SendHeartbeat(string sessionIdOrUserId, ExceptionlessConfiguration config) {
91+
public void SendHeartbeat(string sessionIdOrUserId, bool closeSession, ExceptionlessConfiguration config) {
9292
try {
93-
var request = CreateHttpWebRequest(config, String.Format("{0}/events/session/{1}/heartbeat", config.GetHeartbeatServiceEndPoint(), sessionIdOrUserId));
94-
request.Timeout = 1;
93+
var request = CreateHttpWebRequest(config, String.Format("{0}/events/session/heartbeat?id={1}&close={2}", config.GetHeartbeatServiceEndPoint(), sessionIdOrUserId, closeSession));
9594
var response = request.GetResponseAsync().Result;
9695
} catch (Exception ex) {
9796
var log = config.Resolver.GetLog();

Source/Samples/SampleConsole/Submission/InMemorySubmissionClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSeri
3030
return new SettingsResponse(true);
3131
}
3232

33-
public void SendHeartbeat(string sessionIdOrUserId, ExceptionlessConfiguration config) {
33+
public void SendHeartbeat(string sessionIdOrUserId, bool closeSession, ExceptionlessConfiguration config) {
3434
_heartbeatContainer[sessionIdOrUserId] = DateTime.UtcNow;
3535
}
3636
}

Source/Shared/Configuration/ExceptionlessConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ public string ApiKey {
164164
/// </summary>
165165
public bool SessionsEnabled { get; set; }
166166

167+
internal string CurrentSessionIdentifier { get; set; }
168+
167169
/// <summary>
168170
/// Maximum number of events that should be sent to the server together in a batch. (Defaults to 50)
169171
/// </summary>

Source/Shared/Extensions/ClientExtensions.cs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -195,32 +195,31 @@ public static void SubmitSessionStart(this ExceptionlessClient client) {
195195
}
196196

197197
/// <summary>
198-
/// Creates a session end event.
198+
/// Submits session end.
199199
/// </summary>
200200
/// <param name="client">The client instance.</param>
201-
public static EventBuilder CreateSessionEnd(this ExceptionlessClient client) {
202-
return client.CreateEvent().SetType(Event.KnownTypes.SessionEnd);
203-
}
201+
/// <param name="sessionIdOrUserId">The session id or user id.</param>
202+
public static void SubmitSessionEnd(this ExceptionlessClient client, string sessionIdOrUserId = null) {
203+
sessionIdOrUserId = sessionIdOrUserId ?? client.Configuration.CurrentSessionIdentifier;
204+
if (String.IsNullOrWhiteSpace(sessionIdOrUserId))
205+
return;
204206

205-
/// <summary>
206-
/// Submits a session end event.
207-
/// </summary>
208-
/// <param name="client">The client instance.</param>
209-
public static void SubmitSessionEnd(this ExceptionlessClient client) {
210-
client.CreateSessionEnd().Submit();
207+
var submissionClient = client.Configuration.Resolver.GetSubmissionClient();
208+
submissionClient.SendHeartbeat(sessionIdOrUserId, true, client.Configuration);
211209
}
212210

213211
/// <summary>
214-
/// Submits a session heartbeat event.
212+
/// Submits session heartbeat.
215213
/// </summary>
216214
/// <param name="client">The client instance.</param>
217215
/// <param name="sessionIdOrUserId">The session id or user id.</param>
218-
public static void SubmitSessionHeartbeat(this ExceptionlessClient client, string sessionIdOrUserId) {
216+
public static void SubmitSessionHeartbeat(this ExceptionlessClient client, string sessionIdOrUserId = null) {
217+
sessionIdOrUserId = sessionIdOrUserId ?? client.Configuration.CurrentSessionIdentifier;
219218
if (String.IsNullOrWhiteSpace(sessionIdOrUserId))
220219
return;
221220

222221
var submissionClient = client.Configuration.Resolver.GetSubmissionClient();
223-
Task.Factory.StartNew(() => submissionClient.SendHeartbeat(sessionIdOrUserId, client.Configuration));
222+
submissionClient.SendHeartbeat(sessionIdOrUserId, false, client.Configuration);
224223
}
225224
}
226225
}

Source/Shared/Extensions/EventExtensions.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,6 @@ public static bool IsSessionStart(this Event ev) {
7676
return ev.Type == Event.KnownTypes.Session;
7777
}
7878

79-
/// <summary>
80-
/// Returns true if the event type is session end.
81-
/// </summary>
82-
public static bool IsSessionEnd(this Event ev) {
83-
return ev.Type == Event.KnownTypes.SessionEnd;
84-
}
85-
8679
/// <summary>
8780
/// Adds the request info to the event.
8881
/// </summary>

Source/Shared/Models/Client/Event.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ public static class KnownTypes {
9292
public const string Log = "log";
9393
public const string NotFound = "404";
9494
public const string Session = "session";
95-
public const string SessionEnd = "sessionend";
9695
}
9796

9897
public static class KnownTags {

Source/Shared/Plugins/Default/025_SessionIdManagementPlugin.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,14 @@
33
namespace Exceptionless.Plugins {
44
[Priority(25)]
55
public class SessionIdManagementPlugin : IEventPlugin {
6-
private string _sessionId;
76
public void Run(EventPluginContext context) {
8-
if (context.Event.IsSessionStart() || String.IsNullOrEmpty(_sessionId))
9-
_sessionId = Guid.NewGuid().ToString("N");
7+
if (context.Event.IsSessionStart() || String.IsNullOrEmpty(context.Client.Configuration.CurrentSessionIdentifier))
8+
context.Client.Configuration.CurrentSessionIdentifier = Guid.NewGuid().ToString("N");
109

1110
if (context.Event.IsSessionStart())
12-
context.Event.ReferenceId = _sessionId;
11+
context.Event.ReferenceId = context.Client.Configuration.CurrentSessionIdentifier;
1312
else
14-
context.Event.SetEventReference("session", _sessionId);
15-
16-
if (context.Event.IsSessionEnd())
17-
_sessionId = null;
13+
context.Event.SetEventReference("session", context.Client.Configuration.CurrentSessionIdentifier);
1814
}
1915
}
2016
}

Source/Shared/Plugins/Default/1000_CancelSessionsWithNoUserPlugin.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace Exceptionless.Plugins.Default {
55
[Priority(1000)]
66
public class CancelSessionsWithNoUserPlugin : IEventPlugin {
77
public void Run(EventPluginContext context) {
8-
if (!context.Event.IsSessionStart() && !context.Event.IsSessionEnd())
8+
if (!context.Event.IsSessionStart())
99
return;
1010

1111
var user = context.Event.GetUserIdentity(context.Client.Configuration.Resolver.GetJsonSerializer());

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

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Threading;
33
using Exceptionless.Dependency;
4-
using Exceptionless.Models.Data;
54

65
namespace Exceptionless.Plugins.Default {
76
[Priority(100)]
@@ -18,26 +17,21 @@ public HeartbeatPlugin(TimeSpan? interval = null) {
1817
}
1918

2019
public void Run(EventPluginContext context) {
21-
if (context.Event.IsSessionEnd()) {
22-
if (_heartbeat != null) {
23-
_heartbeat.Dispose();
24-
_heartbeat = null;
25-
}
20+
if (String.IsNullOrEmpty(context.Client.Configuration.CurrentSessionIdentifier)) {
21+
var user = context.Event.GetUserIdentity(context.Client.Configuration.Resolver.GetJsonSerializer());
22+
if (user == null || String.IsNullOrEmpty(user.Identity))
23+
return;
2624

27-
return;
25+
context.Client.Configuration.CurrentSessionIdentifier = user.Identity;
2826
}
2927

30-
var user = context.Event.GetUserIdentity(context.Client.Configuration.Resolver.GetJsonSerializer());
31-
if (user == null || String.IsNullOrEmpty(user.Identity))
32-
return;
33-
3428
if (_heartbeat == null) {
35-
_heartbeat = new SessionHeartbeat(user, _interval, context.Client);
36-
} else if (_heartbeat.User.Identity != user.Identity) {
29+
_heartbeat = new SessionHeartbeat(context.Client.Configuration.CurrentSessionIdentifier, _interval, context.Client);
30+
} else if (_heartbeat.SessionIdentifier != context.Client.Configuration.CurrentSessionIdentifier) {
3731
if (_heartbeat != null)
3832
_heartbeat.Dispose();
3933

40-
_heartbeat = new SessionHeartbeat(user, _interval, context.Client);
34+
_heartbeat = new SessionHeartbeat(context.Client.Configuration.CurrentSessionIdentifier, _interval, context.Client);
4135
} else {
4236
if (_heartbeat != null)
4337
_heartbeat.DelayNext();
@@ -57,21 +51,21 @@ public class SessionHeartbeat : IDisposable {
5751
private readonly TimeSpan _interval;
5852
private readonly ExceptionlessClient _client;
5953

60-
public SessionHeartbeat(UserInfo user, TimeSpan interval, ExceptionlessClient client) {
61-
User = user;
54+
public SessionHeartbeat(string sessionIdentifier, TimeSpan interval, ExceptionlessClient client) {
55+
SessionIdentifier = sessionIdentifier;
6256
_interval = interval;
6357
_client = client;
6458
_timer = new Timer(SendHeartbeat, null, _interval, _interval);
6559
}
6660

67-
public UserInfo User { get; private set; }
61+
public string SessionIdentifier { get; private set; }
6862

6963
public void DelayNext() {
7064
_timer.Change(_interval, _interval);
7165
}
7266

7367
private void SendHeartbeat(object state) {
74-
_client.SubmitSessionHeartbeat(User.Identity);
68+
_client.SubmitSessionHeartbeat(SessionIdentifier);
7569
}
7670

7771
public void Dispose() {

Source/Shared/Submission/DefaultSubmissionClient.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSeri
8080
return new SettingsResponse(true, settings.Settings, settings.Version);
8181
}
8282

83-
public void SendHeartbeat(string sessionIdOrUserId, ExceptionlessConfiguration config) {
83+
public void SendHeartbeat(string sessionIdOrUserId, bool closeSession, ExceptionlessConfiguration config) {
8484
try {
85-
var request = CreateHttpWebRequest(config, String.Format("{0}/events/session/{1}/heartbeat", config.GetHeartbeatServiceEndPoint(), sessionIdOrUserId));
85+
var request = CreateHttpWebRequest(config, String.Format("{0}/events/session/heartbeat?id={1}&close={2}", config.GetHeartbeatServiceEndPoint(), sessionIdOrUserId, closeSession));
8686
var response = request.GetResponseAsync().Result;
8787
} catch (Exception ex) {
8888
var log = config.Resolver.GetLog();

0 commit comments

Comments
 (0)