- Overview
- Getting Started
- Managing Stacks
- Manual Stacking
- Filtering & Searching
- Bulk Actions
- Project Settings
- Versioning
- Reference Ids
- User Sessions
- Notifications
- Log Levels
- Event De-Duplication
- Integrations
- FAQ
- Comparison
- Security
- API Usage
- Clients
- Self Hosting
Plugins
A plugin is a client-side addin that is run every time you submit an event.
- Create a New Plugin
- Add System Uptime to Feature Usages
- Plugin Priority
- Adding the Plugin to Your App
- Removing an Existing Plugin
Create a New Plugin #
Specify a System.Action<EventPluginContext>
or create a class that derives from IEventPlugin to create a plugin.
Every plugin is passed an EventPluginContext, which contains all the valuable contextual information that your plugin may need via the following properties:
- Client
- Event
- ContextData
- Log
- Resolver
Add System Uptime to Feature Usages #
using System;
using System.Diagnostics;
using Exceptionless.Plugins;
using Exceptionless.Models;
namespace Exceptionless.SampleConsole.Plugins {
[Priority(100)]
public class SystemUptimePlugin : IEventPlugin {
public void Run(EventPluginContext context) {
// Only update feature usage events.
if (context.Event.Type != Event.KnownTypes.FeatureUsage)
return;
// Get the system uptime
using (var pc = new PerformanceCounter("System", "System Up Time")) {
pc.NextValue();
var uptime = TimeSpan.FromSeconds(pc.NextValue());
// Store the system uptime as an extended property.
context.Event.SetProperty("System Uptime", String.Format("{0} Days {1} Hours {2} Minutes {3} Seconds", uptime.Days, uptime.Hours, uptime.Minutes, uptime.Seconds));
}
}
}
}
Output #
Plugin Priority #
The plugin priority determines the order the plugin runs (lowest to highest, then by order added). All plugins shipped with the client have a starting priority of 10 and increment by multiples of 10. For your addin to run first, give it a priority lower than 10 (e.g., 0-5). To have it run last, give it a priority higher than 100. If a priority is not specified, it defaults to 0.
Adding the Plugin to Your App #
Start by calling one of the Exceptionless.ExceptionlessClient.Default.Configuration.AddPlugin()
overloads. This will typically be the following:
using Exceptionless;
ExceptionlessClient.Default.Configuration.AddPlugin<SystemUptimePlugin>();
Passing a System.Action<EventPluginContext>
to AddPlugin can also be used to add a plugin. Note we specify a key so we can remove the plugin later. If you won't be removing the plugin, you can omit the first argument.
AddPlugin is passed three arguments:
- Unique Plugin Key (to remove later, if applicable)
- Priority
- Action (logic)
using Exceptionless;
ExceptionlessClient.Default.Configuration.AddPlugin("system-uptime", 100, context => {
// Only update feature usage events.
if (context.Event.Type != Event.KnownTypes.FeatureUsage)
return;
// Get the system uptime
using (var pc = new PerformanceCounter("System", "System Up Time")) {
pc.NextValue();
var uptime = TimeSpan.FromSeconds(pc.NextValue());
// Store the system uptime as an extended property.
context.Event.SetProperty("System Uptime", String.Format("{0} Days {1} Hours {2} Minutes {3} Seconds", uptime.Days, uptime.Hours, uptime.Minutes, uptime.Seconds));
}
});
Removing an Existing Plugin #
Call one of the Exceptionless.ExceptionlessClient.Default.Configuration.RemovePlugin
overloads to remove a plugin.
using Exceptionless;
ExceptionlessClient.Default.Configuration.RemovePlugin<SystemUptimePlugin>();
If it was registered via an action, you have to remove it via the key you added it with.
using Exceptionless;
ExceptionlessClient.Default.Configuration.RemovePlugin("system-uptime");