fix(e2e): heartbeat resource-sampled docker lanes · openclaw/openclaw@fbde572
vincentkoc
·
2026-05-31
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -64,12 +64,13 @@ DOCKER_COMMAND_TIMEOUT="$DOCKER_RUN_TIMEOUT" docker_e2e_docker_run_cmd run --nam
|
64 | 64 | >"$RUN_LOG" 2>&1 & |
65 | 65 | docker_pid="$!" |
66 | 66 | |
67 | | -while kill -0 "$docker_pid" 2>/dev/null; do |
68 | | -if docker_e2e_docker_cmd inspect "$CONTAINER_NAME" >/dev/null 2>&1; then |
69 | | - docker_e2e_docker_cmd stats --no-stream --format '{{json .}}' "$CONTAINER_NAME" >>"$STATS_LOG" 2>/dev/null || true |
70 | | -fi |
71 | | - sleep 2 |
72 | | -done |
| 67 | +docker_e2e_sample_stats_until_exit \ |
| 68 | +"$CONTAINER_NAME" \ |
| 69 | +"$docker_pid" \ |
| 70 | +"$STATS_LOG" \ |
| 71 | +"$RUN_LOG" \ |
| 72 | +"Kitchen-sink plugin Docker E2E" \ |
| 73 | +"${OPENCLAW_DOCKER_E2E_STATS_HEARTBEAT_SECONDS:-30}" |
73 | 74 | |
74 | 75 | set +e |
75 | 76 | wait "$docker_pid" |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -47,12 +47,13 @@ DOCKER_COMMAND_TIMEOUT="$DOCKER_RUN_TIMEOUT" docker_e2e_docker_run_cmd run --nam
|
47 | 47 | node scripts/e2e/kitchen-sink-rpc-walk.mjs >"$RUN_LOG" 2>&1 & |
48 | 48 | docker_pid="$!" |
49 | 49 | |
50 | | -while kill -0 "$docker_pid" 2>/dev/null; do |
51 | | -if docker_e2e_docker_cmd inspect "$CONTAINER_NAME" >/dev/null 2>&1; then |
52 | | - docker_e2e_docker_cmd stats --no-stream --format '{{json .}}' "$CONTAINER_NAME" >>"$STATS_LOG" 2>/dev/null || true |
53 | | -fi |
54 | | - sleep 2 |
55 | | -done |
| 50 | +docker_e2e_sample_stats_until_exit \ |
| 51 | +"$CONTAINER_NAME" \ |
| 52 | +"$docker_pid" \ |
| 53 | +"$STATS_LOG" \ |
| 54 | +"$RUN_LOG" \ |
| 55 | +"Kitchen-sink RPC Docker E2E" \ |
| 56 | +"${OPENCLAW_DOCKER_E2E_STATS_HEARTBEAT_SECONDS:-30}" |
56 | 57 | |
57 | 58 | set +e |
58 | 59 | wait "$docker_pid" |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -30,12 +30,13 @@ DOCKER_COMMAND_TIMEOUT="$DOCKER_RUN_TIMEOUT" docker_e2e_docker_run_cmd run --nam
|
30 | 30 | "$IMAGE_NAME" bash scripts/e2e/lib/onboard/scenario.sh >"$RUN_LOG" 2>&1 & |
31 | 31 | docker_pid="$!" |
32 | 32 | |
33 | | -while kill -0 "$docker_pid" 2>/dev/null; do |
34 | | -if docker_e2e_docker_cmd inspect "$CONTAINER_NAME" >/dev/null 2>&1; then |
35 | | - docker_e2e_docker_cmd stats --no-stream --format '{{json .}}' "$CONTAINER_NAME" >>"$STATS_LOG" 2>/dev/null || true |
36 | | -fi |
37 | | - sleep 2 |
38 | | -done |
| 33 | +docker_e2e_sample_stats_until_exit \ |
| 34 | +"$CONTAINER_NAME" \ |
| 35 | +"$docker_pid" \ |
| 36 | +"$STATS_LOG" \ |
| 37 | +"$RUN_LOG" \ |
| 38 | +"Onboarding Docker E2E" \ |
| 39 | +"${OPENCLAW_DOCKER_E2E_STATS_HEARTBEAT_SECONDS:-30}" |
39 | 40 | |
40 | 41 | set +e |
41 | 42 | wait "$docker_pid" |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -117,3 +117,37 @@ docker_e2e_test_state_function_b64() {
|
117 | 117 | base64 | |
118 | 118 | tr -d '\n' |
119 | 119 | } |
| 120 | + |
| 121 | +docker_e2e_sample_stats_until_exit() { |
| 122 | +local container_name="${1:?missing container name}" |
| 123 | +local docker_pid="${2:?missing docker pid}" |
| 124 | +local stats_log="${3:?missing stats log}" |
| 125 | +local run_log="${4:?missing run log}" |
| 126 | +local label="${5:-Docker E2E}" |
| 127 | +local heartbeat_seconds="${6:-30}" |
| 128 | +local started_at="$SECONDS" |
| 129 | +local last_heartbeat="$SECONDS" |
| 130 | + |
| 131 | +if ! [[ "$heartbeat_seconds" =~ ^[0-9]+$ ]] || [ "$heartbeat_seconds" -lt 1 ]; then |
| 132 | + heartbeat_seconds="30" |
| 133 | +fi |
| 134 | + |
| 135 | +while kill -0 "$docker_pid" 2>/dev/null; do |
| 136 | +if docker_e2e_docker_cmd inspect "$container_name" >/dev/null 2>&1; then |
| 137 | + docker_e2e_docker_cmd stats --no-stream --format '{{json .}}' "$container_name" >>"$stats_log" 2>/dev/null || true |
| 138 | +fi |
| 139 | + |
| 140 | +if ((SECONDS - last_heartbeat >= heartbeat_seconds)); then |
| 141 | +local elapsed_seconds=$((SECONDS - started_at)) |
| 142 | +local log_bytes="0" |
| 143 | +if [ -f "$run_log" ]; then |
| 144 | + log_bytes="$(wc -c <"$run_log" 2>/dev/null || echo 0)" |
| 145 | + log_bytes="${log_bytes//[[:space:]]/}" |
| 146 | +fi |
| 147 | +echo "$label still running (${elapsed_seconds}s elapsed, ${log_bytes} log bytes captured)..." |
| 148 | + last_heartbeat="$SECONDS" |
| 149 | +fi |
| 150 | + |
| 151 | + sleep 2 |
| 152 | +done |
| 153 | +} |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -1359,7 +1359,9 @@ test -f "$TMPDIR/docker-cmd-seen"
|
1359 | 1359 | ); |
1360 | 1360 | expect(runner).toContain('-e "OPENCLAW_E2E_COMMAND_TIMEOUT=$COMMAND_TIMEOUT"'); |
1361 | 1361 | expect(runner).toContain('--name "$CONTAINER_NAME"'); |
1362 | | -expect(runner).toContain("docker_e2e_docker_cmd stats --no-stream"); |
| 1362 | +expect(runner).toContain("docker_e2e_sample_stats_until_exit \\"); |
| 1363 | +expect(runner).toContain('"$STATS_LOG" \\'); |
| 1364 | +expect(runner).toContain('"$RUN_LOG" \\'); |
1363 | 1365 | expect(runner).toContain("assert-resource-ceiling.mjs"); |
1364 | 1366 | expect(runner).not.toContain("docker_e2e_run_with_harness -t"); |
1365 | 1367 | }); |
@@ -1379,8 +1381,9 @@ test -f "$TMPDIR/docker-cmd-seen"
|
1379 | 1381 | 'DOCKER_COMMAND_TIMEOUT="$DOCKER_RUN_TIMEOUT" docker_e2e_docker_run_cmd run --name "$CONTAINER_NAME"', |
1380 | 1382 | ); |
1381 | 1383 | expect(runner, path).toContain('DOCKER_RUN_TIMEOUT="${OPENCLAW_'); |
1382 | | -expect(runner, path).toContain('docker_e2e_docker_cmd inspect "$CONTAINER_NAME"'); |
1383 | | -expect(runner, path).toContain("docker_e2e_docker_cmd stats --no-stream"); |
| 1384 | +expect(runner, path).toContain("docker_e2e_sample_stats_until_exit \\"); |
| 1385 | +expect(runner, path).toContain('"$STATS_LOG" \\'); |
| 1386 | +expect(runner, path).toContain('"$RUN_LOG" \\'); |
1384 | 1387 | expect(runner, path).not.toMatch(/(^|\n)docker run --name "\$CONTAINER_NAME"/u); |
1385 | 1388 | expect(runner, path).not.toMatch(/(^|\n)docker (?:inspect|stats) /u); |
1386 | 1389 | expect(runner, path).toMatch(/cleanup\(\) \{[\s\S]*rm -f "\$RUN_LOG" "\$STATS_LOG"/u); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。