
    \j                         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	Z	d dl
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y)
    N)datetimetimezone)TYPE_CHECKINGTypeVarGeneric)format_timestamp)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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y)Batcherd   i  g      @ returnNc                    g | _         || _        || _        d| _        t	        j
                         | _        t	        j                         | _        t	        j                         | _
        d | _        d | _        t        t        d      r<t        j                   | j"                        dfd}t        j$                  |       y y )NTregister_at_forkc                  (            } |  |         y y N )method
weak_resets    =/root/env/lib/python3.12/site-packages/sentry_sdk/_batcher.py_reset_in_childz)Batcher.__init__.<locals>._reset_in_child.   s    #%H &    )after_in_childr   N)_buffer_capture_func_record_lost_func_running	threadingLock_locklocal_activeEvent_flush_event_flusher_flusher_pidhasattrosweakref
WeakMethod_reset_thread_stater   )selfcapture_funcrecord_lost_funcr   r   s       @r   __init__zBatcher.__init__   s    
 #%)!1^^%
*3//*;/8/@6:-1 2)* ++D,D,DEJ
 ? +r   c                     g | _         d| _        t        j                         | _        t        j
                         | _        t        j                         | _        d | _	        d | _
        y NT)r!   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r3   s    r   r2   zBatcher._reset_thread_state5   sJ    ^^%
 (%OO- r   c                    | j                   syt        j                         }| j                  |k(  ry| j                  5  | j                  |k(  r
	 ddd       y|| _        t        j                  | j                        | _        d| j                  _	        	 | j                  j                          	 ddd       y# t        $ r d| _         Y ddd       yw xY w# 1 sw Y   yxY w)zFor forking processes we might need to restart this thread.
        This ensures that our process actually has that thread running.
        FTN)target)r$   r/   getpidr-   r'   r%   Thread_flush_loopr,   daemonstartRuntimeError)r3   pids     r   _ensure_threadzBatcher._ensure_thread>   s     }}iik#ZZ 	   C'		 	 !$D%,,D4D4DEDM#'DMM ##%	&     !&#	 		& s/   C=CB::C
CCCC!c                 "   d| j                   _        | j                  rr| j                  j	                  | j
                  t        j                         z          | j                  j                          | j                          | j                  rqy y r8   )	r)   flagr$   r+   waitFLUSH_WAIT_TIMErandomclear_flushr9   s    r   r>   zBatcher._flush_loop^   s`    
 !mm""4#7#7&--/#IJ##%KKM mmr   c                    t        | j                  dd      ry d| j                  _        	 | j                         r| j                  	 d| j                  _        y | j
                  5  t        | j                        | j                  k\  r,| j                  |       	 d d d        d| j                  _        y | j                  j                  |       t        | j                        | j                  k\  r| j                  j                          d d d        d| j                  _        y # 1 sw Y   xY w# d| j                  _        w xY wNrE   FT)getattrr)   rE   rC   r,   r'   lenr!   MAX_BEFORE_DROP_record_lostappendMAX_BEFORE_FLUSHr+   setr3   items     r   addzBatcher.addi   s    4<</ 	&&&(DMM,A !&DLL  ,t||$(<(<<%%d+, !&DLL	 ##D)t||$(=(==%%))+, !&DLL, , !&DLLs6   D2 D2 &5D&D2 5AD&D2 &D/+D2 2Ec                 n    | j                   y d| _        | j                  j                          d | _         y )NF)r,   r$   r+   rS   r9   s    r   killzBatcher.kill   s/    == r   c                     t        | j                  dd      }d| j                  _        	 | j                          || j                  _        y # || j                  _        w xY wrL   )rM   r)   rE   rJ   )r3   
was_actives     r   flushzBatcher.flush   sG    T\\659
 	+KKM *DLL
DLLs   A Ac                    |j                  t        | j                  | j                  dt	        | j
                        it        d| j
                  D cg c]  }| j                  |       c}i                   y c c}w )N
item_countitems)json)typecontent_typeheaderspayload)add_itemr
   TYPECONTENT_TYPErN   r!   r   _to_transport_format)r3   enveloperU   s      r   _add_to_envelopezBatcher._add_to_envelope   st    YY!.. #dll"3 #HL"@DD55d;"	
"s   A<c                 t   t        dt        t        j                  t        j
                              i      }| j                  5  t        | j                        dk(  r
	 d d d        y | j                  |       | j                  j                          d d d        | j                  |       |S # 1 sw Y   xY w)Nsent_at)rb   r   )r	   r   r   nowr   utcr'   rN   r!   ri   rI   r"   )r3   rh   s     r   rJ   zBatcher._flush   s     0hll1K LM
 ZZ 	!4<< A%	! 	! !!(+LL 	! 	8$	! 	!s   B.(+B..B7c                      y r   r   rT   s     r   rP   zBatcher._record_lost   s    r   c                      y r   r   )rU   s    r   rg   zBatcher._to_transport_format   s    r   )r4   zCallable[[Envelope], None]r5   zCallable[..., None]r   Nr    )rU   r   r   N)rh   r	   r   N)r   zOptional[Envelope])rU   r   r   r   )__name__
__module____qualname__rR   rO   rG   re   rf   r6   r2   boolrC   r>   rV   rX   r[   ri   rJ   rP   staticmethodrg   r   r   r   r   r      s    OODL@2@ 0@ 
	@8! @	&2+
$  r   r   )r/   rH   r%   r   r   typingr   r   r   r0   sentry_sdk.utilsr   sentry_sdk.enveloper	   r
   r   r   r   r   r   r   r   r   r   <module>rx      sG    	   ' 2 2  - : :..CLfgaj fr   