#!/usr/bin/env bash # 운영 공개 읽기 API 스모크 — GET 전용, API 키 불필요 엔드포인트만. KIS/주문 경로 호출 없음. # 사용: .claude/scripts/prod_smoke.sh (환경변수 PROD_BASE_URL 로 대상 변경 가능) set -u BASE="${PROD_BASE_URL:-https://stock.shium.net}" ENDPOINTS=( "/api/v1/market/indices" "/api/v1/journals/stats" "/api/v1/analysis/performance" ) fail=0 echo "== 운영 스모크 ($BASE) $(TZ=Asia/Seoul date '+%Y-%m-%d %H:%M:%S KST') ==" for ep in "${ENDPOINTS[@]}"; do tmp="$(mktemp)" out="$(curl -s -o "$tmp" -w '%{http_code} %{time_total}' --max-time 15 "$BASE$ep" 2>/dev/null)" || out="000 0" code="${out%% *}"; secs="${out##* }" bytes="$(wc -c < "$tmp" | tr -d ' ')" valid="-" if command -v python3 >/dev/null 2>&1 && [ "$code" = "200" ]; then python3 -c 'import json,sys; json.load(open(sys.argv[1]))' "$tmp" 2>/dev/null && valid="json-ok" || valid="json-INVALID" fi if [ "$code" = "200" ] && [ "$valid" != "json-INVALID" ]; then mark="OK "; else mark="FAIL"; fail=1; fi printf '%s %s http=%s %ss %sB %s\n' "$mark" "$ep" "$code" "$secs" "$bytes" "$valid" [ "$code" != "200" ] && head -c 200 "$tmp" | sed 's/^/ /' && echo rm -f "$tmp" done [ "$fail" = 0 ] && echo "== 스모크 통과 ==" || echo "== 스모크 실패 — Jenkins 로그/컨테이너 상태 확인 ==" exit "$fail"