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mZmZ d dl	m
Z
 ddlmZ ddlmZmZmZ dd	lmZmZmZmZmZ dd
lmZmZmZmZmZ G dd dZdddZdddZdS )    )annotationsN)Callable	Coroutine)	FrameType   logger)aiolog_exceptionstime_ms   )Messagearecv_messageasend_messagerecv_messagesend_message)IPC_MESSAGESInitializeRequestInitializeResponsePingRequestPongResponsec                   @  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 )_ProcClientmp_cchsocket.socketlog_cchsocket.socket | Noneinitialize_fnc0Callable[[InitializeRequest, _ProcClient], None]main_task_fncBCallable[[aio.ChanReceiver[Message]], Coroutine[None, None, None]]returnNonec                 C  s   || _ || _|| _d| _d S )NF)_mp_cch_initialize_fnc_main_task_fnc_initialized)selfr   r   r   r    r'   `/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/ipc/proc_client.py__init__   s   
z_ProcClient.__init__c              
   C  s   zJt jj| j}t|t}t|tsJ d|| _	z| 
| j	|  t|t  W n ty@ } zt|tt|d  d }~ww d| _|  W d S  t jjy] } ztd|d }~ww )Nz-first message must be proto.InitializeRequest)errorTz failed to initialize proc_client)r	   duplex_unix_Duplexopenr"   r   r   
isinstancer   	_init_reqr#   r   r   	Exceptionstrr%   detachDuplexClosedRuntimeError)r&   cch	first_reqer'   r'   r(   
initialize#   s*   

z_ProcClient.initializec              
   C  s   | j stdt }t| || jj d|_zFz(|j	| 
 dd| _| j sBz|| j W n	 ty<   Y nw | j r+W n	 tyL   Y nw W ||  d S W ||  d S ||  w )Nzproc_client not initializedg?proc_client_mainname)r%   r4   asyncionew_event_loopset_event_loop	set_debugr/   asyncio_debugslow_callback_durationcreate_task_monitor_task_taskdonerun_until_completeKeyboardInterruptshutdown_default_executor)r&   loopr'   r'   r(   run9   s.   


"z_ProcClient.runmsgr   c                   s   t | j|I d H  d S N)r   _acch)r&   rK   r'   r'   r(   sendQ   s   z_ProcClient.sendc                   sf  t jjjI d H _zt  t j	j
d t jt  ttddfdd}ttddfdd}tj| d	d
}d }j	jdkrStj| dd
}tjdd
}d fdd}|| |d urs|| ||   I d H  t ||I d H  |d urt |I d H  W j I d H  d S W j I d H  d S j I d H  w )N
   r   r    r!   c                    s   	 zt jtI d H } W n tjjy   Y d S w ttj 	  W d    n1 s/w   Y  t
| trHtjt| jt dI d H   |  q)NT)last_timestamp	timestamp)r   rM   r   r	   r+   r3   
contextlibsuppressSleepFinishedresetr.   r   r   r   rQ   r   send_nowait)rK   )ipc_chping_timeoutr&   r'   r(   _read_ipc_task\   s"   



z1_ProcClient._monitor_task.<locals>._read_ipc_taskc                     s    I d H  t dtjd d S )Nz2worker process is not responding.. worker crashed?file)printsysstderrr'   )rX   r'   r(   _self_health_checko   s   

z5_ProcClient._monitor_task.<locals>._self_health_checkipc_readr:   r   health_checkmain_task_entrypoint_asyncio.Task[None]c                   s@   t tj    W d    n1 sw   Y    d S rL   )rR   rS   r<   InvalidStateErrorsetclose)rc   )	exit_flagrW   r'   r(   _done_cb   s   
z+_ProcClient._monitor_task.<locals>._done_cbr    r!   )rc   rd   r    r!   )r	   r+   _AsyncDuplexr-   r"   rM   r<   Eventsleepr/   rX   Chanr   r
   r   rB   ping_intervalr$   add_done_callbackwaitcancel_and_waitaclose)r&   rY   r_   	read_taskhealth_check_task	main_taskri   r'   )rh   rW   rX   r&   r(   rC   T   s:   



&z_ProcClient._monitor_taskN)
r   r   r   r   r   r   r   r   r    r!   rj   )rK   r   r    r!   )__name__
__module____qualname__r)   r8   rJ   rN   rC   r'   r'   r'   r(   r      s    



r   r    r!   c                  C  s  ddl } ddl}ddl}ddl}ddl}ddl}ddlm} ddlm	} ddl
}|dd dv r4dS |d| }	||	jd	d	d
 |jd|	dd| j d|  ddd}
tdd |
d td| j d| j d|
d td d|
d |j|
d	d td|
d zNz|  }W n ty   d}Y nw |durtd|
d td|
d td|
d | |}tdt| d|
d t|dD ]\}}td| dt| d|
d td|  |
d td|  |
d | std |  |
d z%| }td!t| |
d td"|
d |D ]}|j|d|
d# qW n tyH } ztd$| |
d W Y d}~nd}~ww z%|  }td%| |
d t!|d&d }rmtd'|
d |j||
d W n] ty } ztd(| |
d W Y d}~nFd}~ww z$|" }|rtd)| |
d td*|
d |j#t$|||j%|
d W n ty } ztd+| |
d W Y d}~nd}~ww td,|
d qntd-|
d W n" ty } ztd.| |
d |j&|
d W Y d}~nd}~ww z:|' }|( }|j)d/ }td0|
d td1|
d td|
d td2|d3d4|
d td5|j*d/ d3d4|
d W n
 tyB   Y n	w W d   dS W d   dS 1 sWw   Y  dS )6zQImplementation of stack trace dumping (callable directly or from signal handler).r   N)current_process)PathLK_DUMP_STACK_TRACES0)r}   falsenoLK_DUMP_DIRT)parentsexist_okwFzlivekit-agents-pid--z.stacktrace)modedirdeleteprefixsuffix
z<============================================================rZ   zProcess z (pid z) stack trace dump)r[   all_threadszASYNCIO TASKSzTotal tasks: r   z

--- Task /z ---zName: zDone: zCancelled: zStack frames: zStack trace:)limitr[   zCould not get stack: zCoroutine: cr_framezCoroutine frame:zCould not get coroutine: zException: zException traceback:zCould not get exception:  zNo asyncio event loop runningzError dumping asyncio tasks: i   z=
============================================================zMEMORY USAGEzRSS: z.2fz MBzVMS: )+r<   faulthandlerostempfiletime	tracebackmultiprocessingrz   pathlibr{   psutilgetenvlower
gettempdirmkdirNamedTemporaryFilepidtime_nsr\   r;   dump_tracebackget_running_loopr4   	all_taskslen	enumerateget_namerE   	cancelled	get_stackprint_stackr0   get_corogetattr	exceptionprint_exceptiontype__traceback__	print_excProcessmemory_inforssvms)r<   r   r   r   r   r   rz   r{   r   r   frI   tasksitaskstackframer7   coror   excprocessr   	memory_mbr'   r'   r(   _dump_stack_traces_impl   s   


%
 T$r   signumintrc   FrameType | Nonec                 C  s
   t   dS )z3Signal handler wrapper for _dump_stack_traces_impl.N)r   )r   rc   r'   r'   r(   _dump_stack_traces   s   
r   rj   )r   r   rc   r   r    r!   ) 
__future__r   r<   rR   socketr]   collections.abcr   r   typesr   logr   utilsr	   r
   r   channelr   r   r   r   r   protor   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   s    	
~j