@if (state.LatestReport != null)
{
var report = state.LatestReport;
@* Column 1: Nodes *@
Nodes
@if (report.ClusterNodes is { Count: > 0 })
{
@foreach (var node in report.ClusterNodes)
{
| @node.Hostname |
@(node.IsOnline ? OnlineGlyph : OfflineGlyph) @(node.IsOnline ? "Online" : "Offline")
|
@(node.Role == "Primary" ? PrimaryGlyph : StandbyGlyph) @node.Role
|
}
}
else
{
| @(report.NodeHostname != "" ? report.NodeHostname : "Node") |
@(state.IsOnline ? OnlineGlyph : OfflineGlyph) @(state.IsOnline ? "Online" : "Offline")
|
@{
var roleLabel = report.NodeRole == "Active" ? "Primary" : "Standby";
}
@(roleLabel == "Primary" ? PrimaryGlyph : StandbyGlyph) @roleLabel
|
}
@* Column 2: Data Connections (collapsible) *@
@if (report.DataConnectionStatuses.Count == 0)
{
None
}
else
{
@foreach (var (connName, health) in report.DataConnectionStatuses)
{
var endpoint = report.DataConnectionEndpoints?.GetValueOrDefault(connName);
var quality = report.DataConnectionTagQuality?.GetValueOrDefault(connName);
@connName
@(endpoint ?? health.ToString())
@if (quality != null)
{
| Tags good |
@quality.Good.ToString("N0") |
| Tags bad |
@quality.Bad.ToString("N0") |
| Tags uncertain |
@quality.Uncertain.ToString("N0") |
}
}
}
@* Column 3: Instances + Store-and-Forward (collapsible) *@
Instances
| Deployed |
@report.DeployedInstanceCount |
| Enabled |
@report.EnabledInstanceCount |
| Disabled |
@report.DisabledInstanceCount |
Store-and-Forward Buffers
@if (report.StoreAndForwardBufferDepths.Count == 0)
{
Empty
}
else
{
@foreach (var (category, depth) in report.StoreAndForwardBufferDepths)
{
@category
@depth
}
}
@* Column 4: Error Counts + Parked Messages (collapsible) *@
Error Counts
| Script Errors |
@report.ScriptErrorCount
|
| Alarm Eval Errors |
@report.AlarmEvaluationErrorCount
|
| Dead Letters |
@report.DeadLetterCount
|
Parked Messages
@if (report.ParkedMessageCount == 0)
{
Empty
}
else
{
@report.ParkedMessageCount
}
}
else
{
No report data available.
}