This commit is contained in:
12600k-rog-d4
2026-08-13 22:49:50 +08:00
parent 5e296bfe19
commit 2aaaa16ae2
24 changed files with 1415 additions and 327 deletions

View File

@@ -1,13 +1,18 @@
echo "===TEST:cpu==="
# 读取温度sensors 不可用时输出空)
read_temp() {
sensors 2>/dev/null | grep -oP '\+?\d+(\.\d+)?(?=°C)' | head -1
}
# 后台采样 CPU 使用率 + 温度
SAMPLE_LOG=/tmp/auto-check-cpu-sample.log
> "$SAMPLE_LOG"
: > "$SAMPLE_LOG"
(
while true; do
TS=$(date +%H:%M:%S)
CPU=$(top -bn1 2>/dev/null | grep "Cpu(s)" | sed 's/.*,\s*\([0-9.]*\)%*\s*id.*/\1/' | awk '{printf "%.1f", 100-$1}' || echo 0)
TEMP=$(sensors 2>/dev/null | grep -iE 'Package|Core\s*0|temp1|CPU' | head -1 | grep -oP '\d+\.?\d*' | head -1 || echo 0)
CPU=$(top -bn1 2>/dev/null | grep "Cpu(s)" | sed -n 's/.*,\s*\([0-9.]*\)%*\s*id.*/\1/p' | awk '{printf "%.1f", 100-$1}' 2>/dev/null)
TEMP=$(read_temp)
echo "${TS},${CPU},${TEMP}" >> "$SAMPLE_LOG"
sleep "${AUTOCHECK_SAMPLE_INTERVAL:-2}"
done
@@ -16,7 +21,7 @@ SAMPLE_PID=$!
START_TIME=$(date +%s%N)
set +e
OUTPUT=$(stress-ng --cpu "${AUTOCHECK_THREADS:-4}" --cpu-method all --timeout "${AUTOCHECK_DURATION:-30}s" --metrics-brief --temp-path /tmp 2>&1)
OUTPUT=$(stress-ng --cpu "${AUTOCHECK_THREADS:-4}" --cpu-method all --timeout "${AUTOCHECK_DURATION:-30}s" --temp-path /tmp --metrics-brief 2>&1)
EXIT_CODE=$?
set -e
END_TIME=$(date +%s%N)
@@ -27,10 +32,27 @@ wait $SAMPLE_PID 2>/dev/null || true
DURATION_MS=$(( (END_TIME - START_TIME) / 1000000 ))
if [ "$EXIT_CODE" -eq 0 ]; then echo 'status:pass'; else echo 'status:fail'; fi
echo "duration:${DURATION_MS}ms"
# 跑分:各 stressor 的 bogo ops/s 之和
SCORE=$(echo "$OUTPUT" | awk '
/^stress-ng:/ && ($4=="cpu" || $4=="vm" || $4=="iomix" || $4=="memrate") {
v=$(NF-1)+0; if (v>0) s+=v
}
END { printf "%.1f", s+0 }')
echo "score:${SCORE}"
# 关键指标
AVG_CPU=$(awk -F',' '$2!="" {s+=$2; n++} END{printf "%.1f", (n?s/n:0)}' "$SAMPLE_LOG")
echo "metric:avg_cpu=${AVG_CPU}"
MAX_TEMP=$(awk -F',' '$3!="" && $3+0>m {m=$3} END{printf "%.1f", m+0}' "$SAMPLE_LOG")
HAS_TEMP=$(awk -F',' '$3!="" && $3+0>0{f=1} END{print f+0}' "$SAMPLE_LOG")
if [ "$HAS_TEMP" = "1" ]; then echo "metric:max_temp=${MAX_TEMP}"; fi
echo "output:${OUTPUT}"
# 输出采样数据
# 采样数据(首行表头)
echo "===SAMPLES==="
echo "time,cpu,temp"
cat "$SAMPLE_LOG"
echo "===END_SAMPLES==="