Skip to content

Commit a4af6ca

Browse files
committed
Added plugin to cancel any session heartbeats that don't have an identity set
1 parent 696c624 commit a4af6ca

File tree

5 files changed

+45
-19
lines changed

5 files changed

+45
-19
lines changed

Source/Shared/Exceptionless.Portable.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@
6262
<Compile Include="Events\EventSubmittedEventArgs.cs" />
6363
<Compile Include="Plugins\Default\030_DuplicateCheckerPlugin.cs" />
6464
<Compile Include="Plugins\ContextData.cs" />
65-
<Compile Include="Plugins\Default\100 _HeartbeatPlugin.cs" />
65+
<Compile Include="Plugins\Default\1000_CancelSessionsWithNoUserPlugin.cs" />
66+
<Compile Include="Plugins\Default\100_HeartbeatPlugin.cs" />
6667
<Compile Include="Plugins\Default\ActionPlugin.cs" />
6768
<Compile Include="Plugins\Default\010_ConfigurationDefaultsPlugin.cs" />
6869
<Compile Include="Plugins\Default\090_SubmissionMethodPlugin.cs" />

Source/Shared/Extensions/ExceptionlessConfigurationExtensions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,12 @@ public static string GetInstallId(this ExceptionlessConfiguration config) {
8888
}
8989

9090
public static void UseSessions(this ExceptionlessConfiguration config, bool sendHeartbeats = true) {
91-
if (sendHeartbeats)
91+
config.AddPlugin<CancelSessionsWithNoUserPlugin>();
92+
93+
if (sendHeartbeats)
9294
config.AddPlugin<HeartbeatPlugin>();
9395
}
94-
96+
9597
public static void UseDebugLogger(this ExceptionlessConfiguration config, LogLevel minLogLevel = LogLevel.Info) {
9698
config.Resolver.Register<IExceptionlessLog>(new DebugExceptionlessLog { MinimumLogLevel = minLogLevel });
9799
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
3+
namespace Exceptionless.Plugins.Default {
4+
[Priority(1000)]
5+
public class CancelSessionsWithNoUserPlugin : IEventPlugin {
6+
public void Run(EventPluginContext context) {
7+
if (!context.Event.IsSessionStart() && !context.Event.IsSessionEnd() && !context.Event.IsSessionHeartbeat())
8+
return;
9+
10+
var user = context.Event.GetUserIdentity();
11+
if (user != null && !String.IsNullOrEmpty(user.Identity))
12+
return;
13+
14+
context.Log.Info("Cancelling session event as no user identity was specified.");
15+
context.Cancel = true;
16+
}
17+
}
18+
}

Source/Tests/Plugins/PluginTests.cs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -95,21 +95,6 @@ public void ErrorPlugin_IgnoredProperties() {
9595
}
9696
}
9797

98-
[Theory(Skip = "TODO: This needs to be skipped until the client is sending session start and end.")]
99-
[InlineData(Event.KnownTypes.Error)]
100-
[InlineData(Event.KnownTypes.FeatureUsage)]
101-
[InlineData(Event.KnownTypes.Log)]
102-
[InlineData(Event.KnownTypes.NotFound)]
103-
[InlineData(Event.KnownTypes.SessionEnd)]
104-
public void EnvironmentInfo_IncorrectEventType(string eventType) {
105-
var client = new ExceptionlessClient();
106-
var context = new EventPluginContext(client, new Event { Type = eventType });
107-
108-
var plugin = new EnvironmentInfoPlugin();
109-
plugin.Run(context);
110-
Assert.Equal(0, context.Event.Data.Count);
111-
}
112-
11398
[Fact]
11499
public void EnvironmentInfo_CanRunInParallel() {
115100
var client = new ExceptionlessClient();
@@ -193,7 +178,27 @@ public void PrivateInformation_WillNotUpdateIdentity() {
193178
Assert.Equal("Blake", user.Name);
194179
}
195180

196-
181+
[Theory]
182+
[InlineData(Event.KnownTypes.Error, null, false)]
183+
[InlineData(Event.KnownTypes.FeatureUsage, null, false)]
184+
[InlineData(Event.KnownTypes.Log, null, false)]
185+
[InlineData(Event.KnownTypes.NotFound, null, false)]
186+
[InlineData(Event.KnownTypes.Session, null, true)]
187+
[InlineData(Event.KnownTypes.Session, "123456789", false)]
188+
[InlineData(Event.KnownTypes.SessionEnd, null, true)]
189+
[InlineData(Event.KnownTypes.SessionEnd, "123456789", false)]
190+
[InlineData(Event.KnownTypes.SessionHeartbeat, null, true)]
191+
[InlineData(Event.KnownTypes.SessionHeartbeat, "123456789", false)]
192+
public void CancelSessionsWithNoUserTest(string eventType, string identity, bool cancelled) {
193+
var ev = new Event { Type = eventType };
194+
ev.SetUserIdentity(identity);
195+
196+
var context = new EventPluginContext(new ExceptionlessClient(), ev);
197+
var plugin = new CancelSessionsWithNoUserPlugin();
198+
plugin.Run(context);
199+
Assert.Equal(cancelled, context.Cancel);
200+
}
201+
197202
[Fact]
198203
public void LazyLoadAndRemovePlugin() {
199204
var configuration = new ExceptionlessConfiguration(DependencyResolver.Default);

0 commit comments

Comments
 (0)