운영 대시보드 페이지 — Streamlit (수집 이력/커버리지/수동 트리거) #22

Closed
opened 2026-04-22 02:31:43 +09:00 by xhh · 0 comments
Owner

내부 운영/개발자가 수집 상태를 한눈에 보고 필요 시 수동 트리거까지 하는 페이지. Phase 3 의 사용자 대면 리포트 뷰어와는 별개.

세 섹션

1) 수집 이력 타임라인

  • 데이터 소스: /api/collect/history (기존 #4 에서 명세될 예정)
  • 표현: 일자 × 수집기 heatmap, 실패 건 빨간색, 성공 녹색
  • 최근 30일 기본, 조정 가능

2) 데이터 커버리지 매트릭스

  • 데이터 소스: /api/meta/coverage (#21)
  • 표현:
    • 테이블별 총 행수/심볼 수 헤더
    • 심볼 × 열(최신일, 건수, 시작일) 테이블
    • defined_but_missingstale_over_7d 경고 섹션
  • 정렬/필터: 심볼, 테이블, 최신일 기준

3) 수동 수집 트리거

  • 데이터 소스: /api/collect/daily, /api/collect/insider?ticker=X, /api/collect/margin-debt (기존 #4)
  • 표현: 각 수집 대상별 버튼 + 실행 중 상태 + 결과 로그
  • API 키 입력 필드 (세션 state 에 저장, 재사용)

NAS 접근 경로 (신설 필요)

현재 Streamlit 은 로컬 프로토타입으로만 존재. NAS 배포 위해:

  • frontend/streamlit/Dockerfile 작성 (python:3.13-slim + streamlit + 공통 코드 마운트)
  • docker-compose.ymlstreamlit 서비스 추가 (traefik-public 네트워크 공유)
  • Traefik 라벨: 서브도메인 stock-admin.xhhan.com 로 라우팅 (후보)
  • 인증 결정 — 아래 옵션 중 택일:
    • A) Tailscale 내부망 전용 (Cloudflare Tunnel 노출 안 함) — 가장 안전
    • B) Cloudflare Access (SSO/이메일 매직링크) — 편리
    • C) Streamlit --server.headless + API 키 프록시 — 구현 간단
    • 권장: A (내부 도구 성격에 맞음, 홈서버 로드맵의 Share Note Admin UI 와 같은 방식 http://ugreen-nas:PORT 로 Tailscale 접근)

구현 스코프

  • Streamlit 프로토타입(frontend/streamlit/app.py) 확장
  • 페이지 분리: pages/01_수집이력.py, pages/02_커버리지.py, pages/03_수동트리거.py
  • 공통 API 호출 유틸 (utils/api.py): API 키 관리, 에러 처리

의존

  • #18 (pytest 인프라) — 선행
  • #4 (Collection API) — 병행 또는 #4 완료 후
  • #21 (Coverage API) — 병행 또는 #21 완료 후

완료 기준

  • NAS 에서 Tailscale 경유 (또는 결정된 경로) 로 3개 페이지 모두 접근
  • 각 페이지 실데이터 반영
  • 수동 트리거 버튼으로 API 호출 성공 + 결과 표시
내부 운영/개발자가 수집 상태를 한눈에 보고 필요 시 수동 트리거까지 하는 페이지. Phase 3 의 사용자 대면 리포트 뷰어와는 별개. ## 세 섹션 ### 1) 수집 이력 타임라인 - 데이터 소스: `/api/collect/history` (기존 #4 에서 명세될 예정) - 표현: 일자 × 수집기 heatmap, 실패 건 빨간색, 성공 녹색 - 최근 30일 기본, 조정 가능 ### 2) 데이터 커버리지 매트릭스 - 데이터 소스: `/api/meta/coverage` (#21) - 표현: - 테이블별 총 행수/심볼 수 헤더 - 심볼 × 열(최신일, 건수, 시작일) 테이블 - `defined_but_missing` 및 `stale_over_7d` 경고 섹션 - 정렬/필터: 심볼, 테이블, 최신일 기준 ### 3) 수동 수집 트리거 - 데이터 소스: `/api/collect/daily`, `/api/collect/insider?ticker=X`, `/api/collect/margin-debt` (기존 #4) - 표현: 각 수집 대상별 버튼 + 실행 중 상태 + 결과 로그 - API 키 입력 필드 (세션 state 에 저장, 재사용) ## NAS 접근 경로 (신설 필요) 현재 Streamlit 은 로컬 프로토타입으로만 존재. NAS 배포 위해: - [ ] `frontend/streamlit/Dockerfile` 작성 (python:3.13-slim + streamlit + 공통 코드 마운트) - [ ] `docker-compose.yml` 에 `streamlit` 서비스 추가 (traefik-public 네트워크 공유) - [ ] Traefik 라벨: **서브도메인 `stock-admin.xhhan.com`** 로 라우팅 (후보) - [ ] **인증 결정** — 아래 옵션 중 택일: - A) Tailscale 내부망 전용 (Cloudflare Tunnel 노출 안 함) — 가장 안전 - B) Cloudflare Access (SSO/이메일 매직링크) — 편리 - C) Streamlit `--server.headless` + API 키 프록시 — 구현 간단 - 권장: **A** (내부 도구 성격에 맞음, 홈서버 로드맵의 Share Note Admin UI 와 같은 방식 `http://ugreen-nas:PORT` 로 Tailscale 접근) ## 구현 스코프 - Streamlit 프로토타입(`frontend/streamlit/app.py`) 확장 - 페이지 분리: `pages/01_수집이력.py`, `pages/02_커버리지.py`, `pages/03_수동트리거.py` - 공통 API 호출 유틸 (`utils/api.py`): API 키 관리, 에러 처리 ## 의존 - #18 (pytest 인프라) — 선행 - #4 (Collection API) — 병행 또는 #4 완료 후 - #21 (Coverage API) — 병행 또는 #21 완료 후 ## 완료 기준 - NAS 에서 Tailscale 경유 (또는 결정된 경로) 로 3개 페이지 모두 접근 - 각 페이지 실데이터 반영 - 수동 트리거 버튼으로 API 호출 성공 + 결과 표시
xhh closed this issue 2026-04-23 01:27:27 +09:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
xhh/financial-data-platform#22
No description provided.