Skip to content

Commit 41601b7

Browse files
committed
Some session progress.
1 parent d50fed9 commit 41601b7

12 files changed

+98
-40
lines changed

Source/Shared/Exceptionless.Portable.csproj

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,16 @@
5959
<Compile Include="Dependency\TinyIoC.cs" />
6060
<Compile Include="Events\EventSubmissionEventArgsBase.cs" />
6161
<Compile Include="Events\EventSubmittedEventArgs.cs" />
62-
<Compile Include="Plugins\Default\30_DuplicateCheckerPlugin.cs" />
62+
<Compile Include="Plugins\Default\030_DuplicateCheckerPlugin.cs" />
6363
<Compile Include="Plugins\ContextData.cs" />
6464
<Compile Include="Plugins\Default\110 _HeartbeatPlugin.cs" />
65-
<Compile Include="Plugins\Default\100_SessionIdManagerPlugin.cs" />
65+
<Compile Include="Plugins\Default\100_SessionManagerPlugin.cs" />
6666
<Compile Include="Plugins\Default\ActionPlugin.cs" />
67-
<Compile Include="Plugins\Default\10_ConfigurationDefaultsPlugin.cs" />
68-
<Compile Include="Plugins\Default\90_SubmissionMethodPlugin.cs" />
69-
<Compile Include="Plugins\Default\40_ReferenceIdPlugin.cs" />
70-
<Compile Include="Plugins\Default\20_SimpleErrorPlugin.cs" />
71-
<Compile Include="Plugins\Default\50_EnvironmentInfoPlugin.cs" />
67+
<Compile Include="Plugins\Default\010_ConfigurationDefaultsPlugin.cs" />
68+
<Compile Include="Plugins\Default\090_SubmissionMethodPlugin.cs" />
69+
<Compile Include="Plugins\Default\040_ReferenceIdPlugin.cs" />
70+
<Compile Include="Plugins\Default\020_SimpleErrorPlugin.cs" />
71+
<Compile Include="Plugins\Default\050_EnvironmentInfoPlugin.cs" />
7272
<Compile Include="Plugins\PriortyAttribute.cs" />
7373
<Compile Include="EventBuilder.cs" />
7474
<Compile Include="Events\ConfigurationUpdatedEventArgs.cs" />
@@ -333,7 +333,9 @@
333333
<Compile Include="Serializer\JsonTextWriterWithDepth.cs" />
334334
<Compile Include="Serializer\RequestInfoConverter.cs" />
335335
<Compile Include="Services\DefaultEnvironmentInfoCollector.cs" />
336+
<Compile Include="Services\DefaultSessionManager.cs" />
336337
<Compile Include="Services\IEnvironmentInfoCollector.cs" />
338+
<Compile Include="Services\ISessionManager.cs" />
337339
<Compile Include="Storage\InMemoryObjectStorage.cs" />
338340
<Compile Include="Storage\IObjectStorage.cs" />
339341
<Compile Include="Storage\PersistedDictionary.cs" />

Source/Shared/Extensions/ExceptionlessConfigurationExtensions.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,10 @@ public static string GetInstallId(this ExceptionlessConfiguration config) {
8484
return persistedClientData[INSTALL_ID_KEY];
8585
}
8686

87-
/// <summary>
88-
/// Ensures only a single user session will be created unless you specify a session id via the event builder.
89-
/// NOTE: This should only be used on deskop applications. Using this in web farm scenarios is not advisable.
90-
/// </summary>
91-
public static void UseSessions(this ExceptionlessConfiguration config) {
92-
config.AddPlugin<SessionIdManagerPlugin>();
93-
config.AddPlugin<HeartbeatPlugin>();
87+
public static void UseSessions(this ExceptionlessConfiguration config, bool sendHeartbeats = true) {
88+
config.AddPlugin<SessionManagerPlugin>();
89+
if (sendHeartbeats)
90+
config.AddPlugin<HeartbeatPlugin>();
9491
}
9592

9693
public static void UseDebugLogger(this ExceptionlessConfiguration config, LogLevel minLogLevel = LogLevel.Info) {

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

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System;
2+
using Exceptionless.Dependency;
3+
using Exceptionless.Services;
4+
5+
namespace Exceptionless.Plugins {
6+
[Priority(100)]
7+
public class SessionManagerPlugin : IEventPlugin {
8+
public void Run(EventPluginContext context) {
9+
// only manage session ids if the session id isn't specified manually
10+
if (!String.IsNullOrEmpty(context.Event.SessionId))
11+
return;
12+
13+
var sessionManager = context.Resolver.Resolve<ISessionManager>();
14+
15+
string identity = context.Event.GetUserIdentity()?.Identity ?? context.Event.GetRequestInfo()?.ClientIpAddress;
16+
if (String.IsNullOrEmpty(identity))
17+
return;
18+
19+
string sessionId = null;
20+
21+
if (context.Event.IsSessionStart()) {
22+
sessionId = sessionManager.StartSession(identity);
23+
} else if (context.Event.IsSessionEnd()) {
24+
sessionId = sessionManager.GetSessionId(identity);
25+
sessionManager.EndSession(sessionId);
26+
} else {
27+
sessionId = sessionManager.GetSessionId(identity);
28+
if (String.IsNullOrEmpty(sessionId)) {
29+
sessionId = sessionManager.StartSession(identity);
30+
context.Client.CreateSessionStart(sessionId).;
31+
}
32+
}
33+
34+
context.Event.SessionId = sessionId;
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)