Commit bf290b43 authored by 段廷瑞's avatar 段廷瑞

fix: 统计看板显示遮挡优化

parent fcf80918
No preview for this file type
......@@ -264,12 +264,12 @@ namespace Tools.MyAgent.Forms
{
Text = "运行统计(进程实时 + 近 7 天落盘,重启不丢)",
Location = new Point(8, 8),
Size = new Size(596, 172),
Size = new Size(596, 200),
};
_lblDashKpi = new Label
{
Location = new Point(16, 26),
Size = new Size(564, 138),
Size = new Size(564, 166),
AutoSize = false,
Font = new Font("Consolas", 9.5F),
UseMnemonic = false,
......@@ -279,7 +279,7 @@ namespace Tools.MyAgent.Forms
var grpOpen = new GroupBox
{
Text = "完整看板",
Location = new Point(8, 188),
Location = new Point(8, 216),
Size = new Size(596, 116),
};
_btnOpenDashboard = new Button
......@@ -343,27 +343,32 @@ namespace Tools.MyAgent.Forms
{
var st = Tools.MyAgent.AgentTelemetry.Snapshot();
var sb = new System.Text.StringBuilder();
sb.Append("本进程累计(实时):\n");
sb.Append(string.Format(" 轮数 {0}(成功 {1} · 失败 {2} · 取消 {3})\n",
// 紧凑排版(每段 2~3 行):加"近 7 天"段后原逐行排版超出 Label 高度,末行被裁(真机反馈 2026-10-09)
sb.Append("本进程累计:");
sb.Append(string.Format("轮数 {0}(成功 {1} · 失败 {2} · 取消 {3})\n",
st.Runs, st.Success, st.Errors, st.Cancels));
if (st.Duration.Count > 0)
sb.Append(string.Format(" 耗时 P50 {0}ms · P95 {1}ms · 最大 {2}ms\n",
st.Duration.P50, st.Duration.P95, st.Duration.Max));
sb.Append(" 耗时 P50 " + (st.Duration.Count > 0 ? st.Duration.P50.ToString() : "—")
+ " · P95 " + (st.Duration.Count > 0 ? st.Duration.P95.ToString() : "—")
+ " · 最大 " + (st.Duration.Count > 0 ? st.Duration.Max.ToString() : "—") + " ms");
if (st.Ttfb.Count > 0)
sb.Append(string.Format(" 首包 P50 {0}ms · P95 {1}ms\n", st.Ttfb.P50, st.Ttfb.P95));
sb.Append(string.Format(" 工具 {0} 次 · LLM {1} 次\n", st.ToolCalls, st.LlmCalls));
sb.Append(string.Format(" · 首包 P50 {0} / P95 {1} ms", st.Ttfb.P50, st.Ttfb.P95));
sb.Append("\n");
sb.Append(string.Format(" 工具 {0} 次 · LLM {1} 次", st.ToolCalls, st.LlmCalls));
long tokens = st.PromptTokens + st.CompletionTokens;
if (tokens > 0) sb.Append(string.Format(" Token {0} + {1}\n", st.PromptTokens, st.CompletionTokens));
if (st.Cost > 0) sb.Append(" 费用 " + Tools.MyAgent.CostEstimator.Format(st.Cost) + "\n");
if (st.Dropped > 0) sb.Append(" ⚠ 丢弃 " + st.Dropped + " 条(采集跟不上)\n");
if (tokens > 0) sb.Append(string.Format(" · Token {0}+{1}", st.PromptTokens, st.CompletionTokens));
if (st.Cost > 0) sb.Append(" · 费用 " + Tools.MyAgent.CostEstimator.Format(st.Cost));
if (st.Dropped > 0) sb.Append(string.Format(" · ⚠丢弃 {0} 条", st.Dropped));
sb.Append("\n");
// 近 7 天历史(runs_*.jsonl 落盘,重启不丢;与 /admin 完整看板同源)
sb.Append("\n近 7 天历史(落盘持久化):\n");
sb.Append("\n近 7 天历史(落盘持久化):");
try
{
var rows = new Tools.MyAgent.TelemetryStore().LoadRuns();
if (rows.Length == 0)
sb.Append(" (暂无落盘记录;完成问答后写入 Logs\\runs_*.jsonl)\n");
{
sb.Append("暂无落盘记录(完成问答后写入 Logs\\runs_*.jsonl)\n");
}
else
{
int ok = 0, err = 0, cancel = 0;
......@@ -380,19 +385,18 @@ namespace Tools.MyAgent.Forms
if (r.TotalMs > 0) ms.Add(r.TotalMs);
}
ms.Sort();
sb.Append(string.Format(" 轮数 {0}(成功 {1} · 失败 {2} · 取消 {3})\n", rows.Length, ok, err, cancel));
if (ms.Count > 0)
sb.Append(string.Format(" 耗时 P50 {0}ms · P95 {1}ms · 最大 {2}ms\n",
Pct(ms, 0.5), Pct(ms, 0.95), ms[ms.Count - 1]));
if (tok > 0) sb.Append(" Token " + tok + "\n");
if (cost > 0) sb.Append(" 费用 " + Tools.MyAgent.CostEstimator.Format(cost) + "\n");
if (rows.Length > 0)
sb.Append(" 最新:" + rows[0].StartedAt.ToString("MM-dd HH:mm") + "(" + rows[0].Outcome + ")\n");
sb.Append(string.Format("轮数 {0}(成功 {1} · 失败 {2} · 取消 {3})\n", rows.Length, ok, err, cancel));
sb.Append(" 耗时 P50 " + (ms.Count > 0 ? Pct(ms, 0.5).ToString() : "—")
+ " · P95 " + (ms.Count > 0 ? Pct(ms, 0.95).ToString() : "—")
+ " · 最大 " + (ms.Count > 0 ? ms[ms.Count - 1].ToString() : "—") + " ms");
if (tok > 0) sb.Append(" · Token " + tok);
if (cost > 0) sb.Append(" · 费用 " + Tools.MyAgent.CostEstimator.Format(cost));
sb.Append("\n");
sb.Append(" 最新:" + rows[0].StartedAt.ToString("MM-dd HH:mm") + "(" + rows[0].Outcome + ")\n");
}
}
catch { sb.Append(" (历史记录读取失败)\n"); }
catch { sb.Append("读取失败\n"); }
if (st.Runs == 0) sb.Append("\n(本进程尚未完成任何一轮回答;多日历史见「打开完整看板」)\n");
_lblDashKpi.Text = sb.ToString();
}
catch
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment