
    /j                        S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  SSK
Jr  SSKJr   " S S5      r " S	 S
\R                  5      rg)    )annotationsN)Callable   )utils)duplex_unixc                  N    \ rS rSr    S	S jrS
S jrS
S jrSS jrS
S jrSr	g)LogQueueListener   c                *    S U l         Xl        X l        g N)_thread_duplex_prepare_fnc)selfduplexprepare_fncs      M/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/ipc/log_queue.py__init__LogQueueListener.__init__   s    
 15'    c                    [         R                  " U R                  SS9U l        U R                  R	                  5         g )Nipc_log_listenertargetname)	threadingThread_monitorr   startr   s    r   r   LogQueueListener.start   s+     ''t}}CUVr   c                <   U R                   c  g U R                   R                  SS9  U R                   R                  5       (       a5  U R                  R	                  5         U R                   R                  5         OU R                  R	                  5         S U l         g )Nr   )timeout)r   joinis_aliver   closer    s    r   stopLogQueueListener.stop   sp    << 	!$<<  ""LL LLLL r   c                    U R                  U5        [        R                  " UR                  5      nUR	                  UR
                  5      (       d  g UR                  U5        g r   )r   logging	getLoggerr   isEnabledForlevelnocallHandlers)r   recordlgers      r   handleLogQueueListener.handle.   sJ    &!  -  00&!r   c                      U R                   R                  5       n[        R                  " U5      nU R                  U5        MD  ! [        R                  R                  R
                   a     g f = fr   )	r   
recv_bytesr   aior   DuplexClosedpickleloadsr1   )r   datar/   s      r   r   LogQueueListener._monitor7   sa    ||..0 \\$'FKK  99((55 s   A (A10A1)r   r   r   N)r   utils.aio.duplex_unix._Duplexr   z#Callable[[logging.LogRecord], None]returnNoner/   zlogging.LogRecordr=   r>   )
__name__
__module____qualname____firstlineno__r   r   r'   r1   r   __static_attributes__ r   r   r	   r	      s-    (-( 9("" r   r	   c                  h   ^  \ rS rSrSrS	U 4S jjr\S
S j5       rSS jrSS jr	SU 4S jjr
SrU =r$ )LogQueueHandlerB   Nc                   > [         TU ]  5         Xl        [        R                  [
        S -     " 5       U l        [        R                  " U R                  SS9U l
        U R                  R                  5         g )Nipc_log_forwarderr   )superr   r   queueSimpleQueuebytes_send_qr   r   _forward_logs_send_threadr   )r   r   	__class__s     r   r   LogQueueHandler.__init__E   sZ    ((68%,,D4F4FM`a!r   c                    U R                   $ r   )rQ   r    s    r   threadLogQueueHandler.threadL   s       r   c                     U R                   R                  5       nUc  O U R                  R                  U5        M<  U R                  R                  5         g ! [        R
                   a     M2  f = fr   )rO   getr   
send_bytesr   r6   r&   )r   serialized_records     r   rP   LogQueueHandler._forward_logsP   sj     $ 0 0 2 (''(9:  	 ++ s   A A10A1c                    [         R                  " 5       (       a  g U R                  U5      n[        R                  " U5      nX!l        X!l        S Ul        S Ul        UR                  Ul        S Ul	        [        US5      (       a  S Ul        U R                  R                  [        R                  " U5      5        g ! [          a    U R#                  U5         g f = f)N	websocket)sysis_finalizingformatcopymessagemsgargsexc_infoexc_text
stack_infohasattrr]   rO   
put_nowaitr7   dumps	ExceptionhandleError)r   r/   rc   s      r   emitLogQueueHandler.emit]   s    	%  "" ++f%CYYv&F NJFK"FO$ooFO $F v{++#' LL##FLL$89 	%V$	%s   B> B B> >CCc                l   > [         TU ]  5         U R                  R                  U R                  5        g r   )rK   r&   rO   ri   	_sentinal)r   rR   s    r   r&   LogQueueHandler.closex   s"    /r   )r   rO   rQ   )r   r;   r=   r>   )r=   zthreading.Threadr<   r?   )r@   rA   rB   rC   rp   r   propertyrU   rP   rm   r&   rD   __classcell__)rR   s   @r   rG   rG   B   s5    I" ! !%60 0r   rG   )
__future__r   ra   r*   r7   rL   r^   r   collections.abcr    r   	utils.aior   r	   HandlerrG   rE   r   r   <module>ry      s>    "     
  $  #0  0 f80goo 80r   