修复排名图空数据时生成坏图

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) <noreply@anthropic.com>
This commit is contained in:
2026-09-27 09:13:03 +08:00
co-authored by Claude Opus 5
parent 0deb1bbedc
commit 836e42b364
+15
View File
@@ -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