From 836e42b364f0ea41cf59aa77f782d7de3d9327fa Mon Sep 17 00:00:00 2001 From: root Date: Sun, 27 Sep 2026 09:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=92=E5=90=8D=E5=9B=BE?= =?UTF-8?q?=E7=A9=BA=E6=95=B0=E6=8D=AE=E6=97=B6=E7=94=9F=E6=88=90=E5=9D=8F?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit innerServers 未配置时 GetRankPhoto/GetRankDetail 的跨服循环零次执行, statList 为空仍继续渲染。go-charts 对空数据集会把坐标轴范围退化成 math.MinInt64 与 NaN,产出一张 Y 轴刻度为 -9,223,372,036,854,776,000、 X 轴为 NaN、图例全 0 的坏图,并照常推送到群里。 增加 ErrNoRankData 哨兵错误,两个函数在渲染前拦截空数据集。11 个调用点 原本就是 if err != nil { return err },无需改动即可全部覆盖。 Co-Authored-By: Claude Opus 5 (1M context) --- service/crossSer/cross.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/service/crossSer/cross.go b/service/crossSer/cross.go index b87d550..ca994f0 100644 --- a/service/crossSer/cross.go +++ b/service/crossSer/cross.go @@ -2,6 +2,7 @@ package crossSer import ( "context" + "errors" "fmt" "sort" "stat/api/proto" @@ -20,6 +21,11 @@ import ( "github.com/vicanso/go-charts/v2" ) +// ErrNoRankData 排名数据为空。空数据集不能交给 go-charts 渲染: 坐标轴范围会退化成 +// math.MinInt64 与 NaN,产出一张刻度为 -9,223,372,036,854,776,000 的坏图。 +// 常见原因是 innerServers 未配置,跨服循环零次执行。 +var ErrNoRankData = errors.New("排名数据为空,无法生成图表(请检查 innerServers 配置)") + var Colors = []drawing.Color{ drawing.ColorFromHex("0780cf"), drawing.ColorFromHex("765005"), @@ -353,6 +359,11 @@ func GetRankPhoto(reportTime time.Time, title string, getValue FuncGetStatValue) } } } + // 空数据集不能进入渲染: go-charts 会把坐标轴范围退化成 MinInt64/NaN, + // 产出一张刻度为 -9,223,372,036,854,776,000 的坏图并照常发到群里。 + if len(statList) == 0 { + return "", nil, ErrNoRankData + } // sort sort.Sort(statList) // draw chart @@ -481,6 +492,10 @@ func GetRankDetail(reportTime time.Time, title string, getValue FuncGetStatValue } } } + // 同 GetRankPhoto: 空数据集会渲染出坐标轴为 MinInt64/NaN 的坏图 + if len(statList) == 0 { + return "", ErrNoRankData + } // sort sort.Sort(statList) // draw chart