Files

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 ]