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

@@ -0,0 +1,81 @@
# fnstable.sh - fnscript 稳定性门禁(社区脚本 self_inspection.pyvendor 原样收录不改源码)
#
# 思路先用社区脚本检测硬件真实稳定性stress CPU 压测 + memtester 内存数据校验),
# 通过后自有压测工具再跑一遍出报告;不通过则 run.sh 跳过自有压测。
#
# 适配注意(不改源码的代价,已逐一规避):
# 1. self_inspection.py CLI 模式无论成败 exit code 均为 0
# 只能按 stdout 关键词判定结果("未发现问题" = 通过)。
# 2. --memory 内含两处 y/n 交互确认input()),非交互环境会 EOFError
# 用 printf 'y\ny\n' 管道喂入(两处确认都覆盖)。
# 3. 脚本内部调 sudo memtester / stress依赖已在镜像中预装root 下 sudo 直接可用)。
# 4. memtester 测试可用内存的 97%,单遍耗时 30-120 分钟(由内存大小决定),
# 可用 AUTOCHECK_FN_MEMORY=0 关闭内存校验只做 CPU 门禁。
#
# 输出遵守 auto-check 结构化协议(===TEST:fnstable=== 块),
# 并设置 GATE_PASSED 供 run.sh 决定是否继续自有压测。
echo "===TEST:fnstable==="
FN_SCRIPT="/vendor/fnscript/self_inspection.py"
FN_DURATION="${AUTOCHECK_DURATION:-30}"
FN_MEMORY="${AUTOCHECK_FN_MEMORY:-1}"
FN_ALL_PASSED=1
START_TIME=$(date +%s%N)
# ---- 1. CPU 稳定性fnscript: stress --cpu 4 --timeout N----
set +e
FN_CPU_OUT=$(python3 "$FN_SCRIPT" --cpu "$FN_DURATION" 2>&1)
set -e
if printf '%s' "$FN_CPU_OUT" | grep -q "未发现问题"; then
FN_CPU_STATUS="pass"
else
FN_CPU_STATUS="fail"
FN_ALL_PASSED=0
fi
# ---- 2. 内存稳定性fnscript: sudo memtester <可用内存97%> 1数据校验----
FN_MEM_STATUS="skip"
FN_MEM_NOTE="未启用AUTOCHECK_FN_MEMORY=0"
if [ "$FN_MEMORY" = "1" ]; then
FN_MEM_NOTE=""
set +e
FN_MEM_OUT=$(printf 'y\ny\n' | python3 "$FN_SCRIPT" --memory 2>&1)
set -e
if printf '%s' "$FN_MEM_OUT" | grep -q "未发现问题"; then
FN_MEM_STATUS="pass"
else
FN_MEM_STATUS="fail"
FN_ALL_PASSED=0
fi
fi
END_TIME=$(date +%s%N)
DURATION_MS=$(( (END_TIME - START_TIME) / 1000000 ))
# ---- 3. 汇总结果(门禁语义:任一子项失败即整体失败)----
if [ "$FN_ALL_PASSED" -eq 1 ]; then
echo 'status:pass'
else
echo 'status:fail'
fi
echo "duration:${DURATION_MS}ms"
echo "output:[CPU] ${FN_CPU_STATUS} (stress ${FN_DURATION}s)"
printf '%s\n' "$FN_CPU_OUT" | while IFS= read -r line; do
[ -n "$line" ] && echo "output: $line"
done
if [ "$FN_MEM_STATUS" = "skip" ]; then
echo "output:[MEM] skip - ${FN_MEM_NOTE}"
else
echo "output:[MEM] ${FN_MEM_STATUS} (memtester 可用内存97% 单遍校验)"
printf '%s\n' "$FN_MEM_OUT" | while IFS= read -r line; do
[ -n "$line" ] && echo "output: $line"
done
fi
echo ''
# 供 run.sh 门禁判断fnstable 失败 → 跳过自有压测)
GATE_PASSED=$FN_ALL_PASSED

View File

@@ -28,7 +28,7 @@ source /scripts/temp_start.sh
# 未知类型输出 skip保证报告完整
for T in $(echo "$AUTOCHECK_TYPES" | tr ',' ' '); do
case "$T" in
cpu|memory|disk|memnative|full) ;;
cpu|memory|disk|memnative|full|fnstable) ;;
*)
echo "===TEST:$T==="
echo "status:skip"
@@ -38,16 +38,37 @@ for T in $(echo "$AUTOCHECK_TYPES" | tr ',' ' '); do
esac
done
# 3. 按固定顺序执行请求的测试(先单项、综合 full 最后
# 3. 稳定性门禁fnscript 社区脚本先行,不通过则跳过自有压测
# fnstable.sh 内部设置 GATE_PASSED1=通过 / 0=失败)
GATE_PASSED=1
REQ_TYPES=",${AUTOCHECK_TYPES// /},"
for TYPE in cpu memory disk memnative full; do
case "$REQ_TYPES" in
*",$TYPE,"*) source "/scripts/$TYPE.sh" ;;
esac
done
case "$REQ_TYPES" in
*,fnstable,*) source /scripts/fnstable.sh ;;
esac
# 4. 温度监控收尾
# 4. 按固定顺序执行请求的自有测试(先单项、综合 full 最后)
# 门禁未通过 → 硬件已有问题,自有压测全部 skip报告仍完整输出
if [ "$GATE_PASSED" -eq 1 ]; then
for TYPE in cpu memory disk memnative full; do
case "$REQ_TYPES" in
*",$TYPE,"*) source "/scripts/$TYPE.sh" ;;
esac
done
else
for TYPE in cpu memory disk memnative full; do
case "$REQ_TYPES" in
*",$TYPE,"*)
echo "===TEST:$TYPE==="
echo "status:skip"
echo "output:fnscript 稳定性门禁未通过,跳过自有压测"
echo ""
;;
esac
done
fi
# 5. 温度监控收尾
source /scripts/temp_end.sh
# 5. 内核日志 + 结束标记
# 6. 内核日志 + 结束标记
source /scripts/dmesg.sh