54 lines
1.6 KiB
Bash
Executable File
54 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# 运行状态检测: 容器 + ESL 命令 + sofia 网关状态 + 活动呼叫数
|
|
# 注: ESL ACL=rfc1918.auto 不含 loopback → fs_cli 必须 -H <eth0 IP> 走非 loopback 源地址;
|
|
# 且需显式 -P 8021 -p <密码> (fs_cli 默认 localhost+ClueCon)
|
|
set -uo pipefail
|
|
PASS="esl_mock_a95a037399153e9092b653fc"
|
|
ok=0; fail=0
|
|
pass() { echo "PASS $1"; ok=$((ok+1)); }
|
|
faill() { echo "FAIL $1"; fail=$((fail+1)); }
|
|
running() { [ -n "$(docker ps -q -f name=$1)" ]; }
|
|
fsc() { # fsc <容器> <fs_cli 参数...>
|
|
local ip
|
|
ip=$(docker exec "$1" hostname -i 2>/dev/null | awk '{print $1}')
|
|
docker exec "$1" fs_cli -H "$ip" -P 8021 -p "$PASS" "${@:2}" 2>/dev/null
|
|
}
|
|
|
|
echo "== 容器状态"
|
|
docker ps --filter "name=fs" --format "{{.Names}}\t{{.Status}}"
|
|
|
|
echo "== ESL (fs_cli status)"
|
|
for c in fs1 fs2; do
|
|
if running "$c"; then
|
|
out=$(fsc "$c" -x "status" | head -1)
|
|
if echo "$out" | grep -q "^UP"; then
|
|
pass "$c ESL status: ${out:0:60}"
|
|
else
|
|
faill "$c ESL status: ${out:-none}"
|
|
fi
|
|
else
|
|
echo "SKIP $c (未运行)"
|
|
fi
|
|
done
|
|
|
|
echo "== sofia 网关 (mock-trunk)"
|
|
for c in fs1 fs2; do
|
|
if running "$c"; then
|
|
state=$(fsc "$c" -x "sofia status gateway mock-trunk" | awk -F'[:\t ]+' '/^State/{print $2}')
|
|
case "$state" in
|
|
REGED|NOREG) pass "$c gateway mock-trunk State=$state" ;;
|
|
*) faill "$c gateway mock-trunk State=${state:-none}" ;;
|
|
esac
|
|
fi
|
|
done
|
|
|
|
echo "== 活动呼叫"
|
|
if running fs1; then
|
|
n=$(fsc fs1 -x "show calls count" | grep total | awk '{print $1}')
|
|
[ -n "$n" ] && pass "fs1 active calls=$n" || faill "fs1 active calls"
|
|
fi
|
|
|
|
echo
|
|
echo "result: ok=$ok fail=$fail"
|
|
[ $fail -eq 0 ]
|