
    Si              	       N   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZmZ ej                   j#                  dd      Z e	e      d	z  d
z  dz  ZddZddededee   ddfdZddedeeeef      fdZededed   fd       ZddZedk(  r e        yy)ua  
에러 추적 모듈

Usage:
    from utils.error_tracker import track_error, error_context, get_recent_errors

    # 직접 호출
    try:
        ...
    except Exception as e:
        track_error("dispatch", e)

    # context manager
    with error_context("dispatch"):
        risky_operation()

    # CLI
    python3 error_tracker.py --recent 10
    N)contextmanager)datetime)Path)AnyDict	GeneratorListOptionalWORKSPACE_ROOTz/home/jay/workspacememorylogszerrors.jsonlreturnc                  F    t         j                  j                  dd       y)u(   에러 로그 디렉토리 자동 생성T)parentsexist_okN)ERRORS_FILEparentmkdir     D/home/jay/workspace/.worktrees/task-2117-dev1/utils/error_tracker.py_ensure_errors_dirr   #   s    TD9r   moduleerrortb_strc                    	 t                |t        j                         }t        j                         j                         }|| t        |      j                  t        |      |d}t        t        dd      5 }|j                  t        j                  |d      dz          ddd       y# 1 sw Y   yxY w# t        $ r Y yw xY w)	u   
    에러를 기록합니다.

    Args:
        module: 에러가 발생한 모듈 이름
        error: Exception 객체
        tb_str: (선택) 트레이스백 문자열. None이면 자동으로 생성
    N)tsr   
error_typemessage	tracebackautf-8encodingF)ensure_ascii
)r   r    
format_excr   now	isoformattype__name__stropenr   writejsondumps	Exception)r   r   r   r   error_recordfs         r   track_errorr4   (   s     >))+F \\^%%' u+..5z
 +sW5 	IGGDJJ|%@4GH	I 	I 	I  s0   A8B9 :*B-$B9 -B62B9 6B9 9	CCnc                 f   	 t         j                         sg S g }t        t         dd      5 }|D ]8  }|j                         s	 |j	                  t        j                  |             : 	 ddd       |r||  d S g S # t
        j                  $ r Y cw xY w# 1 sw Y   ,xY w# t        $ r g cY S w xY w)u   
    최근 n개의 에러 기록을 반환합니다.

    Args:
        n: 반환할 에러 개수 (기본값: 10)

    Returns:
        최근 n개의 에러 기록 리스트
    rr"   r#   N)	r   existsr-   stripappendr/   loadsJSONDecodeErrorr1   )r5   errorsr3   lines       r   get_recent_errorsr?   M   s    !!#I+sW5 	 ::<djj&67	 %vqbc{,",  // 	 	  	sW   B" B" B$A=(B+B" ;B" =BBBBBB" "B0/B0)NNNc              #   R   K   	 d y# t         $ r}t        | |        d}~ww xY ww)u   
    context manager: with 블록 내 예외를 자동으로 추적합니다.

    Usage:
        with error_context("module_name"):
            risky_operation()
    N)r1   r4   )r   es     r   error_contextrB   l   s*      FAs   '	 '	$$'c                     t        t        j                        dkD  rt        j                  d   dk(  rt        t        j                        dkD  rt        t        j                  d         nd} t	        |       }|st        d       yt        dt        |       d       t        |d      D ]F  \  }}t        d| d	|d
    d|d    d|d    d|d    
       t        d|d           t                H yyy)u   CLI 인터페이스   z--recent   
   zNo errors recorded.zRecent z	 errors:
[z] r   z | r   r   z: r   z    Traceback:
r    N)lensysargvintr?   print	enumerate)r5   r=   ir   s       r   mainrO   |   s    
388}qSXXa[J6 #CHH 1Cr"1%'(GCK=
34%fa0 5!BuT{m3uX.?s5CVBWWYZ_`iZjYklm({);(<=> 7r   __main__)r   N)N)rF   )__doc__r/   osrI   r    
contextlibr   r   pathlibr   typingr   r   r   r	   r
   environget_WORKSPACE_ROOTr   r   r,   r1   r4   rK   r?   rB   rO   r+   r   r   r   <module>rY      s   (  	 
  %   7 7**..!13HI?#h.7.H:
" "I "x} "PT "J d4S>&: > # ),<"=    zF r   