Promote service version into the dashboard title and surface the active alarm filter patterns in the Alarms panel so operators can verify scope at a glance without reading logs or the footer block
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -148,7 +148,8 @@ namespace ZB.MOM.WW.LmxOpcUa.Host.Status
|
||||
AckWriteFailures = _nodeManager?.AlarmAckWriteFailures ?? 0,
|
||||
FilterEnabled = _nodeManager?.AlarmFilterEnabled ?? false,
|
||||
FilterPatternCount = _nodeManager?.AlarmFilterPatternCount ?? 0,
|
||||
FilterIncludedObjectCount = _nodeManager?.AlarmFilterIncludedObjectCount ?? 0
|
||||
FilterIncludedObjectCount = _nodeManager?.AlarmFilterIncludedObjectCount ?? 0,
|
||||
FilterPatterns = _nodeManager?.AlarmFilterPatterns?.ToList() ?? new List<string>()
|
||||
};
|
||||
}
|
||||
|
||||
@@ -221,8 +222,10 @@ namespace ZB.MOM.WW.LmxOpcUa.Host.Status
|
||||
sb.AppendLine(
|
||||
"table { width: 100%; border-collapse: collapse; } th, td { text-align: left; padding: 4px 8px; border-bottom: 1px solid #333; }");
|
||||
sb.AppendLine("h2 { margin: 0 0 10px 0; } h1 { color: #66ccff; }");
|
||||
sb.AppendLine("h1 .version { color: #888; font-size: 0.5em; font-weight: normal; margin-left: 12px; }");
|
||||
sb.AppendLine("</style></head><body>");
|
||||
sb.AppendLine("<h1>LmxOpcUa Status Dashboard</h1>");
|
||||
sb.AppendLine(
|
||||
$"<h1>LmxOpcUa Status Dashboard<span class='version'>v{WebUtility.HtmlEncode(data.Footer.Version)}</span></h1>");
|
||||
|
||||
// Connection panel
|
||||
var connColor = data.Connection.State == "Connected" ? "green" :
|
||||
@@ -319,8 +322,21 @@ namespace ZB.MOM.WW.LmxOpcUa.Host.Status
|
||||
sb.AppendLine(
|
||||
$"<p>Transitions: {data.Alarms.TransitionCount:N0} | Ack Events: {data.Alarms.AckEventCount:N0} | Ack Write Failures: {data.Alarms.AckWriteFailures}</p>");
|
||||
if (data.Alarms.FilterEnabled)
|
||||
{
|
||||
sb.AppendLine(
|
||||
$"<p>Filter: <b>{data.Alarms.FilterPatternCount}</b> pattern(s), <b>{data.Alarms.FilterIncludedObjectCount}</b> object(s) included</p>");
|
||||
if (data.Alarms.FilterPatterns.Count > 0)
|
||||
{
|
||||
sb.AppendLine("<ul>");
|
||||
foreach (var pattern in data.Alarms.FilterPatterns)
|
||||
sb.AppendLine($"<li><code>{WebUtility.HtmlEncode(pattern)}</code></li>");
|
||||
sb.AppendLine("</ul>");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine("<p>Filter: <b>disabled</b> (all alarm-bearing objects tracked)</p>");
|
||||
}
|
||||
sb.AppendLine("</div>");
|
||||
|
||||
// Operations table
|
||||
@@ -336,11 +352,6 @@ namespace ZB.MOM.WW.LmxOpcUa.Host.Status
|
||||
|
||||
sb.AppendLine("</table></div>");
|
||||
|
||||
// Footer
|
||||
sb.AppendLine("<div class='panel gray'><h2>Footer</h2>");
|
||||
sb.AppendLine($"<p>Generated: {data.Footer.Timestamp:O} | Version: {data.Footer.Version}</p>");
|
||||
sb.AppendLine("</div>");
|
||||
|
||||
sb.AppendLine("</body></html>");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user