
    (<iq	                         d Z ddlZddlZddlZddlmZ ddlmZ  eej                  j                  dd            Z	e	dz  dz  Z
d	Ze
efd
ededefdZdefdZedk(  r ej"                   e              yy)u  좀비 태스크 감지 워치독 (orphan-watchdog.py)

running 상태('started' 또는 'running')이면서 ZOMBIE_THRESHOLD_MINUTES 이상
경과한 태스크를 감지해 JSON으로 stdout에 출력한다.

종료 코드:
    0 - 좀비 없음
    1 - 좀비 1개 이상 발견
    N)datetime)PathWORKSPACE_ROOTz/home/jay/workspacememoryztask-timers.json<   
timer_filethreshold_minutesreturnc           
         t        j                         }g |j                  d      dd}| j                         s|S t	        | dd      5 }t        j                  |      }ddd       j                  di       }|j                         D ]  \  }}|j                  d	d
      }	|	dvr|j                  dd
      }
|
s2	 t        j                  |
      }||z
  j                         dz  }||k\  sd|d   j                  ||
t        |      |j                  dd      d        t        |d         |d<   |S # 1 sw Y   xY w# t        $ r Y w xY w)uU  running 상태이고 threshold_minutes 이상 경과한 태스크를 찾는다.

    Args:
        timer_file: task-timers.json 경로
        threshold_minutes: 좀비로 판정하는 최소 경과 시간(분)

    Returns:
        {
            "zombies": [...],
            "checked_at": "ISO8601",
            "total": int
        }
    z%Y-%m-%dT%H:%M:%Sr   )zombies
checked_attotalrzutf-8)encodingNtasksstatus )startedrunning
start_timer   r   team_idunknown)task_idr   elapsed_minutesr   r   )r   nowstrftimeexistsopenjsonloadgetitemsfromisoformat
ValueErrortotal_secondsappendroundlen)r   r	   r   resultfdatar   r   taskr   start_time_strr   elapseds                H/home/jay/workspace/.worktrees/task-2057-dev2/scripts/orphan-watchdog.pydetect_zombiesr0      sa   " ,,.Cll#67F 	j#	0 Ayy| ((7B'E (B'//"hh|R8	!//?J #224r9''9$$&"0',W~#xx	9=	!2 &+,F7OM=   		s   
D5=E5D>	EEc                  p    t               } t        t        j                  | dd             | d   dk(  rdS dS )NF   )ensure_asciiindentr   r      )r0   printr   dumps)r)   s    r/   mainr8   S   s5    F	$**V%
:;w1$1+!+    __main__)__doc__r   ossysr   pathlibr   environr!   	WORKSPACE
TIMER_FILEZOMBIE_THRESHOLD_MINUTESintdictr0   r8   __name__exit r9   r/   <module>rH      s     	 
   02GHI	!$66
  "5999 
9x,c , zCHHTV r9   