#!/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 ]