Skip to content

Commit 1d5cfb4

Browse files
committed
Removed SessionId property from the client. We only support sessions when a user identity is set
1 parent cd6402b commit 1d5cfb4

15 files changed

+100
-241
lines changed

Source/Shared/Dependency/DependencyResolverExtensions.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,5 @@ public static IEnvironmentInfoCollector GetEnvironmentInfoCollector(this IDepend
8989
public static ILastReferenceIdManager GetLastReferenceIdManager(this IDependencyResolver resolver) {
9090
return resolver.Resolve<ILastReferenceIdManager>() ?? resolver.Resolve<DefaultLastReferenceIdManager>();
9191
}
92-
93-
public static ISessionManager GetSessionManager(this IDependencyResolver resolver) {
94-
return resolver.Resolve<ISessionManager>() ?? resolver.Resolve<DefaultSessionManager>();
95-
}
9692
}
9793
}

Source/Shared/EventBuilder.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,7 @@ public EventBuilder SetSource(string source) {
4040
Target.Source = source;
4141
return this;
4242
}
43-
44-
/// <summary>
45-
/// Sets the event session id.
46-
/// </summary>
47-
/// <param name="sessionId">The event session id.</param>
48-
public EventBuilder SetSessionId(string sessionId) {
49-
if (!IsValidIdentifier(sessionId))
50-
throw new ArgumentException("SessionId must contain between 8 and 100 alphanumeric or '-' characters.", nameof(sessionId));
51-
52-
Target.SessionId = sessionId;
53-
return this;
54-
}
55-
43+
5644
/// <summary>
5745
/// Sets the event reference id.
5846
/// </summary>

Source/Shared/Exceptionless.Portable.csproj

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@
6161
<Compile Include="Events\EventSubmittedEventArgs.cs" />
6262
<Compile Include="Plugins\Default\030_DuplicateCheckerPlugin.cs" />
6363
<Compile Include="Plugins\ContextData.cs" />
64-
<Compile Include="Plugins\Default\110 _HeartbeatPlugin.cs" />
65-
<Compile Include="Plugins\Default\100_SessionManagerPlugin.cs" />
64+
<Compile Include="Plugins\Default\100 _HeartbeatPlugin.cs" />
6665
<Compile Include="Plugins\Default\ActionPlugin.cs" />
6766
<Compile Include="Plugins\Default\010_ConfigurationDefaultsPlugin.cs" />
6867
<Compile Include="Plugins\Default\090_SubmissionMethodPlugin.cs" />
@@ -114,7 +113,6 @@
114113
<Compile Include="Models\Client\Data\UserDescription.cs" />
115114
<Compile Include="Models\Client\Data\UserInfo.cs" />
116115
<Compile Include="Models\Client\Event.cs" />
117-
<Compile Include="Models\Client\SessionInfo.cs" />
118116
<Compile Include="Models\Collections\DataDictionary.cs" />
119117
<Compile Include="Models\Collections\GenericArguments.cs" />
120118
<Compile Include="Models\Collections\ModuleCollection.cs" />
@@ -333,9 +331,7 @@
333331
<Compile Include="Serializer\JsonTextWriterWithDepth.cs" />
334332
<Compile Include="Serializer\RequestInfoConverter.cs" />
335333
<Compile Include="Services\DefaultEnvironmentInfoCollector.cs" />
336-
<Compile Include="Services\DefaultSessionManager.cs" />
337334
<Compile Include="Services\IEnvironmentInfoCollector.cs" />
338-
<Compile Include="Services\ISessionManager.cs" />
339335
<Compile Include="Storage\InMemoryObjectStorage.cs" />
340336
<Compile Include="Storage\IObjectStorage.cs" />
341337
<Compile Include="Storage\PersistedDictionary.cs" />

Source/Shared/Extensions/ClientExtensions.cs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -160,54 +160,60 @@ public static void SubmitNotFound(this ExceptionlessClient client, string resour
160160
/// Creates a session start event.
161161
/// </summary>
162162
/// <param name="client">The client instance.</param>
163-
/// <param name="sessionId">The session id.</param>
164-
public static EventBuilder CreateSessionStart(this ExceptionlessClient client, string sessionId = null) {
165-
return client.CreateEvent().SetType(Event.KnownTypes.Session).SetSessionId(sessionId);
163+
/// <param name="userIdentity">The user's id.</param>
164+
/// <param name="userDisplayName">The user's friendly name</param>
165+
public static EventBuilder CreateSessionStart(this ExceptionlessClient client, string userIdentity = null, string userDisplayName = null) {
166+
return client.CreateEvent().SetType(Event.KnownTypes.Session).SetUserIdentity(userIdentity, userDisplayName);
166167
}
167-
168+
168169
/// <summary>
169170
/// Submits a session start event.
170171
/// </summary>
171172
/// <param name="client">The client instance.</param>
172-
/// <param name="sessionId">The session id.</param>
173-
public static void SubmitSessionStart(this ExceptionlessClient client, string sessionId = null) {
174-
client.CreateSessionStart(sessionId).Submit();
173+
/// <param name="userIdentity">The user's id.</param>
174+
/// <param name="userDisplayName">The user's friendly name</param>
175+
public static void SubmitSessionStart(this ExceptionlessClient client, string userIdentity = null, string userDisplayName = null) {
176+
client.CreateSessionStart(userIdentity, userDisplayName).Submit();
175177
}
176178

177179
/// <summary>
178180
/// Creates a session end event.
179181
/// </summary>
180182
/// <param name="client">The client instance.</param>
181-
/// <param name="sessionId">The session id.</param>
182-
public static EventBuilder CreateSessionEnd(this ExceptionlessClient client, string sessionId = null) {
183-
return client.CreateEvent().SetType(Event.KnownTypes.SessionEnd).SetSessionId(sessionId);
183+
/// <param name="userIdentity">The user's id.</param>
184+
/// <param name="userDisplayName">The user's friendly name</param>
185+
public static EventBuilder CreateSessionEnd(this ExceptionlessClient client, string userIdentity = null, string userDisplayName = null) {
186+
return client.CreateEvent().SetType(Event.KnownTypes.SessionEnd).SetUserIdentity(userIdentity, userDisplayName);
184187
}
185-
188+
186189
/// <summary>
187190
/// Submits a session end event.
188191
/// </summary>
189192
/// <param name="client">The client instance.</param>
190-
/// <param name="sessionId">The session id.</param>
191-
public static void SubmitSessionEnd(this ExceptionlessClient client, string sessionId = null) {
192-
client.CreateSessionEnd(sessionId).Submit();
193+
/// <param name="userIdentity">The user's id.</param>
194+
/// <param name="userDisplayName">The user's friendly name</param>
195+
public static void SubmitSessionEnd(this ExceptionlessClient client, string userIdentity = null, string userDisplayName = null) {
196+
client.CreateSessionEnd(userIdentity, userDisplayName).Submit();
193197
}
194198

195199
/// <summary>
196200
/// Creates a session heartbeat event.
197201
/// </summary>
198202
/// <param name="client">The client instance.</param>
199-
/// <param name="sessionId">The session id.</param>
200-
public static EventBuilder CreateSessionHeartbeat(this ExceptionlessClient client, string sessionId = null) {
201-
return client.CreateEvent().SetType(Event.KnownTypes.SessionHeartbeat).SetSessionId(sessionId);
203+
/// <param name="userIdentity">The user's id.</param>
204+
/// <param name="userDisplayName">The user's friendly name</param>
205+
public static EventBuilder CreateSessionHeartbeat(this ExceptionlessClient client, string userIdentity = null, string userDisplayName = null) {
206+
return client.CreateEvent().SetType(Event.KnownTypes.SessionHeartbeat).SetUserIdentity(userIdentity, userDisplayName);
202207
}
203208

204209
/// <summary>
205210
/// Submits a session heartbeat event.
206211
/// </summary>
207212
/// <param name="client">The client instance.</param>
208-
/// <param name="sessionId">The session id.</param>
209-
public static void SubmitSessionHeartbeat(this ExceptionlessClient client, string sessionId = null) {
210-
client.CreateSessionHeartbeat(sessionId).Submit();
213+
/// <param name="userIdentity">The user's id.</param>
214+
/// <param name="userDisplayName">The user's friendly name</param>
215+
public static void SubmitSessionHeartbeat(this ExceptionlessClient client, string userIdentity = null, string userDisplayName = null) {
216+
client.CreateSessionHeartbeat(userIdentity, userDisplayName).Submit();
211217
}
212218
}
213219
}

Source/Shared/Extensions/ExceptionlessConfigurationExtensions.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,7 @@ public static string GetInstallId(this ExceptionlessConfiguration config) {
8585
}
8686

8787
public static void UseSessions(this ExceptionlessConfiguration config, bool sendHeartbeats = true) {
88-
config.AddPlugin<SessionManagerPlugin>();
89-
if (sendHeartbeats)
88+
if (sendHeartbeats)
9089
config.AddPlugin<HeartbeatPlugin>();
9190
}
9291

Source/Shared/Models/Client/Event.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,6 @@ public Event() {
5252
/// </summary>
5353
public string ReferenceId { get; set; }
5454

55-
/// <summary>
56-
/// A unique id that identifies a usage session that this event belongs to.
57-
/// </summary>
58-
public string SessionId { get; set; }
59-
6055
public static class KnownTypes {
6156
public const string Error = "error";
6257
public const string FeatureUsage = "usage";

Source/Shared/Models/Client/SessionInfo.cs

Lines changed: 0 additions & 30 deletions
This file was deleted.

Source/Shared/Plugins/Default/050_EnvironmentInfoPlugin.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ public class EnvironmentInfoPlugin : IEventPlugin {
99
public void Run(EventPluginContext context) {
1010
if (context.Event.Data.ContainsKey(Event.KnownDataKeys.EnvironmentInfo))
1111
return;
12-
13-
if (!String.IsNullOrEmpty(context.Event.SessionId) && context.Event.IsSessionEnd() || context.Event.IsSessionHeartbeat())
14-
return;
15-
12+
1613
try {
1714
var collector = context.Resolver.GetEnvironmentInfoCollector();
1815
if (collector == null)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using System;
2+
using System.Threading;
3+
using Exceptionless.Models.Data;
4+
5+
namespace Exceptionless.Plugins.Default {
6+
[Priority(100)]
7+
public class HeartbeatPlugin : IEventPlugin, IDisposable {
8+
private SessionHeartbeat _heartbeat;
9+
10+
public void Run(EventPluginContext context) {
11+
if (context.Event.IsSessionHeartbeat())
12+
return;
13+
14+
if (context.Event.IsSessionEnd()) {
15+
_heartbeat?.Dispose();
16+
_heartbeat = null;
17+
return;
18+
}
19+
20+
var user = context.Event.GetUserIdentity();
21+
if (String.IsNullOrEmpty(user?.Identity))
22+
return;
23+
24+
if (_heartbeat == null) {
25+
_heartbeat = new SessionHeartbeat(user, context.Client);
26+
} else if (_heartbeat.User.Identity != user.Identity) {
27+
_heartbeat?.Dispose();
28+
_heartbeat = new SessionHeartbeat(user, context.Client);
29+
} else {
30+
_heartbeat?.DelayNext();
31+
}
32+
}
33+
34+
public void Dispose() {
35+
_heartbeat?.Dispose();
36+
_heartbeat = null;
37+
}
38+
}
39+
40+
public class SessionHeartbeat : IDisposable {
41+
private readonly Timer _timer;
42+
private readonly int _interval = 30 * 1000;
43+
private readonly ExceptionlessClient _client;
44+
45+
public SessionHeartbeat(UserInfo user, ExceptionlessClient client) {
46+
User = user;
47+
_client = client;
48+
_timer = new Timer(SendHeartbeat, null, _interval, _interval);
49+
}
50+
51+
public UserInfo User { get; }
52+
53+
public void DelayNext() {
54+
_timer.Change(_interval, _interval);
55+
}
56+
57+
private void SendHeartbeat(object state) {
58+
_client.SubmitSessionHeartbeat(User.Identity, User.Name);
59+
}
60+
61+
public void Dispose() {
62+
_timer.Dispose();
63+
}
64+
}
65+
}

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

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)