FlowLite.Diagnostics is an extension package for FlowLite FSM that enables advanced diagnostic, logging, telemetry, and observability features for .NET applications. Integrate easily with OpenTelemetry, System.Diagnostics, and Microsoft.Extensions.Logging. Automatically monitor lifecycle events, track state transitions, entity changes, durations, failures, and more.
$ dotnet add package FlowLite.DiagnosticsFlowLite.Diagnostics is an extension for FlowLite that adds logging, telemetry, observability, and global FSM diagnostics. It allows you to monitor the full lifecycle of your finite state machine, including transitions, errors, entity changes, and deletions.
To install the latest version of the FlowLite.Diagnostics NuGet package:
Install-Package FlowLite.Diagnostics -Version 8.0.0
dotnet add package FlowLite.Abstractions --version 8.0.0
dotnet add package FlowLite.Diagnostics --version 8.0.0
services.AddFlowLiteDiagnostics<[State], [Trigger], [Key], [Entity]>(opt =>
{
opt.EnableGlobalDiagnostics = true;
opt.Telemetry.Enabled = true;
opt.Logging.Enabled = true;
opt.Logging.UseConsole = true;
opt.Logging.UseLogger = true;
opt.Logging.LoggerFactory = services.BuildServiceProvider().GetRequiredService<ILoggerFactory>();
opt.DiagnosticObserver.Enabled = true;
});
After registration, all state machines created will automatically get hooked into diagnostics. Sample:
services.AddFlowLiteDiagnostics<OrderState, OrderTrigger, int, Order>(opt =>
{
opt.EnableGlobalDiagnostics = true;
opt.Telemetry.Enabled = true;
opt.Logging.Enabled = true;
opt.Logging.UseConsole = true;
opt.Logging.UseLogger = true;
opt.Logging.LoggerFactory = services.BuildServiceProvider().GetRequiredService<ILoggerFactory>();
opt.DiagnosticObserver.Enabled = true;
});
fsm_transitions_total - number of FSM transitions.fsm_failures_total - number of failed FSM transitions.fsm_state_changed_total - number of state changes.fsm_entity_changed_total - number of entity updates.fsm_entity_deleted_total- number of entity deletions.fsm_transition_failed_total - number of failed transitions.fsm.UseTelemetry(new TelemetryOptions()
{
Enabled = true,
Source = "FlowLite.FSM"
});
or
fsm.UseTelemetry();
fsm.UseLogging(new LoggingOptions()
{
Enabled = true,
UseConsole = true,
UseLogger = false
});
or
fsm.UseConsoleLogging();
fsm.UseLogging(new LoggingOptions()
{
Enabled = true,
UseConsole = true,
UseLogger = true,
LoggerFactory = services.GetRequiredService<ILoggerFactory>()
});
fsm.UseDiagnosticObserver(new DiagnosticObserverOptions()
{
Enabled = true,
Source = "FlowLite.Diagnostics"
});
or
fsm.UseDiagnosticObserver();
services.AddFlowLiteDiagnostics<OrderState, OrderTrigger, int, Order>(opt =>
{
opt.EnableGlobalDiagnostics = true;
opt.Telemetry.Enabled = true;
opt.Logging.Enabled = true;
opt.Logging.UseConsole = true;
opt.Logging.UseLogger = true;
opt.Logging.LoggerFactory = services.BuildServiceProvider().GetRequiredService<ILoggerFactory>();
opt.DiagnosticObserver.Enabled = true;
opt.CustomListeners.Add(new MyCustomFlowDiagnosticsListener());
});
Use CustomListeners to add a custom listener (based on IDiagnosticsFlowLiteListener)
This project is licensed under the MIT License.