fix(options): validate Host Node/Database/Logging options at startup — empty NodeName fails fast instead of NULLing SourceNode (plan R2-08 T7, arch-review 08r2 NF4)
This commit is contained in:
@@ -157,19 +157,33 @@ public static class SiteServiceRegistration
|
||||
/// <param name="config">Application configuration supplying the option values.</param>
|
||||
public static void BindSharedOptions(IServiceCollection services, IConfiguration config)
|
||||
{
|
||||
services.Configure<NodeOptions>(config.GetSection("ScadaBridge:Node"));
|
||||
// Bind + eagerly validate: an empty NodeName would stamp the SourceNode audit
|
||||
// column NULL, so fail the host at boot with a key-naming message instead of
|
||||
// silently degrading the audit trail (arch-review 08r2 NF4).
|
||||
services.AddOptions<NodeOptions>().Bind(config.GetSection("ScadaBridge:Node")).ValidateOnStart();
|
||||
services.TryAddEnumerable(
|
||||
ServiceDescriptor.Singleton<IValidateOptions<NodeOptions>, NodeOptionsValidator>());
|
||||
// Bind + eagerly validate: ClusterOptionsValidator is registered (TryAddEnumerable)
|
||||
// by the ClusterInfrastructure module, so chaining ValidateOnStart() here makes a bad
|
||||
// ScadaBridge:Cluster section fail fast at host build instead of lazily on first resolve.
|
||||
services.AddOptions<ClusterOptions>().Bind(config.GetSection("ScadaBridge:Cluster")).ValidateOnStart();
|
||||
services.Configure<DatabaseOptions>(config.GetSection("ScadaBridge:Database"));
|
||||
// Bind + eagerly validate: a present-but-blank connection setting fails fast
|
||||
// here rather than opaquely at first DB use (arch-review 08r2 NF4).
|
||||
services.AddOptions<DatabaseOptions>().Bind(config.GetSection("ScadaBridge:Database")).ValidateOnStart();
|
||||
services.TryAddEnumerable(
|
||||
ServiceDescriptor.Singleton<IValidateOptions<DatabaseOptions>, DatabaseOptionsValidator>());
|
||||
services.Configure<CommunicationOptions>(config.GetSection("ScadaBridge:Communication"));
|
||||
// Bind + eagerly validate: HealthMonitoringOptionsValidator is registered (TryAddEnumerable)
|
||||
// by the HealthMonitoring module, so chaining ValidateOnStart() here makes a bad
|
||||
// ScadaBridge:HealthMonitoring section fail fast at host build instead of lazily on first resolve.
|
||||
services.AddOptions<HealthMonitoringOptions>().Bind(config.GetSection("ScadaBridge:HealthMonitoring")).ValidateOnStart();
|
||||
services.Configure<NotificationOptions>(config.GetSection("ScadaBridge:Notification"));
|
||||
services.Configure<LoggingOptions>(config.GetSection("ScadaBridge:Logging"));
|
||||
// Bind + eagerly validate: an unrecognised MinimumLevel would silently fall back
|
||||
// to Information; fail fast at boot so the operator's intended floor is honoured
|
||||
// (arch-review 08r2 NF4).
|
||||
services.AddOptions<LoggingOptions>().Bind(config.GetSection("ScadaBridge:Logging")).ValidateOnStart();
|
||||
services.TryAddEnumerable(
|
||||
ServiceDescriptor.Singleton<IValidateOptions<LoggingOptions>, LoggingOptionsValidator>());
|
||||
|
||||
// Audit Log — exposes ScadaBridge:Node:NodeName to downstream audit
|
||||
// writers so they can stamp the SourceNode column. Registered here in
|
||||
|
||||
Reference in New Issue
Block a user