45 lines
1.5 KiB
Bash
Executable File
45 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# 运行状态检测: 容器 + ARI REST + PJSIP trunk 探活(qualify) + 活动呼叫数
|
|
set -uo pipefail
|
|
USER="outbound"; SECRET="ari_mock_7c3f9e1b5a2d4806"
|
|
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)" ]; }
|
|
|
|
echo "== 容器状态"
|
|
docker ps --filter "name=ast" --format "{{.Names}}\t{{.Status}}"
|
|
|
|
echo "== ARI REST"
|
|
for n in "ast1 8088" "ast2 8089"; do
|
|
set -- $n
|
|
if running "$1"; then
|
|
c=$(curl -s -o /dev/null -w "%{http_code}" -u "$USER:$SECRET" --max-time 3 "http://127.0.0.1:$2/ari/asterisk/info")
|
|
[ "$c" = 200 ] && pass "$1 ARI /asterisk/info ($c)" || faill "$1 ARI /asterisk/info ($c)"
|
|
else
|
|
echo "SKIP $1 (未运行)"
|
|
fi
|
|
done
|
|
|
|
echo "== PJSIP trunk 探活 (OPTIONS qualify)"
|
|
for c in ast1 ast2; do
|
|
if running "$c"; then
|
|
out=$(docker exec "$c" asterisk -rx "pjsip show contacts" 2>/dev/null | grep mock-provider) || true
|
|
if echo "$out" | grep -q "Avail"; then
|
|
pass "$c trunk mock-provider Avail"
|
|
else
|
|
faill "$c trunk mock-provider (contact: ${out:-none})"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo "== 活动呼叫 (ARI channels)"
|
|
if running ast1; then
|
|
n=$(curl -s -u "$USER:$SECRET" --max-time 3 http://127.0.0.1:8088/ari/channels | python3 -c 'import json,sys; print(len(json.load(sys.stdin)))' 2>/dev/null)
|
|
[ -n "$n" ] && pass "ast1 active channels=$n" || faill "ast1 active channels"
|
|
fi
|
|
|
|
echo
|
|
echo "result: ok=$ok fail=$fail"
|
|
[ $fail -eq 0 ]
|