Files
wwtools/mbproxy/tests/sim/mbproxy.smoke.config.json
T
Joseph Doherty e719dd51c1 mbproxy: replace status page with a live SignalR web dashboard
The single auto-refreshing zero-JS status page gave operators a 25-column
wall and no way to drill into one connection. This adds a Bootstrap fleet
dashboard (filterable/sortable KPI table) and a per-PLC detail page with a
real-time debug view of raw PLC-side BCD vs. decoded client-side values,
streamed live over a SignalR feed. The debug view is fed by an on-demand
per-tag value capture, armed only while a detail page is open. All assets
(Bootstrap, SignalR client, fonts) are embedded so the UI works unchanged
on firewalled networks; GET /status.json is untouched for scrapers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 10:41:02 -04:00

72 lines
2.1 KiB
JSON

// mbproxy smoke-test configuration — used by the Phase 4/5 web-UI browser smoke
// tests (see plans/2026-05-15-webui-dashboard.md). NOT a deployment config.
//
// Topology:
// * line-a / line-b → the dl205 simulator on 127.0.0.1:5020 (run-dl205-sim.ps1).
// line-a carries a 16-bit BCD tag, line-b a 32-bit BCD tag,
// so the connection-detail debug view has content in both
// widths. Both listeners bind and reach a live backend.
// * line-dead → an unreachable backend (192.0.2.1, TEST-NET-1, RFC 5737).
// The listener binds fine but every backend connect fails,
// so the row surfaces connect failures / heartbeat failures
// and exercises the dashboard's "problems only" filter.
{
"Mbproxy": {
"BcdTags": {
"Global": []
},
"Plcs": [
{
"Name": "line-a",
"ListenPort": 6020,
"Host": "127.0.0.1",
"Port": 5020,
"BcdTags": {
"Add": [
{ "Address": 1072, "Width": 16 }
]
}
},
{
"Name": "line-b",
"ListenPort": 6021,
"Host": "127.0.0.1",
"Port": 5020,
"BcdTags": {
"Add": [
{ "Address": 1072, "Width": 32 }
]
}
},
{
"Name": "line-dead",
"ListenPort": 6022,
"Host": "192.0.2.1",
"Port": 502
}
],
"AdminPort": 8080,
"AdminPushIntervalMs": 1000,
"Connection": {
"BackendConnectTimeoutMs": 2000,
"BackendRequestTimeoutMs": 2000,
"GracefulShutdownTimeoutMs": 5000,
"Keepalive": {
"Enabled": true,
"TcpIdleTimeMs": 30000,
"TcpProbeIntervalMs": 5000,
"TcpProbeCount": 4,
"BackendHeartbeatIdleMs": 10000,
"BackendHeartbeatProbeAddress": 0
}
}
},
"Serilog": {
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": { "Default": "Information" },
"WriteTo": [
{ "Name": "Console" }
]
}
}