chore: 同步本地更改
- 新增 aio-mcp 项目框架 - 新增 .trae/skills/ OCR/SKU 设计工具 - 更新 auto-check 配置和 stress 包 - 删除 fnhelp 文档目录 - 更新 Docker 压力测试脚本
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/1(Docker 环境变量传参用)
|
||||
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
|
||||
|
||||
@@ -15,6 +15,7 @@ const (
|
||||
TestDiskIO TestType = "disk"
|
||||
TestMemNative TestType = "memnative"
|
||||
TestFull TestType = "full"
|
||||
TestFnStable TestType = "fnstable" // fnscript 稳定性门禁(社区脚本先行,通过后自有压测再跑)
|
||||
MonitorTemp TestType = "temp"
|
||||
MonitorDmesg TestType = "dmesg"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user