Coverage for view / web / routes / ohlcv.py: 100%
22 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-04 15:08 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-04 15:08 +0000
1"""
2OHLCV 수집 제어 API 엔드포인트.
3- GET /ohlcv/progress : 현재 수집 진행률 조회
4- POST /ohlcv/force-update : skip 조건 무시 강제 전체 수집 트리거
5"""
6import asyncio
7from fastapi import APIRouter, HTTPException
8from view.web.api_common import _get_ctx
10router = APIRouter()
13@router.get("/ohlcv/progress")
14async def get_ohlcv_progress():
15 """OHLCV 수집 진행률 반환."""
16 ctx = _get_ctx()
17 task = getattr(ctx, "ohlcv_update_task", None)
18 if not task:
19 raise HTTPException(status_code=503, detail="OhlcvUpdateTask가 초기화되지 않았습니다")
20 return task.get_progress()
23@router.post("/ohlcv/force-update")
24async def force_ohlcv_update():
25 """skip 조건을 무시하고 전 종목 OHLCV를 강제 재수집한다.
27 - 최초 설치 / 다른 머신 이전 후 전체 백필이 필요할 때
28 - DB 데이터 정합성이 의심될 때
29 수집은 백그라운드로 실행되며 /api/ohlcv/progress 로 진행률을 확인할 수 있다.
30 """
31 ctx = _get_ctx()
32 task = getattr(ctx, "ohlcv_update_task", None)
33 if not task:
34 raise HTTPException(status_code=503, detail="OhlcvUpdateTask가 초기화되지 않았습니다")
36 progress = task.get_progress()
37 if progress.get("running"):
38 raise HTTPException(status_code=409, detail="이미 수집이 진행 중입니다")
40 asyncio.create_task(task.force_collect())
41 return {"success": True, "message": "강제 수집이 시작되었습니다. /api/ohlcv/progress 에서 진행률을 확인하세요."}