package stress import ( "time" ) // ============================ // 测试指标定义 // ============================ // Metric 测试指标(定义测什么、用什么工具、怎么判结果) type Metric struct { Name string // 指标名称(cpu/memory/disk/memnative/full) Tool string // 依赖的工具(stress-ng/stressapptest/fio) Enabled bool // 是否启用 IsMonitor bool // 是否为监控指标(temp/dmesg,自动附加) DisableReason string // 禁用时展示的原因 } // BuildMetrics 根据测试类型生成要执行的指标列表。 // 压测工具全部预装在 Docker 镜像中(stress-ng/fio/stressapptest/lm-sensors), // 无需在宿主机检测工具可用性。 func BuildMetrics(types []TestType) []Metric { var metrics []Metric for _, t := range types { m := Metric{Name: string(t), Enabled: true} switch t { case TestCPU: m.Tool = "stress-ng" case TestMemory: m.Tool = "stress-ng" case TestDiskIO: m.Tool = "fio" case TestMemNative: m.Tool = "stressapptest" case TestFull: m.Tool = "stress-ng" default: m.Enabled = false m.DisableReason = "未知测试类型" } metrics = append(metrics, m) } // 自动附加监控指标(容器内执行) metrics = append(metrics, Metric{Name: "temp", Tool: "lm-sensors", Enabled: true, IsMonitor: true}) metrics = append(metrics, Metric{Name: "dmesg", Tool: "", Enabled: true, IsMonitor: true}) return metrics } // ============================ // 压力测试配置 // ============================ // Config 压力测试配置 type Config struct { Types string // 测试类型(逗号分隔),如 "cpu,memory,disk" Duration time.Duration Threads int MemSizeMB int // 0=自动(可用60%) DiskSizeMB int // 0=默认1024 DiskDir string // 空=自动临时目录 TempLogInt time.Duration TempLimit float64 // 温度上限(°C),0=不判定 // 压测统一在 Docker 容器中执行(工具预装在镜像里) DockerImage string // 压测镜像名称,如 stress-test:latest DockerTar string // 本地导出的镜像文件(docker save),目标机无镜像时上传并 load DockerArgs string // Docker 运行参数,如 "--network=host --privileged" } // DefaultConfig 默认配置 func DefaultConfig() Config { return Config{ Duration: 30 * time.Second, Threads: 4, DiskSizeMB: 1024, TempLogInt: 10 * time.Second, TempLimit: 90, } }