Files
auto-stock/.claude/scripts/prod_smoke.sh
shuim ea644a37f3 chore(harness): Claude Code 하네스 구성 — 안전 가드·규칙 검사·배포 스킬
- .claude/settings.json (공유) 신설, hooks 를 settings.local.json 에서 이동
- bash_guard (PreToolUse): 로컬 스택 기동·운영 DB alembic·_test 아닌 pytest·main 강제 push·위험 rm 차단,
  main push/deploy.sh 는 장중 경고와 함께 확인 요청, backend 커밋 전 유닛 스위트 게이트
- rules_check (PostToolUse): py_compile + CLAUDE.md 규칙(json.dumps, except 후 logger.debug,
  except-pass, 실시간 계층 DB I/O) — diff 추가 라인만
- session_context (SessionStart): 브랜치·미커밋·장 상태·alembic head 주입
- stop_check (Stop): frontend 변경 시 tsc
- auto-orchestrate: 서브에이전트 보고·시스템 알림·질문형 프롬프트 오발동 제거
- /deploy 스킬 + deploy.sh / prod_smoke.sh: 테스트→dev push→main 병합→재기동 감시→공개 API 스모크
- 팀 에이전트·orchestrate 스킬 추적 시작, settings.local.json 추적 해제(.gitignore)
- CLAUDE.md §9 하네스
- 훅 테스트 69 passed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:05:35 +09:00

29 lines
1.3 KiB
Bash
Executable File

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