feat(historian-host): bind TCP host/port/tls config
This commit is contained in:
@@ -94,7 +94,10 @@ if (hasDriver)
|
|||||||
builder.Services.AddAlarmHistorian(
|
builder.Services.AddAlarmHistorian(
|
||||||
builder.Configuration,
|
builder.Configuration,
|
||||||
(opts, sp) => new WonderwareHistorianClient(
|
(opts, sp) => new WonderwareHistorianClient(
|
||||||
new WonderwareHistorianClientOptions(opts.PipeName, opts.SharedSecret),
|
new WonderwareHistorianClientOptions(opts.PipeName, opts.SharedSecret)
|
||||||
|
{
|
||||||
|
Host = opts.Host, Port = opts.Port, UseTls = opts.UseTls, ServerCertThumbprint = opts.ServerCertThumbprint,
|
||||||
|
},
|
||||||
sp.GetService<ILogger<WonderwareHistorianClient>>()));
|
sp.GetService<ILogger<WonderwareHistorianClient>>()));
|
||||||
|
|
||||||
// Bind every cross-platform driver factory before AddAkka resolves IDriverFactory — replaces
|
// Bind every cross-platform driver factory before AddAkka resolves IDriverFactory — replaces
|
||||||
|
|||||||
@@ -15,6 +15,10 @@
|
|||||||
"Enabled": false,
|
"Enabled": false,
|
||||||
"DatabasePath": "alarm-historian.db",
|
"DatabasePath": "alarm-historian.db",
|
||||||
"PipeName": "OtOpcUaHistorian",
|
"PipeName": "OtOpcUaHistorian",
|
||||||
|
"Host": "localhost",
|
||||||
|
"Port": 32569,
|
||||||
|
"UseTls": false,
|
||||||
|
"ServerCertThumbprint": null,
|
||||||
"SharedSecret": "",
|
"SharedSecret": "",
|
||||||
"DrainIntervalSeconds": 5,
|
"DrainIntervalSeconds": 5,
|
||||||
"Capacity": 1000000,
|
"Capacity": 1000000,
|
||||||
|
|||||||
@@ -28,6 +28,18 @@ public sealed class AlarmHistorianOptions
|
|||||||
/// <summary>Named-pipe name the Wonderware historian sidecar listens on.</summary>
|
/// <summary>Named-pipe name the Wonderware historian sidecar listens on.</summary>
|
||||||
public string PipeName { get; init; } = "OtOpcUaHistorian";
|
public string PipeName { get; init; } = "OtOpcUaHistorian";
|
||||||
|
|
||||||
|
/// <summary>TCP hostname or IP address the Wonderware historian sidecar listens on.</summary>
|
||||||
|
public string Host { get; init; } = "localhost";
|
||||||
|
|
||||||
|
/// <summary>TCP port the Wonderware historian sidecar listens on.</summary>
|
||||||
|
public int Port { get; init; } = 32569;
|
||||||
|
|
||||||
|
/// <summary>When <c>true</c>, the client connects over TLS.</summary>
|
||||||
|
public bool UseTls { get; init; }
|
||||||
|
|
||||||
|
/// <summary>Expected TLS server certificate thumbprint (hex, no spaces). Null or empty disables pinning.</summary>
|
||||||
|
public string? ServerCertThumbprint { get; init; }
|
||||||
|
|
||||||
/// <summary>Per-process shared secret the sidecar verifies in the Hello frame.</summary>
|
/// <summary>Per-process shared secret the sidecar verifies in the Hello frame.</summary>
|
||||||
public string SharedSecret { get; init; } = "";
|
public string SharedSecret { get; init; } = "";
|
||||||
|
|
||||||
|
|||||||
+20
@@ -169,4 +169,24 @@ public sealed class AlarmHistorianRegistrationTests
|
|||||||
warnings.ShouldContain(w => w.Contains("DatabasePath"));
|
warnings.ShouldContain(w => w.Contains("DatabasePath"));
|
||||||
warnings.Count.ShouldBeGreaterThanOrEqualTo(2);
|
warnings.Count.ShouldBeGreaterThanOrEqualTo(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Section_binds_tcp_host_port_tls_fields()
|
||||||
|
{
|
||||||
|
var config = ConfigFrom(new Dictionary<string, string?>
|
||||||
|
{
|
||||||
|
["AlarmHistorian:Host"] = "historian.example.com",
|
||||||
|
["AlarmHistorian:Port"] = "12345",
|
||||||
|
["AlarmHistorian:UseTls"] = "true",
|
||||||
|
["AlarmHistorian:ServerCertThumbprint"] = "AABBCCDDEEFF",
|
||||||
|
});
|
||||||
|
|
||||||
|
var opts = config.GetSection(AlarmHistorianOptions.SectionName).Get<AlarmHistorianOptions>();
|
||||||
|
|
||||||
|
opts.ShouldNotBeNull();
|
||||||
|
opts.Host.ShouldBe("historian.example.com");
|
||||||
|
opts.Port.ShouldBe(12345);
|
||||||
|
opts.UseTls.ShouldBeTrue();
|
||||||
|
opts.ServerCertThumbprint.ShouldBe("AABBCCDDEEFF");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user