41 lines
1.3 KiB
Bash
Executable File
41 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
BASE_URL="${1:-https://agent.wooo.work}"
|
|
MINUTES="${2:-60}"
|
|
TRAFFIC_TOKEN="${TRAFFIC_MONITOR_TOKEN:-}"
|
|
API_URL="${BASE_URL%/}/api/traffic?minutes=${MINUTES}"
|
|
curl_cmd=(curl -sS)
|
|
|
|
export BASE_URL MINUTES
|
|
|
|
if [ -n "$TRAFFIC_TOKEN" ]; then
|
|
curl_cmd+=("-H" "x-traffic-token: $TRAFFIC_TOKEN")
|
|
fi
|
|
|
|
PYTHON_INPUT="$(${curl_cmd[@]} "$API_URL")"
|
|
export PYTHON_INPUT
|
|
|
|
python3 - <<'PY'
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
raw = os.environ.get("PYTHON_INPUT", "")
|
|
try:
|
|
payload = json.loads(raw)
|
|
except json.JSONDecodeError:
|
|
print("[A2A External] 無法解析 /api/traffic 回應")
|
|
print(raw[:500])
|
|
sys.exit(1)
|
|
|
|
print(f"[A2A External] base={os.environ.get('BASE_URL')} minutes={os.environ.get('MINUTES')}")
|
|
print(f"total_events={payload.get('total_events')} channel={payload.get('channel_summary', {}).get('external')}")
|
|
print(f"claim_success={payload.get('conversion_rates', {}).get('claim_rate')} submit_success={payload.get('conversion_rates', {}).get('submit_rate')}")
|
|
print("external_funnel:", payload.get("external_funnel"))
|
|
print("top_actors:", payload.get("external_actor_summary"))
|
|
print("recent_events:")
|
|
for row in (payload.get("recent_external_events") or [])[:8]:
|
|
print(f" - {row.get('action')} | {row.get('actorId')} | {row.get('surface')} | {row.get('metadata', {}).get('response_status')} | {row.get('reason')}")
|
|
PY
|