Files
-Fonu/internal/app/monitor_source_test.go
mrlee 74d731d0ac
CI / verify (push) Canceled after 0s
feat: 自动备份与保留策略、健康持续化与状态页、指标历史与趋势图,并修隧道判定误报与仪表盘布局(v1.2.11)
- 自动备份:每日一份(按最新备份是否在 24h 内判定,重启不重复)、保留份数可配、列表/下载/恢复/删除,恢复前先校验归档;顺手修 writeArchive 逐个检查 tar/gzip/文件 Close()(审查报告 §二)

- 健康持续化:只存状态变更(up/down/unknown)并推导可用率与不可用区间;公开状态页默认关闭、访问码存 SHA-256、按 IP 限流、只暴露域名与可用率

- 隧道判定修复:RouteHealthCandidate 新增 tunnel_known,frps 管理接口不可用时不再把「判不出来」当成「不通」(此前会误报「隧道连续不通」);汇总与徽标同样区分「无法判定」

- 指标历史:metrics_samples 纵向点表(本机 CPU/内存/磁盘 + 每规则上下行,30 天保留、查询按桶平均、不做降采样表);仪表盘趋势卡支持 1h/24h/7d

- 仪表盘布局:运行状态并入顶部统计区(运行时长补进「服务」卡);性能并入系统资源那一行,整行 4 列

- 测试:backup/metrics/frp/api/app 新增用例;gofmt、go build/vet/test、vue-tsc、vite build 全绿

- agent 无改动,AgentVersion 保持 0.12.2
2026-09-25 13:05:58 +08:00

25 lines
737 B
Go

package app
import (
"testing"
"github.com/fonu/fonu/internal/frp"
"github.com/fonu/fonu/internal/monitor"
)
// monitor 与 frp 两侧的状态字面量必须一致,落库前由 healthStateValue 翻译一次;
// 这个测试把翻译钉住,避免以后改一侧的常量而另一侧悄悄写错值。
func TestHealthStateValue(t *testing.T) {
cases := map[string]string{
monitor.HealthUp: frp.RouteHealthUp,
monitor.HealthDown: frp.RouteHealthDown,
monitor.HealthUnknown: frp.RouteHealthUnknown,
"其他": frp.RouteHealthUnknown,
}
for input, want := range cases {
if got := healthStateValue(input); got != want {
t.Fatalf("%q 应翻译为 %q,实际 %q", input, want, got)
}
}
}