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>
This commit is contained in:
@@ -7,6 +7,14 @@ public sealed class MbproxyOptions
|
||||
public BcdTagListOptions BcdTags { get; init; } = new();
|
||||
public IReadOnlyList<PlcOptions> Plcs { get; init; } = [];
|
||||
public int AdminPort { get; init; } = 8080;
|
||||
|
||||
/// <summary>
|
||||
/// Server-push cadence (milliseconds) for the admin dashboard's SignalR feed.
|
||||
/// Every interval the admin endpoint builds a status snapshot and pushes it to
|
||||
/// connected dashboard / detail-page clients. Must be > 0. Defaults to 1000.
|
||||
/// </summary>
|
||||
public int AdminPushIntervalMs { get; init; } = 1000;
|
||||
|
||||
public ConnectionOptions Connection { get; init; } = new();
|
||||
public ResilienceOptions Resilience { get; init; } = new();
|
||||
|
||||
@@ -106,6 +114,9 @@ public sealed class MbproxyOptionsValidator : IValidateOptions<MbproxyOptions>
|
||||
errors.Add(
|
||||
$"Connection.GracefulShutdownTimeoutMs must be > 0; got {options.Connection.GracefulShutdownTimeoutMs}.");
|
||||
|
||||
if (options.AdminPushIntervalMs <= 0)
|
||||
errors.Add($"AdminPushIntervalMs must be > 0; got {options.AdminPushIntervalMs}.");
|
||||
|
||||
// Keepalive section ranges. Cross-field rules (heartbeat interval vs request
|
||||
// timeout) are enforced in ReloadValidator.
|
||||
var ka = options.Connection.Keepalive;
|
||||
|
||||
Reference in New Issue
Block a user