o
    i                     @  s   d dl mZ d dlZd dl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 G dd dZG d	d
 d
ejZdS )    )annotationsN)Callable   )utils)duplex_unixc                   @  s>   e Zd ZdddZdd	d
ZdddZdddZdddZdS )LogQueueListenerduplexutils.aio.duplex_unix._Duplexprepare_fnc#Callable[[logging.LogRecord], None]c                 C  s   d | _ || _|| _d S N)_thread_duplex_prepare_fnc)selfr   r
    r   ^/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/ipc/log_queue.py__init__   s   
zLogQueueListener.__init__returnNonec                 C  s    t j| jdd| _| j  d S )Nipc_log_listenertargetname)	threadingThread_monitorr   startr   r   r   r   r      s   zLogQueueListener.startc                 C  s,   | j d u rd S | j  | j   d | _ d S r   )r   r   closejoinr   r   r   r   stop   s
   



zLogQueueListener.stoprecordlogging.LogRecordc                 C  s4   |  | t|j}||jsd S || d S r   )r   logging	getLoggerr   isEnabledForlevelnocallHandlers)r   r"   lgerr   r   r   handle%   s
   
zLogQueueListener.handlec                 C  sB   	 z| j  }W n tjjjy   Y d S w t|}| | qr   )	r   
recv_bytesr   aior   DuplexClosedpickleloadsr*   )r   datar"   r   r   r   r   .   s   

zLogQueueListener._monitorN)r   r	   r
   r   r   r   r"   r#   r   r   )__name__
__module____qualname__r   r   r!   r*   r   r   r   r   r   r      s    

	

	r   c                      sR   e Zd ZdZd fddZedd	d
ZdddZdddZd fddZ	  Z
S )LogQueueHandlerNr   r	   r   r   c                   sB   t    || _tjtd B   | _tj| j	dd| _
| j
  d S )Nipc_log_forwarderr   )superr   r   queueSimpleQueuebytes_send_qr   r   _forward_logs_send_threadr   )r   r   	__class__r   r   r   <   s
   
zLogQueueHandler.__init__threading.Threadc                 C  s   | j S r   )r>   r   r   r   r   threadC   s   zLogQueueHandler.threadc                 C  sL   	 | j  }|d u rnz| j| W n
 tjy   Y nw q| j  d S r   )r<   getr   
send_bytesr   r-   r   )r   serialized_recordr   r   r   r=   G   s   

zLogQueueHandler._forward_logsr"   r#   c                 C  s   z8t  rW d S | |}t|}||_||_d |_d |_|j|_d |_	t
|dr-d |_| jt| W d S  tyG   | | Y d S w )N	websocket)sysis_finalizingformatcopymessagemsgargsexc_infoexc_text
stack_infohasattrrF   r<   
put_nowaitr.   dumps	ExceptionhandleError)r   r"   rL   r   r   r   emitT   s"   


zLogQueueHandler.emitc                   s   t    | j| j d S r   )r8   r   r<   rR   	_sentinalr   r?   r   r   r   o   s   
zLogQueueHandler.close)r   r	   r   r   )r   rA   r1   r2   )r3   r4   r5   rW   r   propertyrB   r=   rV   r   __classcell__r   r   r?   r   r6   9   s    

r6   )
__future__r   rJ   r$   r.   r9   rG   r   collections.abcr    r   	utils.aior   r   Handlerr6   r   r   r   r   <module>   s    *