Files
membank/auto-check/pkg/stress/metrics.go
12600k-rog-d4 2aaaa16ae2 0813
2026-08-13 22:49:50 +08:00

99 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package stress
import (
"fmt"
"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 根据配置和可用工具,生成要执行的指标列表
func BuildMetrics(types []TestType, tools ToolSet) []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:
// disk 优先 fio无 fio 可降级 stress-ng
switch {
case tools.Has("fio"):
m.Tool = "fio"
case tools.Has("stress-ng"):
m.Tool = "stress-ng"
default:
m.Tool = "fio"
}
case TestMemNative:
m.Tool = "stressapptest"
case TestFull:
m.Tool = "stress-ng"
default:
m.Enabled = false
m.DisableReason = "未知测试类型"
}
// 根据工具可用性决定是否禁用,并记录原因
switch t {
case TestDiskIO:
if !tools.Has("fio") && !tools.Has("stress-ng") {
m.Enabled = false
m.DisableReason = "缺少 fio 或 stress-ng"
}
default:
if m.Tool != "" && !tools.Has(m.Tool) {
m.Enabled = false
m.DisableReason = fmt.Sprintf("缺少 %s", m.Tool)
}
}
metrics = append(metrics, m)
}
// 自动附加监控指标
metrics = append(metrics, Metric{Name: "temp", Tool: "lm-sensors", Enabled: tools.Has("lm-sensors"), IsMonitor: true})
metrics = append(metrics, Metric{Name: "dmesg", Tool: "", Enabled: true, IsMonitor: true})
return metrics
}
// ============================
// 压力测试配置
// ============================
// Config 压力测试配置
type Config struct {
Duration time.Duration
Threads int
MemSizeMB int // 0=自动(可用60%)
DiskSizeMB int // 0=默认1024
DiskDir string // 空=自动临时目录
TempLogInt time.Duration // 0=10s
TempLimit float64 // 温度上限(°C)0=不判定
}
// DefaultConfig 默认配置
func DefaultConfig() Config {
return Config{
Duration: 30 * time.Second,
Threads: 4,
DiskSizeMB: 1024,
TempLogInt: 10 * time.Second,
TempLimit: 90,
}
}