
    i                       d Z ddlmZ ddlZddlZddlZddlmZ  ee      j                         j                  j                  Z ee      ej                  vr"ej                  j                  d ee             ddlmZ ddlmZ ddlmZ  ee      ZdddZddd	Zddd
Zedk(  r ej4                   e              yy)u  
scripts/session_watchdog.py — 봇 세션 건강 상태 모니터링 워치독

전체 봇 세션의 토큰 사용량을 체크하고, 임계값 도달 시 자동 대응.
cron으로 주기적 실행하거나, 수동으로 1회 실행 가능.

Usage:
    python3 scripts/session_watchdog.py --check     # 1회 체크 + 자동 대응
    python3 scripts/session_watchdog.py --status    # 현재 상태만 출력 (대응 없음)

Exit Codes:
    0: 정상 (normal 또는 warning만 존재)
    1: CRITICAL 세션 감지됨 (알림 목적)
    )annotationsN)Path)
get_logger)get_active_sessions_status)SessionResiliencec           	         t        |       }|j                         }t        j                  d|d   t	        |d         t	        |d                |S )u  1회 체크: check_all_sessions() 호출 + 결과 반환.

    Args:
        workspace_root: 워크스페이스 루트 경로 (None이면 기본값 사용)

    Returns:
        SessionResilience.check_all_sessions() 결과:
        {
            "checked": N,
            "warnings": [...],
            "criticals": [...],
            "normals": N,
            "timestamp": "..."
        }
    workspace_rootu7   run_check 완료: checked=%d, warnings=%d, criticals=%dcheckedwarnings	criticals)r   check_all_sessionsloggerinfolen)r
   
resilienceresults      I/home/jay/workspace/.worktrees/task-2116-dev1/scripts/session_watchdog.py	run_checkr   $   sT      #.AJ**,F
KKAyF:F; 	 M    c           	         | 8t        |       dz  }t        |dz        }t        |dz        }t        ||      }n
t               }t        j	                  dt        |j                  dg                    |S )uD  현재 상태 조회: get_active_sessions_status() 결과 반환.
    대응 없이 상태만 보여줌.

    Args:
        workspace_root: 워크스페이스 루트 경로 (None이면 기본값 사용)

    Returns:
        {
            "sessions": [
                {
                    "task_id": "...",
                    "team_id": "...",
                    "total_tokens": N,
                    "limit": N,
                    "usage_pct": F,
                    "level": "normal"|"warning"|"critical"
                },
                ...
            ]
        }
    memoryztask-timers.jsonztoken-ledger.json)timers_pathledger_pathu   run_status 완료: sessions=%dsessions)r   strr   r   r   r   get)r
   
memory_dirr   r   r   s        r   
run_statusr   ?   sw    , !.)H4
*'99:*'::;+##

 ,-
KK0#fjjR6P2QRMr   c                N   t        j                  dd      }|j                  ddd       |j                  ddd	       |j                  d
t        ddd       |j	                  |       }|j
                  s|j                  s|j                          y|j                  }|j
                  r@t        |      }t        t        j                  |dd             |j                  d      ryy|j                  r.t        |      }t        t        j                  |dd             yy)u   CLI 엔트리포인트.

    Args:
        args: CLI 인자 목록 (None이면 sys.argv 사용)

    Returns:
        exit code (0: 정상, 1: critical 감지)
    u/   봇 세션 건강 상태 모니터링 워치독session_watchdog)descriptionprogz--check
store_trueu2   1회 체크 + 자동 대응 수행 후 JSON 출력)actionhelpz--statusu.   현재 세션 상태만 출력 (대응 없음)z--workspaceNPATHuI   워크스페이스 루트 경로 오버라이드 (테스트/디버그용))typedefaultmetavarr&      r	   F   )ensure_asciiindentr   r   )argparseArgumentParseradd_argumentr   
parse_argscheckstatus
print_help	workspacer   printjsondumpsr   r   )argsparserparsedr6   r   s        r   mainr=   d   s    $$EF A  
 =  
 X   t$F<<  I||)4djjeA>?::k"}}95djjeA>?r   __main__)N)r
   z
str | Nonereturndict)r:   zlist[str] | Noner?   int)__doc__
__future__r   r/   r8   syspathlibr   __file__resolveparent_WORKSPACE_ROOTr   pathinsertutils.loggerr   utils.session_monitorr   utils.session_resiliencer   __name__r   r   r   r=   exit r   r   <module>rR      s    #   
  x.((*1188sxx'HHOOAs?+, # < 6	H	6"J4n zCHHTV r   