diff --git a/lmxproxy/src/ZB.MOM.WW.LmxProxy.Host/Status/StatusReportService.cs b/lmxproxy/src/ZB.MOM.WW.LmxProxy.Host/Status/StatusReportService.cs index 10b3b25..695361a 100644 --- a/lmxproxy/src/ZB.MOM.WW.LmxProxy.Host/Status/StatusReportService.cs +++ b/lmxproxy/src/ZB.MOM.WW.LmxProxy.Host/Status/StatusReportService.cs @@ -232,31 +232,38 @@ namespace ZB.MOM.WW.LmxProxy.Host.Status sb.AppendLine(" "); sb.AppendLine(" "); - // Operations table - if (statusData.Performance.Operations.Count > 0) - { - sb.AppendLine("
"); - sb.AppendLine("

Operations

"); - sb.AppendLine(" "); - sb.AppendLine(" "); + // RPC Operations table (always shown) + sb.AppendLine("
"); + sb.AppendLine("

RPC Operations

"); + sb.AppendLine("
OperationCountSuccess RateAvg (ms)Min (ms)Max (ms)P95 (ms)
"); + sb.AppendLine(" "); - foreach (var op in statusData.Performance.Operations) + // All known RPC operations — show each even if 0 calls + var rpcNames = new[] { "Read", "ReadBatch", "Write", "WriteBatch", "Subscribe" }; + foreach (var rpcName in rpcNames) + { + var key = rpcName.Substring(0, 1).ToLowerInvariant() + rpcName.Substring(1); + if (statusData.Performance.Operations.TryGetValue(key, out var op)) { sb.AppendLine($" " + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + - $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + + $"" + $""); } - - sb.AppendLine("
OperationCountSuccess RateAvg (ms)Min (ms)Max (ms)P95 (ms)
{op.Key}{op.Value.TotalCount}{op.Value.SuccessRate:P1}{op.Value.AverageMilliseconds:F1}{op.Value.MinMilliseconds:F1}{op.Value.MaxMilliseconds:F1}{op.Value.Percentile95Milliseconds:F1}{rpcName}{op.TotalCount}{op.SuccessRate:P1}{op.AverageMilliseconds:F1}{op.MinMilliseconds:F1}{op.MaxMilliseconds:F1}{op.Percentile95Milliseconds:F1}
"); - sb.AppendLine("
"); + else + { + sb.AppendLine($" {rpcName}0—————"); + } } + sb.AppendLine(" "); + sb.AppendLine(" "); + // Detailed health (if available) if (statusData.DetailedHealth != null) {