Files
git.stella-ops.org/src/Plugin/StellaOps.Plugin.Abstractions/Lifecycle/PluginLifecycleState.cs
2026-01-12 12:24:17 +02:00

94 lines
2.9 KiB
C#

namespace StellaOps.Plugin.Abstractions.Lifecycle;
/// <summary>
/// Represents the current state of a plugin in its lifecycle.
/// </summary>
public enum PluginLifecycleState
{
/// <summary>
/// Plugin has been discovered but not yet loaded.
/// This is the initial state after manifest parsing.
/// </summary>
Discovered = 0,
/// <summary>
/// Plugin assembly is being loaded into the application domain.
/// </summary>
Loading = 1,
/// <summary>
/// Plugin is being initialized via <see cref="IPlugin.InitializeAsync"/>.
/// </summary>
Initializing = 2,
/// <summary>
/// Plugin is fully initialized and ready to handle requests.
/// This is the normal operating state.
/// </summary>
Active = 3,
/// <summary>
/// Plugin is functioning but with reduced capability or performance.
/// May transition back to Active or to Unhealthy.
/// </summary>
Degraded = 4,
/// <summary>
/// Plugin is being stopped gracefully.
/// </summary>
Stopping = 5,
/// <summary>
/// Plugin has been stopped and is no longer servicing requests.
/// </summary>
Stopped = 6,
/// <summary>
/// Plugin initialization or operation failed.
/// Check status message for details.
/// </summary>
Failed = 7,
/// <summary>
/// Plugin is being unloaded from the application domain.
/// </summary>
Unloading = 8
}
/// <summary>
/// Extension methods for <see cref="PluginLifecycleState"/>.
/// </summary>
public static class PluginLifecycleStateExtensions
{
/// <summary>
/// Returns true if the plugin is in an operational state that can handle requests.
/// </summary>
public static bool IsOperational(this PluginLifecycleState state) =>
state is PluginLifecycleState.Active or PluginLifecycleState.Degraded;
/// <summary>
/// Returns true if the plugin is in a terminal state (stopped, failed, unloading).
/// </summary>
public static bool IsTerminal(this PluginLifecycleState state) =>
state is PluginLifecycleState.Stopped or PluginLifecycleState.Failed or PluginLifecycleState.Unloading;
/// <summary>
/// Returns true if the plugin is in a transitional state (loading, initializing, stopping).
/// </summary>
public static bool IsTransitioning(this PluginLifecycleState state) =>
state is PluginLifecycleState.Loading or PluginLifecycleState.Initializing or
PluginLifecycleState.Stopping or PluginLifecycleState.Unloading;
/// <summary>
/// Returns the storage string representation.
/// </summary>
public static string ToStorageString(this PluginLifecycleState state) =>
state.ToString().ToLowerInvariant();
/// <summary>
/// Parses a storage string back to enum value.
/// </summary>
public static PluginLifecycleState ParseFromStorage(string value) =>
Enum.Parse<PluginLifecycleState>(value, ignoreCase: true);
}