chore: 同步本地更改

- 新增 aio-mcp 项目框架
- 新增 .trae/skills/ OCR/SKU 设计工具
- 更新 auto-check 配置和 stress 包
- 删除 fnhelp 文档目录
- 更新 Docker 压力测试脚本
This commit is contained in:
张威33321
2026-08-27 20:38:13 +08:00
parent a172a9bb5e
commit a8fa159f0f
75 changed files with 2266 additions and 4068 deletions

View File

@@ -51,6 +51,7 @@ type StressConfig struct {
DiskDir string `yaml:"disk_dir"` // 磁盘压测目录,空=自动临时目录
TempInterval time.Duration `yaml:"temp_interval"` // 温度采样间隔0=默认10s
TempLimit float64 `yaml:"temp_limit"` // 温度上限(°C)0=不判定
FnMemory bool `yaml:"fn_memory"` // fnstable 门禁的 memtester 内存校验30-120 分钟)
// 压测统一在 Docker 容器中执行(工具与脚本预装在镜像里)
DockerImage string `yaml:"docker_image"` // 压测镜像名称,如 stress-test:latest
DockerTar string `yaml:"docker_tar"` // 本地导出的镜像文件docker save目标机无镜像时上传并 load
@@ -110,6 +111,7 @@ func Default() *Config {
DiskSizeMB: 1024,
TempInterval: 10 * time.Second,
TempLimit: 90,
FnMemory: true,
DockerImage: "stress-test:latest",
DockerTar: "docker/stress-test/stress-test.tar",
DockerArgs: "--network=host --privileged",

View File

@@ -46,6 +46,20 @@ func Connect(ip string, cfg *Config) (*ssh.Client, error) {
if err != nil {
return nil, fmt.Errorf("SSH 连接 %s 失败: %w", addr, err)
}
// KeepAlive长时压测如 fnstable 门禁的 memtester 可达 30-120 分钟)期间
// 连接上无数据流动,定期发 keepalive 请求防止 NAT/防火墙掐断空闲 TCP 连接。
// 连接关闭后 SendRequest 返回错误goroutine 自行退出。
go func() {
ticker := time.NewTicker(30 * time.Second)
defer ticker.Stop()
for range ticker.C {
if _, _, err := client.SendRequest("keepalive@golang.org", true, nil); err != nil {
return
}
}
}()
return client, nil
}

View File

@@ -36,6 +36,8 @@ func BuildMetrics(types []TestType) []Metric {
m.Tool = "stressapptest"
case TestFull:
m.Tool = "stress-ng"
case TestFnStable:
m.Tool = "fnscript"
default:
m.Enabled = false
m.DisableReason = "未知测试类型"
@@ -64,6 +66,7 @@ type Config struct {
DiskDir string // 空=自动临时目录
TempLogInt time.Duration
TempLimit float64 // 温度上限(°C)0=不判定
FnMemory bool // fnstable 门禁是否执行 memtester 内存校验30-120 分钟)
// 压测统一在 Docker 容器中执行(工具预装在镜像里)
DockerImage string // 压测镜像名称,如 stress-test:20260824-153045由 build.sh 自动维护)
DockerTar string // 本地导出的镜像文件docker save目标机无镜像时上传并 load

View File

@@ -304,6 +304,7 @@ func (r *Runner) runInDocker() (string, error) {
"-e AUTOCHECK_DISK_DIR=%s "+
"-e AUTOCHECK_TEMP_INTERVAL=%d "+
"-e AUTOCHECK_SAMPLE_INTERVAL=2 "+
"-e AUTOCHECK_FN_MEMORY=%d "+
"%s %s",
containerName,
r.cfg.Types,
@@ -313,6 +314,7 @@ func (r *Runner) runInDocker() (string, error) {
r.cfg.DiskSizeMB,
r.cfg.DiskDir,
int(r.cfg.TempLogInt.Seconds()),
boolToInt(r.cfg.FnMemory),
r.cfg.DockerArgs,
r.cfg.DockerImage)
@@ -403,6 +405,7 @@ func TestDevice(ip string, cfg config.Config) *Report {
stressCfg.DiskDir = cfg.Stress.DiskDir
stressCfg.TempLogInt = cfg.Stress.TempInterval
stressCfg.TempLimit = cfg.Stress.TempLimit
stressCfg.FnMemory = cfg.Stress.FnMemory
// Docker 镜像配置(工具与脚本预装在镜像中,本地导出的 tar 上传到目标机后 load
stressCfg.DockerImage = cfg.Stress.DockerImage
stressCfg.DockerTar = cfg.Stress.DockerTar
@@ -453,6 +456,14 @@ func queryRemoteMAC(client *ssh.Client) string {
// 工具函数
// ============================
// boolToInt bool → 0/1Docker 环境变量传参用)
func boolToInt(b bool) int {
if b {
return 1
}
return 0
}
// IsPassed 报告是否通过
func IsPassed(rpt *Report) bool {
return rpt != nil && rpt.Failed == 0 && rpt.Errors == 0

View File

@@ -15,6 +15,7 @@ const (
TestDiskIO TestType = "disk"
TestMemNative TestType = "memnative"
TestFull TestType = "full"
TestFnStable TestType = "fnstable" // fnscript 稳定性门禁(社区脚本先行,通过后自有压测再跑)
MonitorTemp TestType = "temp"
MonitorDmesg TestType = "dmesg"
)