Add XML documentation across gateway, worker, and .NET client
This commit is contained in:
@@ -2,11 +2,15 @@ namespace MxGateway.Server.Configuration;
|
||||
|
||||
public sealed class AuthenticationOptions
|
||||
{
|
||||
/// <summary>Gets the authentication mode.</summary>
|
||||
public AuthenticationMode Mode { get; init; } = AuthenticationMode.ApiKey;
|
||||
|
||||
/// <summary>Gets the SQLite database path for authentication credentials.</summary>
|
||||
public string SqlitePath { get; init; } = @"C:\ProgramData\MxGateway\gateway-auth.db";
|
||||
|
||||
/// <summary>Gets the secret manager name for API key pepper.</summary>
|
||||
public string PepperSecretName { get; init; } = "MxGateway:ApiKeyPepper";
|
||||
|
||||
/// <summary>Gets whether database migrations should run on startup.</summary>
|
||||
public bool RunMigrationsOnStartup { get; init; } = true;
|
||||
}
|
||||
|
||||
@@ -2,19 +2,27 @@ namespace MxGateway.Server.Configuration;
|
||||
|
||||
public sealed class DashboardOptions
|
||||
{
|
||||
/// <summary>Gets whether the dashboard is enabled.</summary>
|
||||
public bool Enabled { get; init; } = true;
|
||||
|
||||
/// <summary>Gets the dashboard URL path base.</summary>
|
||||
public string PathBase { get; init; } = "/dashboard";
|
||||
|
||||
/// <summary>Gets whether dashboard access requires admin scope.</summary>
|
||||
public bool RequireAdminScope { get; init; } = true;
|
||||
|
||||
/// <summary>Gets whether anonymous localhost access to dashboard is allowed.</summary>
|
||||
public bool AllowAnonymousLocalhost { get; init; } = true;
|
||||
|
||||
/// <summary>Gets the dashboard snapshot update interval in milliseconds.</summary>
|
||||
public int SnapshotIntervalMilliseconds { get; init; } = 1_000;
|
||||
|
||||
/// <summary>Gets the maximum number of recent faults to display.</summary>
|
||||
public int RecentFaultLimit { get; init; } = 100;
|
||||
|
||||
/// <summary>Gets the maximum number of recent sessions to display.</summary>
|
||||
public int RecentSessionLimit { get; init; } = 200;
|
||||
|
||||
/// <summary>Gets whether to show full tag values in the dashboard.</summary>
|
||||
public bool ShowTagValues { get; init; }
|
||||
}
|
||||
|
||||
@@ -2,7 +2,13 @@ namespace MxGateway.Server.Configuration;
|
||||
|
||||
public sealed class EventOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the event queue capacity.
|
||||
/// </summary>
|
||||
public int QueueCapacity { get; init; } = 10_000;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the backpressure policy for event queue overflow.
|
||||
/// </summary>
|
||||
public EventBackpressurePolicy BackpressurePolicy { get; init; } = EventBackpressurePolicy.FailFast;
|
||||
}
|
||||
|
||||
@@ -2,10 +2,13 @@ using Microsoft.Extensions.Options;
|
||||
|
||||
namespace MxGateway.Server.Configuration;
|
||||
|
||||
/// <summary>Provides the effective gateway configuration with sensitive values redacted.</summary>
|
||||
public sealed class GatewayConfigurationProvider(IOptions<GatewayOptions> options) : IGatewayConfigurationProvider
|
||||
{
|
||||
/// <summary>Marker string for redacted sensitive configuration values.</summary>
|
||||
public const string RedactedValue = "[redacted]";
|
||||
|
||||
/// <inheritdoc />
|
||||
public EffectiveGatewayConfiguration GetEffectiveConfiguration()
|
||||
{
|
||||
GatewayOptions value = options.Value;
|
||||
|
||||
@@ -4,6 +4,9 @@ namespace MxGateway.Server.Configuration;
|
||||
|
||||
public static class GatewayConfigurationServiceCollectionExtensions
|
||||
{
|
||||
/// <summary>Registers gateway configuration services in the dependency injection container.</summary>
|
||||
/// <param name="services">The service collection.</param>
|
||||
/// <returns>The service collection for chaining.</returns>
|
||||
public static IServiceCollection AddGatewayConfiguration(this IServiceCollection services)
|
||||
{
|
||||
services
|
||||
|
||||
@@ -4,15 +4,33 @@ public sealed class GatewayOptions
|
||||
{
|
||||
public const string SectionName = "MxGateway";
|
||||
|
||||
/// <summary>
|
||||
/// Gets authentication configuration options.
|
||||
/// </summary>
|
||||
public AuthenticationOptions Authentication { get; init; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Gets worker process configuration options.
|
||||
/// </summary>
|
||||
public WorkerOptions Worker { get; init; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Gets session management configuration options.
|
||||
/// </summary>
|
||||
public SessionOptions Sessions { get; init; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Gets event stream configuration options.
|
||||
/// </summary>
|
||||
public EventOptions Events { get; init; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Gets dashboard configuration options.
|
||||
/// </summary>
|
||||
public DashboardOptions Dashboard { get; init; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Gets protocol configuration options.
|
||||
/// </summary>
|
||||
public ProtocolOptions Protocol { get; init; } = new();
|
||||
}
|
||||
|
||||
@@ -8,6 +8,12 @@ public sealed class GatewayOptionsValidator : IValidateOptions<GatewayOptions>
|
||||
private const int MinimumMaxMessageBytes = 1024;
|
||||
private const int MaximumMaxMessageBytes = 256 * 1024 * 1024;
|
||||
|
||||
/// <summary>
|
||||
/// Validates gateway configuration options.
|
||||
/// </summary>
|
||||
/// <param name="name">Options name.</param>
|
||||
/// <param name="options">Gateway options to validate.</param>
|
||||
/// <returns>Validation result.</returns>
|
||||
public ValidateOptionsResult Validate(string? name, GatewayOptions options)
|
||||
{
|
||||
List<string> failures = [];
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
namespace MxGateway.Server.Configuration;
|
||||
|
||||
/// <summary>
|
||||
/// Provides the effective gateway configuration, applying defaults and validations.
|
||||
/// </summary>
|
||||
public interface IGatewayConfigurationProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns the validated and effective gateway configuration.
|
||||
/// </summary>
|
||||
EffectiveGatewayConfiguration GetEffectiveConfiguration();
|
||||
}
|
||||
|
||||
@@ -2,7 +2,13 @@ using MxGateway.Contracts;
|
||||
|
||||
namespace MxGateway.Server.Configuration;
|
||||
|
||||
/// <summary>
|
||||
/// Configuration options for the worker protocol version.
|
||||
/// </summary>
|
||||
public sealed class ProtocolOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the worker protocol version.
|
||||
/// </summary>
|
||||
public uint WorkerProtocolVersion { get; init; } = GatewayContractInfo.WorkerProtocolVersion;
|
||||
}
|
||||
|
||||
@@ -2,11 +2,23 @@ namespace MxGateway.Server.Configuration;
|
||||
|
||||
public sealed class SessionOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the default command timeout in seconds.
|
||||
/// </summary>
|
||||
public int DefaultCommandTimeoutSeconds { get; init; } = 30;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum number of concurrent sessions.
|
||||
/// </summary>
|
||||
public int MaxSessions { get; init; } = 64;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum number of pending commands per session.
|
||||
/// </summary>
|
||||
public int MaxPendingCommandsPerSession { get; init; } = 128;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether multiple event subscribers are allowed per session.
|
||||
/// </summary>
|
||||
public bool AllowMultipleEventSubscribers { get; init; }
|
||||
}
|
||||
|
||||
@@ -2,26 +2,37 @@ namespace MxGateway.Server.Configuration;
|
||||
|
||||
public sealed class WorkerOptions
|
||||
{
|
||||
/// <summary>The path to the worker executable.</summary>
|
||||
public string ExecutablePath { get; init; } =
|
||||
@"src\MxGateway.Worker\bin\x86\Release\MxGateway.Worker.exe";
|
||||
|
||||
/// <summary>The working directory for the worker process, or null to inherit.</summary>
|
||||
public string? WorkingDirectory { get; init; }
|
||||
|
||||
/// <summary>The required processor architecture for the worker.</summary>
|
||||
public WorkerArchitecture RequiredArchitecture { get; init; } = WorkerArchitecture.X86;
|
||||
|
||||
/// <summary>The maximum time in seconds for the worker to start.</summary>
|
||||
public int StartupTimeoutSeconds { get; init; } = 30;
|
||||
|
||||
/// <summary>The number of retry attempts for the startup probe.</summary>
|
||||
public int StartupProbeRetryAttempts { get; init; } = 3;
|
||||
|
||||
/// <summary>The delay in milliseconds between startup probe retries.</summary>
|
||||
public int StartupProbeRetryDelayMilliseconds { get; init; } = 250;
|
||||
|
||||
/// <summary>The timeout in milliseconds for connecting to the worker pipe.</summary>
|
||||
public int PipeConnectAttemptTimeoutMilliseconds { get; init; } = 2000;
|
||||
|
||||
/// <summary>The maximum time in seconds for graceful shutdown.</summary>
|
||||
public int ShutdownTimeoutSeconds { get; init; } = 10;
|
||||
|
||||
/// <summary>The interval in seconds for worker heartbeats.</summary>
|
||||
public int HeartbeatIntervalSeconds { get; init; } = 5;
|
||||
|
||||
/// <summary>The grace period in seconds after a heartbeat before considering the worker unresponsive.</summary>
|
||||
public int HeartbeatGraceSeconds { get; init; } = 15;
|
||||
|
||||
/// <summary>The maximum message size in bytes for IPC communication.</summary>
|
||||
public int MaxMessageBytes { get; init; } = 16 * 1024 * 1024;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user