refactor(prediction): 사이클 스테이지 에러 경계 도입 (Phase 0-1) #83
No reviewers
레이블
레이블 없음
마일스톤 없음
담당자 없음
참여자 2명
알림
마감일
마감일이 설정되지 않았습니다.
의존성
No dependencies set.
Reference: gc/kcg-ai-monitoring#83
불러오는 중...
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/phase0-cycle-error-boundary"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
변경 사항
docs/prediction-analysis.md P1 최우선 권고 반영 — Phase 0-1
prediction 5분 분석 사이클의 에러 격리 개선. 기존에는 아래 문제가 있었습니다:
scheduler.py:720-745에서 출력 5모듈이 한try/except로 묶여 한 모듈 실패 시 5개 전부 스킵logger.warning("X failed: %s", e)한 줄만 남겨 journalctl 에서 stacktrace 없이 원인 특정 불가주요 변경
prediction/pipeline/stage_runner.py신설run_stage(name, fn, *args, required=False, **kwargs)유틸required=True→ 예외 re-raise (상위 사이클 try/except 가 잡음)required=False→logger.exception으로 stacktrace 보존 + None 반환prediction/scheduler.py run_analysis_cycle()스테이지 분리run_stage()로 독립 실행:violation_classifier/event_generator/kpi_writer/stats_aggregate_hourly/stats_aggregate_daily/alert_dispatcherupsert_results+cleanup_old도run_stage로 래핑 (upsert 는required=True— 실패 시 사이클 abort)logger.warning을logger.exception으로 업그레이드 (6개 지점)운영 효과
journalctl -u kcg-ai-prediction에서 실패 스테이지명 + stacktrace 가 직접 보임run_stage로 감싸짐관련 이슈
테스트
python3 -m ast scheduler.py+stage_runner.py문법 통과run_stagesmoke test: 정상 실행 / required=False 흡수 / required=True 재raise 3가지 시나리오범위 밖 (다음 MR)
docs/prediction-analysis.md P1 권고 반영. 5분 사이클의 각 스테이지를 한 try/except 로 뭉친 기존 구조를 스테이지 단위로 분리해 실패 지점을 명시적으로 특정하고 부분 실패 시에도 후속 스테이지가 계속 돌아가도록 개선. - prediction/pipeline/stage_runner.py 신설 - run_stage(name, fn, *args, required=False, **kwargs) 유틸 - required=True 면 예외 re-raise (상위 사이클 try/except 가 잡도록) - required=False 면 logger.exception 으로 stacktrace 보존 + None 반환 - 지속시간 로깅 포함 - prediction/scheduler.py run_analysis_cycle() 수정 - 출력 단계 6모듈을 각각 run_stage() 로 분리: violation_classifier / event_generator / kpi_writer / stats_aggregate_hourly / stats_aggregate_daily / alert_dispatcher - upsert_results / cleanup_old 도 run_stage 로 래핑 (upsert 는 required=True) - 내부 try/except 의 logger.warning → logger.exception 으로 업그레이드 (fetch_dark_history, gear collision event promotion, group polygon, gear correlation, pair detection, chat cache) - 스테이지 실패 시 journalctl -u kcg-ai-prediction 에서 stacktrace 로 원인 바로 특정 가능 (기존은 "failed: X" 한 줄만 남아 디버깅 불가) 검증: - python3 -c "import ast; ast.parse(...)" scheduler.py / stage_runner.py 통과 - run_stage smoke test (정상/실패 흡수/required 재raise 3가지) 통과 범위 밖 (후속): - Phase 0-2 ILLEGAL_FISHING_PATTERN 전용 페이지 (다음 MR) - Phase 0-3 Transshipment 전용 페이지 (다음 MR)Phase 0-1 사이클 스테이지 에러 경계 승인 (via /mr skill, docs/prediction-analysis.md P1 권고 반영)