o
    S۷i                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZmZmZ d dl	m
Z
mZmZ d dlmZmZmZ er>d dlmZmZmZ edZG dd	 d	ee ZdS )
    N)datetimetimezone)TYPE_CHECKINGTypeVarGeneric)format_timestamp	safe_reprserialize_attribute)EnvelopeItem
PayloadRef)OptionalCallableAnyTc                   @   s   e Zd ZdZdZdZdZdZ							
d%ddZd	e	fddZ
d&ddZd'ddZd&ddZd&ddZd(ddZd)ddZd'd d!Zed*d#d$Zd
S )+Batcherd   i  g      @ capture_funcCallable[[Envelope], None]record_lost_funcCallable[..., None]returnNc                 C   s<   g | _ || _|| _d| _t | _t | _d | _	d | _
d S )NT)_buffer_capture_func_record_lost_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfr   r    r%   I/home/ubuntu/vllm_env/lib/python3.10/site-packages/sentry_sdk/_batcher.py__init__   s   


zBatcher.__init__c              	   C   s   | j sdS t }| j|krdS | jA | j|kr"	 W d   dS || _tj| jd| _d| j_	z| j
  W n tyK   d| _ Y W d   dS w W d   dS 1 sWw   Y  dS )zFor forking processes we might need to restart this thread.
        This ensures that our process actually has that thread running.
        FTN)target)r   osgetpidr#   r   r   Thread_flush_loopr"   daemonstartRuntimeError)r$   pidr%   r%   r&   _ensure_thread(   s0   


zBatcher._ensure_threadc                 C   s<   | j r| j| jt   | j  |   | j sd S d S N)r   r!   waitFLUSH_WAIT_TIMErandomclear_flushr$   r%   r%   r&   r,   H   s
   
zBatcher._flush_loopitemr   c                 C   s   |   r	| jd u rd S | j: t| j| jkr%| | 	 W d    d S | j| t| j| jkr@| j	
  W d    d S W d    d S 1 sKw   Y  d S r2   )r1   r"   r   lenr   MAX_BEFORE_DROP_record_lostappendMAX_BEFORE_FLUSHr!   setr$   r9   r%   r%   r&   addN   s   
"zBatcher.addc                 C   s(   | j d u rd S d| _| j  d | _ d S )NF)r"   r   r!   r?   r8   r%   r%   r&   kill[   s
   


zBatcher.killc                 C   s   |    d S r2   )r7   r8   r%   r%   r&   flushc   s   zBatcher.flushenveloper
   c                    sB   | t j jdt jitd fdd jD idd d S )N
item_countitemsc                    s   g | ]}  |qS r%   )_to_transport_format).0r9   r8   r%   r&   
<listcomp>p   s    
z,Batcher._add_to_envelope.<locals>.<listcomp>)json)typecontent_typeheaderspayload)add_itemr   TYPECONTENT_TYPEr:   r   r   r$   rD   r%   r8   r&   _add_to_envelopef   s   
zBatcher._add_to_envelopeOptional[Envelope]c                 C   s   t dtttjid}| j" t| jdkr!	 W d    d S | 	| | j
  W d    n1 s5w   Y  | | |S )Nsent_at)rM   r   )r
   r   r   nowr   utcr   r:   r   rS   r6   r   rR   r%   r%   r&   r7   x   s   

zBatcher._flushc                 C      d S r2   r%   r@   r%   r%   r&   r<      s   zBatcher._record_lostr   c                 C   rX   r2   r%   )r9   r%   r%   r&   rG      s   zBatcher._to_transport_format)r   r   r   r   r   N)r   N)r9   r   r   N)rD   r
   r   N)r   rT   )r9   r   r   r   )__name__
__module____qualname__r>   r;   r4   rP   rQ   r'   boolr1   r,   rA   rB   rC   rS   r7   r<   staticmethodrG   r%   r%   r%   r&   r      s.    

 





r   )r)   r5   r   r   r   typingr   r   r   sentry_sdk.utilsr   r   r	   sentry_sdk.enveloper
   r   r   r   r   r   r   r   r%   r%   r%   r&   <module>   s    