31
scripts/docker/bench.sh
Executable file
31
scripts/docker/bench.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# shellcheck source=../lib/common.sh
|
||||
source "$(dirname "$0")/../lib/common.sh"
|
||||
# shellcheck source=../lib/docker.sh
|
||||
source "$(dirname "$0")/../lib/docker.sh"
|
||||
# shellcheck source=../lib/bench.sh
|
||||
source "$(dirname "$0")/../lib/bench.sh"
|
||||
|
||||
NAME="${1:-$LM_CONTAINER}"
|
||||
BASE="${2:-$LM_URL}"
|
||||
require_container "$NAME"
|
||||
|
||||
echo "=== Benchmark container: $NAME ==="
|
||||
echo "URL: $BASE"
|
||||
echo
|
||||
|
||||
echo "=== docker stats (trước) ==="
|
||||
"${DOCKER[@]}" stats --no-stream --format \
|
||||
'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}' "$NAME"
|
||||
print_container_limits "$NAME"
|
||||
echo
|
||||
|
||||
echo "=== HTTP latency ==="
|
||||
bench_http_suite "$BASE"
|
||||
|
||||
echo
|
||||
echo "=== docker stats (sau) ==="
|
||||
"${DOCKER[@]}" stats --no-stream --format \
|
||||
'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}' "$NAME"
|
||||
11
scripts/docker/down.sh
Executable file
11
scripts/docker/down.sh
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# shellcheck source=../lib/common.sh
|
||||
source "$(dirname "$0")/../lib/common.sh"
|
||||
# shellcheck source=../lib/docker.sh
|
||||
source "$(dirname "$0")/../lib/docker.sh"
|
||||
|
||||
cd "$LM_ROOT"
|
||||
docker_cmd
|
||||
"${DOCKER[@]}" compose down
|
||||
14
scripts/docker/htop.sh
Executable file
14
scripts/docker/htop.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# shellcheck source=../lib/common.sh
|
||||
source "$(dirname "$0")/../lib/common.sh"
|
||||
# shellcheck source=../lib/docker.sh
|
||||
source "$(dirname "$0")/../lib/docker.sh"
|
||||
|
||||
require_container "$LM_CONTAINER"
|
||||
echo "Giới hạn container:"
|
||||
print_container_limits "$LM_CONTAINER"
|
||||
echo
|
||||
echo "htop (q để thoát)..."
|
||||
exec "${DOCKER[@]}" exec -it "$LM_CONTAINER" htop
|
||||
10
scripts/docker/shell.sh
Executable file
10
scripts/docker/shell.sh
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# shellcheck source=../lib/common.sh
|
||||
source "$(dirname "$0")/../lib/common.sh"
|
||||
# shellcheck source=../lib/docker.sh
|
||||
source "$(dirname "$0")/../lib/docker.sh"
|
||||
|
||||
require_container "$LM_CONTAINER"
|
||||
exec "${DOCKER[@]}" exec -it "$LM_CONTAINER" bash
|
||||
29
scripts/docker/stats.sh
Executable file
29
scripts/docker/stats.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# shellcheck source=../lib/common.sh
|
||||
source "$(dirname "$0")/../lib/common.sh"
|
||||
# shellcheck source=../lib/docker.sh
|
||||
source "$(dirname "$0")/../lib/docker.sh"
|
||||
|
||||
NAME="${1:-$LM_CONTAINER}"
|
||||
require_container "$NAME"
|
||||
|
||||
echo "=== docker stats ==="
|
||||
"${DOCKER[@]}" stats --no-stream "$NAME"
|
||||
echo
|
||||
echo "=== limits ==="
|
||||
print_container_limits "$NAME"
|
||||
|
||||
CID="$("${DOCKER[@]}" inspect -f '{{.Id}}' "$NAME")"
|
||||
CG="/sys/fs/cgroup"
|
||||
echo
|
||||
echo "=== cgroup (host) ==="
|
||||
printf 'memory.usage = '
|
||||
cat "$CG/memory/docker/$CID/memory.usage_in_bytes" 2>/dev/null \
|
||||
|| cat "$CG/memory/system.slice/docker-$CID.scope/memory.usage_in_bytes" 2>/dev/null \
|
||||
|| echo "n/a"
|
||||
printf ' bytes\n'
|
||||
echo
|
||||
echo "=== processes ==="
|
||||
"${DOCKER[@]}" top "$NAME"
|
||||
26
scripts/docker/test.sh
Executable file
26
scripts/docker/test.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# shellcheck source=../lib/common.sh
|
||||
source "$(dirname "$0")/../lib/common.sh"
|
||||
|
||||
BASE="${TEST_BASE_URL:-$LM_URL}"
|
||||
export LM_URL="$BASE"
|
||||
|
||||
echo "==> Docker up"
|
||||
"$(dirname "$0")/up.sh"
|
||||
|
||||
echo "==> Đợi server ($BASE)"
|
||||
if ! wait_for_health "$BASE"; then
|
||||
echo "Container không phản hồi tại $BASE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> API smoke"
|
||||
"$LM_SCRIPTS/test/smoke.sh" "$BASE"
|
||||
|
||||
echo "==> pytest"
|
||||
TEST_BASE_URL="$BASE" python3 -m pytest "$LM_ROOT/tests/test_api_integration.py" -q
|
||||
|
||||
echo
|
||||
echo "Docker tests OK."
|
||||
19
scripts/docker/up.sh
Executable file
19
scripts/docker/up.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# shellcheck source=../lib/common.sh
|
||||
source "$(dirname "$0")/../lib/common.sh"
|
||||
# shellcheck source=../lib/docker.sh
|
||||
source "$(dirname "$0")/../lib/docker.sh"
|
||||
|
||||
cd "$LM_ROOT"
|
||||
docker_cmd
|
||||
|
||||
if ! docker info >/dev/null 2>&1 && ! sudo -n docker info >/dev/null 2>&1; then
|
||||
echo "Cần quyền Docker. Thử: sudo $0 hoặc usermod -aG docker \$USER"
|
||||
fi
|
||||
|
||||
"${DOCKER[@]}" compose up --build -d
|
||||
echo "Đã chạy: http://localhost:8080/"
|
||||
echo -n "Giới hạn: "
|
||||
print_container_limits "$LM_CONTAINER"
|
||||
Reference in New Issue
Block a user