
    tni                         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	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                       e Zd ZdZdZdZdZdZ	 	 	 	 	 	 ddZd	e	fdZ
ddZddZddZddZddZddZddZed d            Zd
S )!Batcherd   i  g      @ capture_funcCallable[[Envelope], None]record_lost_funcCallable[..., None]returnNc                     g | _         || _        || _        d| _        t	          j                    | _        t	          j                    | _        d | _	        d | _
        d S )NT)_buffer_capture_func_record_lost_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfr   r   s      P/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/_batcher.py__init__zBatcher.__init__   sV    
 #%)!1^%%
/8/@/@6:-1    c                    | j         sdS t          j                    }| j        |k    rdS | j        5  | j        |k    r	 ddd           dS || _        t          j        | j                  | _        d| j        _	        	 | j        
                                 n## t          $ r d| _         Y ddd           dS w xY w	 ddd           n# 1 swxY w 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'   pids     r(   _ensure_threadzBatcher._ensure_thread(   sl    } 	5ikk##4Z 	 	  C''		 	 	 	 	 	 	 	 !$D%,D4DEEEDM#'DM ##%%%%    !&#	 	 	 	 	 	 	 	 &	 	 	 	 	 	 	 	 	 	 	 	 	 	 	& ts;   C2C>BCB8)C7B88CCCc                     | j         ri| j                            | j        t	          j                    z              | j                                         |                                  | j         gd S d S N)r   r$   waitFLUSH_WAIT_TIMErandomclear_flushr'   s    r(   r0   zBatcher._flush_loopH   ss    m 	""4#7&-//#IJJJ##%%%KKMMM m 	 	 	 	 	r*   itemr   c                    |                                  r| j        d S | j        5  t          | j                  | j        k    r#|                     |           	 d d d            d S | j                            |           t          | j                  | j        k    r| j	        
                                 d d d            d S # 1 swxY w Y   d S r7   )r5   r%   r"   lenr   MAX_BEFORE_DROP_record_lostappendMAX_BEFORE_FLUSHr$   setr'   r>   s     r(   addzBatcher.addN   s*   ""$$ 	(=4Z 	( 	(4<  D$888!!$'''	( 	( 	( 	( 	( 	( 	( 	(
 L%%%4<  D$999!%%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   4C&ACC
Cc                 f    | j         d S d| _        | j                                         d | _         d S )NF)r%   r   r$   rE   r=   s    r(   killzBatcher.kill[   s6    = Fr*   c                 .    |                                   d S r7   )r<   r=   s    r(   flushzBatcher.flushc   s    r*   enveloper   c                      |                     t           j         j        dt	           j                  it          d fd j        D             i                               d S )N
item_countitemsc                 :    g | ]}                     |          S  )_to_transport_format).0r>   r'   s     r(   
<listcomp>z,Batcher._add_to_envelope.<locals>.<listcomp>p   s4     " " "@DD55d;;" " "r*   )json)typecontent_typeheaderspayload)add_itemr   TYPECONTENT_TYPEr@   r   r   r'   rL   s   ` r(   _add_to_envelopezBatcher._add_to_envelopef   s    Y!. #dl"3"3 # " " " "HL" " "    	
 	
 	
 	
 	
r*   Optional[Envelope]c                    t          dt          t          j        t          j                            i          }| j        5  t          | j                  dk    r	 d d d            d S | 	                    |           | j        
                                 d d d            n# 1 swxY w Y   |                     |           |S )Nsent_at)rX   r   )r   r   r   nowr   utcr"   r@   r   r^   r;   r   r]   s     r(   r<   zBatcher._flushx   s    0hl1K1K L LM
 
 
 Z 	! 	!4<  A%%	! 	! 	! 	! 	! 	! 	! 	! !!(+++L   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	8$$$s   B$*.B$$B(+B(c                     d S r7   rQ   rF   s     r(   rB   zBatcher._record_lost   s    r*   r   c                     d S r7   rQ   )r>   s    r(   rR   zBatcher._to_transport_format   s    r*   )r   r   r   r   r   N)r   N)r>   r   r   N)rL   r   r   N)r   r_   )r>   r   r   r   )__name__
__module____qualname__rD   rA   r9   r[   r\   r)   boolr5   r0   rG   rI   rK   r^   r<   rB   staticmethodrR   rQ   r*   r(   r   r      s&       OODL222 02 
	2 2 2 2     @   ( ( ( (      
 
 
 
$          \  r*   r   )r-   r:   r    r   r   typingr   r   r   sentry_sdk.utilsr   r	   r
   sentry_sdk.enveloper   r   r   r   r   r   r   r   rQ   r*   r(   <module>rn      s
   				      ' ' ' ' ' ' ' ' 2 2 2 2 2 2 2 2 2 2 M M M M M M M M M M : : : : : : : : : : /..........GCLL{ { { { {gaj { { { { {r*   