fix:修改自动化测试脚本

This commit is contained in:
nnbcccscdscdsc
2026-03-30 21:45:04 +08:00
parent 24467c04c0
commit ffff423934
2 changed files with 271 additions and 69 deletions

View File

@@ -1,31 +1,78 @@
#!/bin/bash #!/bin/bash
LOCAL_REPO_DIR="/home/limingjie/LMJ_Work/RobotCompetition/OmniSocketGo"
KCP_PEER_BIN="./bin/kcppeer"
OUTPUT_ROOT="/home/limingjie/LMJ_Work/RobotCompetition/KCPData/BDAClogs"
PEERB_POLL_INTERVAL_SEC=5
PEERB_MAX_POLLS=180
PEER_A_EXIT_WAIT_SEC=5
require_local_binary() {
if [ ! -x "$1" ]; then
echo "ERROR: 缺少可执行文件 $1"
exit 1
fi
}
cleanup_remote_peerb() {
ssh omni-peer bash -s <<'EOF'
pids=$(ps -eo pid=,args= | awk '/[b]in\/kcppeer -id peer-b/ {print $1}')
if [ -n "$pids" ]; then
kill $pids 2>/dev/null || true
fi
pids=$(ps -eo pid=,args= | awk '/\/tmp\/peerb_batch\.sh/ {print $1}')
if [ -n "$pids" ]; then
kill $pids 2>/dev/null || true
fi
rm -f /tmp/peerb_batch_done /tmp/peerb_batch.sh /tmp/peerb_commands
EOF
}
echo "=== 开始自动化测试 ===" echo "=== 开始自动化测试 ==="
cd /home/limingjie/LMJ_Work/OmniSocketGo cd "$LOCAL_REPO_DIR"
require_local_binary "$KCP_PEER_BIN"
echo ">>> 0. 清理上次残留进程..."
pkill -f 'bin/kcppeer -id peer-a' 2>/dev/null || true
cleanup_remote_peerb || exit 1
rm -rf logs rm -rf logs
rm -rf inbox/a
mkdir -p logs inbox/a mkdir -p logs inbox/a
# 1. 清理残留 & 启动 Server D 和 Relay C # 1. 清理残留 & 启动 Server D 和 Relay C
echo ">>> 1. 启动 Server D 和 Relay C..." echo ">>> 1. 启动 Server D 和 Relay C..."
ssh bj-txy bash -s <<'EOF' ssh bj-txy bash -s <<'EOF'
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
pkill -f kcpserver 2>/dev/null || true pkill -f kcpserver 2>/dev/null || true
pkill -f 'cmd/kcpserver' 2>/dev/null || true pkill -f 'bin/kcpserver' 2>/dev/null || true
sleep 1 sleep 1
cd /home/ubuntu/OmniSocketGo cd /home/ubuntu/OmniSocketGo
setsid go run ./cmd/kcpserver/ -listen 0.0.0.0:10909 > server_console.log 2>&1 </dev/null & rm -rf logs
mkdir -p logs
if [ ! -x ./bin/kcpserver ]; then
echo "ERROR: 缺少 ./bin/kcpserver"
exit 1
fi
setsid ./bin/kcpserver -listen 0.0.0.0:10909 \
-kcp-ts-debug-log logs/d-kcp-ts.jsonl \
-kcp-session-stats-log logs/d-kcp-stats.jsonl > server_console.log 2>&1 </dev/null &
echo "server D launched (pid=$!)" echo "server D launched (pid=$!)"
EOF EOF
ssh sz-txy bash -s <<'EOF' ssh sz-txy bash -s <<'EOF'
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
pkill -f kcpserver 2>/dev/null || true pkill -f kcpserver 2>/dev/null || true
pkill -f 'cmd/kcpserver' 2>/dev/null || true pkill -f 'bin/kcpserver' 2>/dev/null || true
sleep 1 sleep 1
cd /home/ubuntu/OmniSocketGo cd /home/ubuntu/OmniSocketGo
setsid go run ./cmd/kcpserver/ -mode=relay -listen 0.0.0.0:10909 -relay-remote 172.21.32.15:10909 > relay_console.log 2>&1 </dev/null & rm -rf logs
mkdir -p logs
if [ ! -x ./bin/kcpserver ]; then
echo "ERROR: 缺少 ./bin/kcpserver"
exit 1
fi
setsid ./bin/kcpserver -mode=relay -listen 0.0.0.0:10909 -relay-remote 172.21.32.15:10909 > relay_console.log 2>&1 </dev/null &
echo "relay C launched (pid=$!)" echo "relay C launched (pid=$!)"
EOF EOF
@@ -59,7 +106,10 @@ done
# 2. 启动本地 Peer-A # 2. 启动本地 Peer-A
echo ">>> 2. 启动本地 Peer-A..." echo ">>> 2. 启动本地 Peer-A..."
nohup go run ./cmd/kcppeer/ \ PEER_A_CMD_FIFO="/tmp/peera_commands_$$"
rm -f "$PEER_A_CMD_FIFO"
mkfifo "$PEER_A_CMD_FIFO"
nohup "$KCP_PEER_BIN" \
-id peer-a \ -id peer-a \
-server 172.21.32.15:10909 \ -server 172.21.32.15:10909 \
-relay-via 106.55.173.235:10909 \ -relay-via 106.55.173.235:10909 \
@@ -67,13 +117,14 @@ nohup go run ./cmd/kcppeer/ \
-latency-log logs/a-latency.jsonl \ -latency-log logs/a-latency.jsonl \
-kcp-ts-debug-log logs/a-kcp-ts.jsonl \ -kcp-ts-debug-log logs/a-kcp-ts.jsonl \
-kcp-session-stats-log logs/a-kcp-stats.jsonl \ -kcp-session-stats-log logs/a-kcp-stats.jsonl \
-interactive=false > logs/peera_console.log 2>&1 & < "$PEER_A_CMD_FIFO" > logs/peera_console.log 2>&1 &
PEER_A_PID=$! PEER_A_PID=$!
exec 4>"$PEER_A_CMD_FIFO"
# 等待 peer-a 注册成功 # 等待 peer-a 注册成功
echo " 等待 Peer-A 注册..." echo " 等待 Peer-A 注册..."
for i in $(seq 1 30); do for i in $(seq 1 30); do
if grep -q "opened KCP session as peer-a" logs/peera_console.log 2>/dev/null; then if grep -Eq "opened KCP session as peer-a|connected to .* as peer-a( \\(KCP\\))?" logs/peera_console.log 2>/dev/null; then
echo " Peer-A 就绪 (${i}s)" echo " Peer-A 就绪 (${i}s)"
break break
fi fi
@@ -85,31 +136,42 @@ done
# 3. 在远端后台启动 peer-b 整个发送流程,不依赖长 SSH 连接 # 3. 在远端后台启动 peer-b 整个发送流程,不依赖长 SSH 连接
echo ">>> 3. 启动远端 Peer-B 并执行 50 轮打流测试..." echo ">>> 3. 启动远端 Peer-B 并执行 50 轮打流测试..."
ssh omni-peer "cd /home/boll/LMJWork/OmniSocketGo && rm -rf logs && mkdir -p logs inbox/b" ssh omni-peer "cd /home/boll/LMJWork/OmniSocketGo && rm -rf logs inbox/b && mkdir -p logs inbox/b"
PEERB_DONE_FLAG="/tmp/peerb_batch_done" PEERB_DONE_FLAG="/tmp/peerb_batch_done"
PEERB_BATCH_SCRIPT="/tmp/peerb_batch.sh" PEERB_BATCH_SCRIPT="/tmp/peerb_batch.sh"
# 把整个发送脚本写到远端setsid 后台执行 # 把整个发送脚本写到远端setsid 后台执行
ssh omni-peer bash -s <<'DEPLOY_SCRIPT' ssh omni-peer bash -s <<'DEPLOY_SCRIPT'
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
DONE_FLAG="/tmp/peerb_batch_done" DONE_FLAG="/tmp/peerb_batch_done"
BATCH_SCRIPT="/tmp/peerb_batch.sh" BATCH_SCRIPT="/tmp/peerb_batch.sh"
rm -f "$DONE_FLAG" rm -f "$DONE_FLAG"
cat > "$BATCH_SCRIPT" <<'INNER_EOF' cat > "$BATCH_SCRIPT" <<'INNER_EOF'
#!/bin/bash #!/bin/bash
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
cd /home/boll/LMJWork/OmniSocketGo cd /home/boll/LMJWork/OmniSocketGo
CMD_FIFO=/tmp/peerb_commands CMD_FIFO=/tmp/peerb_commands
DONE_FLAG="/tmp/peerb_batch_done" DONE_FLAG="/tmp/peerb_batch_done"
STATUS="error"
rm -f "$CMD_FIFO" "$DONE_FLAG" rm -f "$CMD_FIFO" "$DONE_FLAG"
mkfifo "$CMD_FIFO" mkfifo "$CMD_FIFO"
finish() {
local status_to_write="$STATUS"
rm -f "$CMD_FIFO"
printf '%s\n' "$status_to_write" > "$DONE_FLAG"
}
trap finish EXIT
if [ ! -x ./bin/kcppeer ]; then
echo "ERROR: 缺少 ./bin/kcppeer" > logs/peerb_console.log
exit 1
fi
# 启动 peer-b # 启动 peer-b
go run ./cmd/kcppeer/ \ ./bin/kcppeer \
-id peer-b \ -id peer-b \
-server 81.70.156.140:10909 \ -server 81.70.156.140:10909 \
-inbox-dir inbox/b \ -inbox-dir inbox/b \
@@ -123,7 +185,7 @@ exec 3>"$CMD_FIFO"
# 等 peer-b 就绪 # 等 peer-b 就绪
for i in $(seq 1 60); do for i in $(seq 1 60); do
if grep -q "opened KCP session as peer-b" logs/peerb_console.log 2>/dev/null; then if grep -Eq "opened KCP session as peer-b|connected to .* as peer-b( \\(KCP\\))?" logs/peerb_console.log 2>/dev/null; then
break break
fi fi
sleep 1 sleep 1
@@ -138,13 +200,31 @@ for i in $(seq 1 50); do
done done
sleep 5 sleep 5
echo "quit" >&3 echo "quit" >&3 || true
exec 3>&- exec 3>&-
rm -f "$CMD_FIFO"
peer_b_exited=0
for i in $(seq 1 15); do
if ! kill -0 $PEER_B_PID 2>/dev/null; then
peer_b_exited=1
break
fi
sleep 1
done
if [ "$peer_b_exited" -eq 0 ]; then
kill $PEER_B_PID 2>/dev/null || true
sleep 1
fi
if kill -0 $PEER_B_PID 2>/dev/null; then
kill -9 $PEER_B_PID 2>/dev/null || true
fi
wait $PEER_B_PID 2>/dev/null || true wait $PEER_B_PID 2>/dev/null || true
# 写完成标记 # 写完成标记
echo "done" > "$DONE_FLAG" STATUS="done"
INNER_EOF INNER_EOF
chmod +x "$BATCH_SCRIPT" chmod +x "$BATCH_SCRIPT"
@@ -154,37 +234,62 @@ DEPLOY_SCRIPT
# 本地轮询等待远端完成(短 SSH 连接,不怕断开) # 本地轮询等待远端完成(短 SSH 连接,不怕断开)
echo " 等待 peer-b 发送完成(预计 ~110 秒)..." echo " 等待 peer-b 发送完成(预计 ~110 秒)..."
for i in $(seq 1 180); do for i in $(seq 1 "$PEERB_MAX_POLLS"); do
if ssh omni-peer "test -f /tmp/peerb_batch_done" 2>/dev/null; then PEERB_STATUS=$(ssh omni-peer "cat /tmp/peerb_batch_done 2>/dev/null || true")
echo " peer-b 发送完成 (${i}s)" if [ "$PEERB_STATUS" = "done" ]; then
ELAPSED_SEC=$(( (i - 1) * PEERB_POLL_INTERVAL_SEC ))
echo " peer-b 发送完成(约 ${ELAPSED_SEC}s"
break break
fi fi
if [ "$i" -eq 180 ]; then if [ "$PEERB_STATUS" = "error" ]; then
echo " ERROR: peer-b 180s 内未完成" echo " ERROR: peer-b 后台任务启动失败,请检查远端 logs/peerb_console.log"
exit 1
fi
if [ "$i" -eq "$PEERB_MAX_POLLS" ]; then
echo " ERROR: peer-b $((PEERB_MAX_POLLS * PEERB_POLL_INTERVAL_SEC))s 内未完成"
exit 1
fi fi
# 每 5 秒查一次,减少 SSH 连接频率 # 每 5 秒查一次,减少 SSH 连接频率
sleep 5 sleep "$PEERB_POLL_INTERVAL_SEC"
done done
# 4. 清理 # 4. 清理
echo ">>> 4. 清理所有进程..." echo ">>> 4. 清理所有进程..."
kill $PEER_A_PID 2>/dev/null || true sleep 2
ssh bj-txy "pkill -f kcpserver || true; pkill -f 'cmd/kcpserver' || true" echo "quit" >&4 || true
ssh sz-txy "pkill -f kcpserver || true; pkill -f 'cmd/kcpserver' || true" exec 4>&-
for i in $(seq 1 "$PEER_A_EXIT_WAIT_SEC"); do
if ! kill -0 "$PEER_A_PID" 2>/dev/null; then
break
fi
sleep 1
done
if kill -0 "$PEER_A_PID" 2>/dev/null; then
kill "$PEER_A_PID" 2>/dev/null || true
fi
wait "$PEER_A_PID" 2>/dev/null || true
rm -f "$PEER_A_CMD_FIFO"
ssh bj-txy "pkill -f kcpserver || true; pkill -f 'bin/kcpserver' || true"
ssh sz-txy "pkill -f kcpserver || true; pkill -f 'bin/kcpserver' || true"
# 获取当前时间戳,格式为 YYYYMMDD_HHMMSS # 获取当前时间戳,格式为 YYYYMMDD_HHMMSS
TIMESTAMP=$(date +"%Y%m%d_%H%M%S") TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
OUTPUT_DIR="$OUTPUT_ROOT/$TIMESTAMP"
# 5. 拉取数据 & 生成报告 # 5. 拉取数据 & 生成报告
echo ">>> 5. 拉取数据并生成汇总报告..." echo ">>> 5. 拉取数据并生成汇总报告..."
mkdir -p ./BDAClogs/$TIMESTAMP mkdir -p "$OUTPUT_DIR"
scp -o ServerAliveInterval=15 -P 10022 boll@175.178.116.187:/home/boll/LMJWork/OmniSocketGo/logs/b-latency.jsonl ./logs/b-latency.jsonl scp -o ServerAliveInterval=15 -P 10022 boll@175.178.116.187:/home/boll/LMJWork/OmniSocketGo/logs/b-latency.jsonl "$LOCAL_REPO_DIR/logs/b-latency.jsonl" || exit 1
mv ./logs/a-latency.jsonl ./BDAClogs/$TIMESTAMP/a-latency.jsonl (cd "$LOCAL_REPO_DIR/go" && go run ./cmd/latencysummary \
mv ./logs/b-latency.jsonl ./BDAClogs/$TIMESTAMP/b-latency.jsonl -input /home/limingjie/LMJ_Work/RobotCompetition/OmniSocketGo/logs/a-latency.jsonl \
-input /home/limingjie/LMJ_Work/RobotCompetition/OmniSocketGo/logs/b-latency.jsonl \
go run ./cmd/latencysummary \ -output /home/limingjie/LMJ_Work/RobotCompetition/OmniSocketGo/logs/latency-summary.jsonl) || exit 1
-input ./BDAClogs/$TIMESTAMP/a-latency.jsonl \ cd "$LOCAL_REPO_DIR/.." || exit 1
-input ./BDAClogs/$TIMESTAMP/b-latency.jsonl \ mv "$LOCAL_REPO_DIR/logs/a-latency.jsonl" "$OUTPUT_DIR/a-latency.jsonl" || exit 1
-output ./BDAClogs/$TIMESTAMP/latency-summary.jsonl mv "$LOCAL_REPO_DIR/logs/b-latency.jsonl" "$OUTPUT_DIR/b-latency.jsonl" || exit 1
mv "$LOCAL_REPO_DIR/logs/latency-summary.jsonl" "$OUTPUT_DIR/latency-summary.jsonl" || exit 1
if [ -f "$LOCAL_REPO_DIR/logs/latency-summary.html" ]; then
mv "$LOCAL_REPO_DIR/logs/latency-summary.html" "$OUTPUT_DIR/latency-summary.html" || exit 1
fi
echo "=== 测试完成!===" echo "=== 测试完成!==="

View File

@@ -1,21 +1,63 @@
#!/bin/bash #!/bin/bash
LOCAL_REPO_DIR="/home/limingjie/LMJ_Work/RobotCompetition/OmniSocketGo"
KCP_PEER_BIN="./bin/kcppeer"
OUTPUT_ROOT="/home/limingjie/LMJ_Work/RobotCompetition/KCPData/BCAlogs/"
PEERB_POLL_INTERVAL_SEC=5
PEERB_MAX_POLLS=180
PEER_A_EXIT_WAIT_SEC=5
require_local_binary() {
if [ ! -x "$1" ]; then
echo "ERROR: 缺少可执行文件 $1"
exit 1
fi
}
cleanup_remote_peerb() {
ssh omni-peer bash -s <<'EOF'
pids=$(ps -eo pid=,args= | awk '/[b]in\/kcppeer -id peer-b/ {print $1}')
if [ -n "$pids" ]; then
kill $pids 2>/dev/null || true
fi
pids=$(ps -eo pid=,args= | awk '/\/tmp\/peerb_batch\.sh/ {print $1}')
if [ -n "$pids" ]; then
kill $pids 2>/dev/null || true
fi
rm -f /tmp/peerb_batch_done /tmp/peerb_batch.sh /tmp/peerb_commands
EOF
}
echo "=== 开始自动化测试 ===" echo "=== 开始自动化测试 ==="
cd /home/limingjie/LMJ_Work/OmniSocketGo cd "$LOCAL_REPO_DIR"
require_local_binary "$KCP_PEER_BIN"
echo ">>> 0. 清理上次残留进程..."
pkill -f 'bin/kcppeer -id peer-a' 2>/dev/null || true
cleanup_remote_peerb || exit 1
rm -rf logs rm -rf logs
rm -rf inbox/a
mkdir -p logs inbox/a mkdir -p logs inbox/a
# 1. 清理残留 & 启动 Server D # 1. 清理残留 & 启动 Server D
echo ">>> 1. 启动 Server D " echo ">>> 1. 启动 Server D..."
ssh bj-txy bash -s <<'EOF' ssh bj-txy bash -s <<'EOF'
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
pkill -f kcpserver 2>/dev/null || true pkill -f kcpserver 2>/dev/null || true
pkill -f 'cmd/kcpserver' 2>/dev/null || true pkill -f 'bin/kcpserver' 2>/dev/null || true
sleep 1 sleep 1
cd /home/ubuntu/OmniSocketGo cd /home/ubuntu/OmniSocketGo
setsid go run ./cmd/kcpserver/ -listen 0.0.0.0:10909 > server_console.log 2>&1 </dev/null & rm -rf logs
mkdir -p logs
if [ ! -x ./bin/kcpserver ]; then
echo "ERROR: 缺少 ./bin/kcpserver"
exit 1
fi
setsid ./bin/kcpserver -listen 0.0.0.0:10909 \
-kcp-ts-debug-log logs/d-kcp-ts.jsonl \
-kcp-session-stats-log logs/d-kcp-stats.jsonl > server_console.log 2>&1 </dev/null &
echo "server D launched (pid=$!)" echo "server D launched (pid=$!)"
EOF EOF
@@ -35,18 +77,24 @@ done
# 2. 启动本地 Peer-A # 2. 启动本地 Peer-A
echo ">>> 2. 启动本地 Peer-A..." echo ">>> 2. 启动本地 Peer-A..."
nohup go run ./cmd/kcppeer/ \ PEER_A_CMD_FIFO="/tmp/peera_commands_$$"
rm -f "$PEER_A_CMD_FIFO"
mkfifo "$PEER_A_CMD_FIFO"
nohup "$KCP_PEER_BIN" \
-id peer-a \ -id peer-a \
-server 81.70.156.140:10909 \ -server 81.70.156.140:10909 \
-inbox-dir inbox/a \ -inbox-dir inbox/a \
-latency-log logs/a-latency.jsonl \ -latency-log logs/a-latency.jsonl \
-interactive=false > logs/peera_console.log 2>&1 & -kcp-ts-debug-log logs/a-kcp-ts.jsonl \
-kcp-session-stats-log logs/a-kcp-stats.jsonl \
< "$PEER_A_CMD_FIFO" > logs/peera_console.log 2>&1 &
PEER_A_PID=$! PEER_A_PID=$!
exec 4>"$PEER_A_CMD_FIFO"
# 等待 peer-a 注册成功 # 等待 peer-a 注册成功
echo " 等待 Peer-A 注册..." echo " 等待 Peer-A 注册..."
for i in $(seq 1 30); do for i in $(seq 1 30); do
if grep -q "opened KCP session as peer-a" logs/peera_console.log 2>/dev/null; then if grep -Eq "opened KCP session as peer-a|connected to .* as peer-a( \\(KCP\\))?" logs/peera_console.log 2>/dev/null; then
echo " Peer-A 就绪 (${i}s)" echo " Peer-A 就绪 (${i}s)"
break break
fi fi
@@ -58,22 +106,19 @@ done
# 3. 在远端后台启动 peer-b 整个发送流程,不依赖长 SSH 连接 # 3. 在远端后台启动 peer-b 整个发送流程,不依赖长 SSH 连接
echo ">>> 3. 启动远端 Peer-B 并执行 50 轮打流测试..." echo ">>> 3. 启动远端 Peer-B 并执行 50 轮打流测试..."
ssh omni-peer "cd /home/boll/LMJWork/OmniSocketGo && rm -rf logs && mkdir -p logs inbox/b" ssh omni-peer "cd /home/boll/LMJWork/OmniSocketGo && rm -rf logs inbox/b && mkdir -p logs inbox/b"
PEERB_DONE_FLAG="/tmp/peerb_batch_done" PEERB_DONE_FLAG="/tmp/peerb_batch_done"
PEERB_BATCH_SCRIPT="/tmp/peerb_batch.sh" PEERB_BATCH_SCRIPT="/tmp/peerb_batch.sh"
# 把整个发送脚本写到远端setsid 后台执行 # 把整个发送脚本写到远端setsid 后台执行
ssh omni-peer bash -s <<'DEPLOY_SCRIPT' ssh omni-peer bash -s <<'DEPLOY_SCRIPT'
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
DONE_FLAG="/tmp/peerb_batch_done" DONE_FLAG="/tmp/peerb_batch_done"
BATCH_SCRIPT="/tmp/peerb_batch.sh" BATCH_SCRIPT="/tmp/peerb_batch.sh"
rm -f "$DONE_FLAG" rm -f "$DONE_FLAG"
cat > "$BATCH_SCRIPT" <<'INNER_EOF' cat > "$BATCH_SCRIPT" <<'INNER_EOF'
#!/bin/bash #!/bin/bash
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
cd /home/boll/LMJWork/OmniSocketGo cd /home/boll/LMJWork/OmniSocketGo
CMD_FIFO=/tmp/peerb_commands CMD_FIFO=/tmp/peerb_commands
@@ -81,12 +126,20 @@ DONE_FLAG="/tmp/peerb_batch_done"
rm -f "$CMD_FIFO" "$DONE_FLAG" rm -f "$CMD_FIFO" "$DONE_FLAG"
mkfifo "$CMD_FIFO" mkfifo "$CMD_FIFO"
if [ ! -x ./bin/kcppeer ]; then
echo "ERROR: 缺少 ./bin/kcppeer" > logs/peerb_console.log
echo "error" > "$DONE_FLAG"
exit 1
fi
# 启动 peer-b # 启动 peer-b
go run ./cmd/kcppeer/ \ ./bin/kcppeer \
-id peer-b \ -id peer-b \
-server 81.70.156.140:10909 \ -server 81.70.156.140:10909 \
-inbox-dir inbox/b \ -inbox-dir inbox/b \
-latency-log logs/b-latency.jsonl \ -latency-log logs/b-latency.jsonl \
-kcp-ts-debug-log logs/b-kcp-ts.jsonl \
-kcp-session-stats-log logs/b-kcp-stats.jsonl \
< "$CMD_FIFO" > logs/peerb_console.log 2>&1 & < "$CMD_FIFO" > logs/peerb_console.log 2>&1 &
PEER_B_PID=$! PEER_B_PID=$!
@@ -94,7 +147,7 @@ exec 3>"$CMD_FIFO"
# 等 peer-b 就绪 # 等 peer-b 就绪
for i in $(seq 1 60); do for i in $(seq 1 60); do
if grep -q "opened KCP session as peer-b" logs/peerb_console.log 2>/dev/null; then if grep -Eq "opened KCP session as peer-b|connected to .* as peer-b( \\(KCP\\))?" logs/peerb_console.log 2>/dev/null; then
break break
fi fi
sleep 1 sleep 1
@@ -112,6 +165,25 @@ sleep 5
echo "quit" >&3 echo "quit" >&3
exec 3>&- exec 3>&-
rm -f "$CMD_FIFO" rm -f "$CMD_FIFO"
peer_b_exited=0
for i in $(seq 1 15); do
if ! kill -0 $PEER_B_PID 2>/dev/null; then
peer_b_exited=1
break
fi
sleep 1
done
if [ "$peer_b_exited" -eq 0 ]; then
kill $PEER_B_PID 2>/dev/null || true
sleep 1
fi
if kill -0 $PEER_B_PID 2>/dev/null; then
kill -9 $PEER_B_PID 2>/dev/null || true
fi
wait $PEER_B_PID 2>/dev/null || true wait $PEER_B_PID 2>/dev/null || true
# 写完成标记 # 写完成标记
@@ -125,37 +197,62 @@ DEPLOY_SCRIPT
# 本地轮询等待远端完成(短 SSH 连接,不怕断开) # 本地轮询等待远端完成(短 SSH 连接,不怕断开)
echo " 等待 peer-b 发送完成(预计 ~110 秒)..." echo " 等待 peer-b 发送完成(预计 ~110 秒)..."
for i in $(seq 1 180); do for i in $(seq 1 "$PEERB_MAX_POLLS"); do
if ssh omni-peer "test -f /tmp/peerb_batch_done" 2>/dev/null; then PEERB_STATUS=$(ssh omni-peer "cat /tmp/peerb_batch_done 2>/dev/null || true")
echo " peer-b 发送完成 (${i}s)" if [ "$PEERB_STATUS" = "done" ]; then
ELAPSED_SEC=$(( (i - 1) * PEERB_POLL_INTERVAL_SEC ))
echo " peer-b 发送完成(约 ${ELAPSED_SEC}s"
break break
fi fi
if [ "$i" -eq 180 ]; then if [ "$PEERB_STATUS" = "error" ]; then
echo " ERROR: peer-b 180s 内未完成" echo " ERROR: peer-b 后台任务启动失败,请检查远端 logs/peerb_console.log"
exit 1
fi fi
# 每 5 秒查一次,减少 SSH 连接频率 if [ "$i" -eq "$PEERB_MAX_POLLS" ]; then
sleep 5 echo " ERROR: peer-b $((PEERB_MAX_POLLS * PEERB_POLL_INTERVAL_SEC))s 内未完成"
exit 1
fi
sleep "$PEERB_POLL_INTERVAL_SEC"
done done
# 4. 清理 # 4. 清理
echo ">>> 4. 清理所有进程..." echo ">>> 4. 清理所有进程..."
kill $PEER_A_PID 2>/dev/null || true sleep 2
ssh bj-txy "pkill -f kcpserver || true; pkill -f 'cmd/kcpserver' || true" echo "quit" >&4 || true
ssh sz-txy "pkill -f kcpserver || true; pkill -f 'cmd/kcpserver' || true" exec 4>&-
for i in $(seq 1 "$PEER_A_EXIT_WAIT_SEC"); do
if ! kill -0 "$PEER_A_PID" 2>/dev/null; then
break
fi
sleep 1
done
if kill -0 "$PEER_A_PID" 2>/dev/null; then
kill "$PEER_A_PID" 2>/dev/null || true
fi
wait "$PEER_A_PID" 2>/dev/null || true
rm -f "$PEER_A_CMD_FIFO"
ssh bj-txy "pkill -f kcpserver || true; pkill -f 'bin/kcpserver' || true"
# 获取当前时间戳,格式为 YYYYMMDD_HHMMSS # 获取当前时间戳,格式为 YYYYMMDD_HHMMSS
TIMESTAMP=$(date +"%Y%m%d_%H%M%S") TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
OUTPUT_DIR="$OUTPUT_ROOT/$TIMESTAMP"
# 5. 拉取数据 & 生成报告 # 5. 拉取数据 & 生成报告
echo ">>> 5. 拉取数据并生成汇总报告..." echo ">>> 5. 拉取数据并生成汇总报告..."
mkdir -p ./BCAlogs/$TIMESTAMP mkdir -p "$OUTPUT_DIR"
scp -o ServerAliveInterval=15 -P 10022 boll@175.178.116.187:/home/boll/LMJWork/OmniSocketGo/logs/b-latency.jsonl ./logs/b-latency.jsonl scp -o ServerAliveInterval=15 -P 10022 boll@175.178.116.187:/home/boll/LMJWork/OmniSocketGo/logs/b-latency.jsonl "$LOCAL_REPO_DIR/logs/b-latency.jsonl" || exit 1
mv ./logs/a-latency.jsonl ./BCAlogs/$TIMESTAMP/a-latency.jsonl (cd "$LOCAL_REPO_DIR/go" && go run ./cmd/latencysummary \
mv ./logs/b-latency.jsonl ./BCAlogs/$TIMESTAMP/b-latency.jsonl -input "$LOCAL_REPO_DIR/logs/a-latency.jsonl" \
-input "$LOCAL_REPO_DIR/logs/b-latency.jsonl" \
-output "$LOCAL_REPO_DIR/logs/latency-summary.jsonl") || exit 1
go run ./cmd/latencysummary \ cd "$LOCAL_REPO_DIR/.." || exit 1
-input ./BCAlogs/$TIMESTAMP/a-latency.jsonl \ mv "$LOCAL_REPO_DIR/logs/a-latency.jsonl" "$OUTPUT_DIR/a-latency.jsonl" || exit 1
-input ./BCAlogs/$TIMESTAMP/b-latency.jsonl \ mv "$LOCAL_REPO_DIR/logs/b-latency.jsonl" "$OUTPUT_DIR/b-latency.jsonl" || exit 1
-output ./BCAlogs/$TIMESTAMP/latency-summary.jsonl mv "$LOCAL_REPO_DIR/logs/latency-summary.jsonl" "$OUTPUT_DIR/latency-summary.jsonl" || exit 1
if [ -f "$LOCAL_REPO_DIR/logs/latency-summary.html" ]; then
mv "$LOCAL_REPO_DIR/logs/latency-summary.html" "$OUTPUT_DIR/latency-summary.html" || exit 1
fi
echo "=== 测试完成!===" echo "=== 测试完成!==="