o2o-negosium-original/lps/run_monitor.sh
민헌 89fe2c9805 feat(lps): 실시간 관측 대시보드 추가 — 큐 추이·코어별 CPU·프로세스 그룹 사용률
loadtest/monitor.py (:9700, 단일 파일·외부 인프라 없음) + run_monitor.sh(대화형).
e2e 부하(N=100 loadtest.py) 중 "프로세스가 잘 진행되는지, 코어가 전부 도는지,
병목이 어느 층인지"를 브라우저에서 2초 간격으로 본다:

- 큐 추이: /v1/lps/ops 폴링 — PENDING/RUNNING/DONE/DEAD 라인 + 처리량(개/분) 타일
- 프로세스 그룹 CPU: worker/api/chrome/postgres — 병목 층 판독
  (chrome 은 워커 자손만 집계해 사용자 브라우저와 분리, uvicorn spawn 자식은 부모로 api 귀속)
- 코어별 사용률 막대: 멀티코어 활용 확인
- 현재 스냅샷 표 + 호버 툴팁 + 라인 끝 직접 라벨(dataviz 팔레트 검증 통과, 다크 서피스)
- psutil 의존성 추가(로컬 관측 전용)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 09:50:14 +09:00

32 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# LPS 실시간 모니터 실행 (대화형) — 부하/e2e 실행 중 큐 진행·코어별 CPU·병목을 브라우저에서 관측.
# loadtest.py(e2e 100건 등)와 같이 띄워두고 보는 용도. Grafana 대체가 아닌 로컬 경량 도구.
#
set -euo pipefail
cd "$(dirname "$0")" # lps/
PY=".venv/bin/python"
[[ -x "$PY" ]] || { echo "[error] .venv 가 없습니다. ./run_local_server.sh 를 먼저 한 번 실행하세요."; exit 1; }
# psutil 보장(관측 도구 전용 의존성)
"$PY" -c "import psutil" 2>/dev/null || { echo "[setup] psutil 설치..."; "$PY" -m pip install -q psutil; }
echo "── 모니터 설정 ──"
read -rp "모니터 포트 [9700]: " port
port="${port:-9700}"
read -rp "대상 API [http://localhost:9600] (엔터=유지): " base
base="${base:-http://localhost:9600}"
if lsof -ti:"$port" >/dev/null 2>&1; then
echo "[info] 포트 $port 사용 중 → 기존 프로세스 종료"
lsof -ti:"$port" | xargs kill 2>/dev/null || true
sleep 1
fi
echo
echo "[run] 모니터 → http://localhost:$port (대상 $base)"
echo " 워커·API·크롬·postgres 의 CPU 와 큐 추이가 2초마다 갱신됩니다. 중단: Ctrl+C"
echo
exec env BASE="$base" MONITOR_PORT="$port" "$PY" loadtest/monitor.py