
    `i                         d dl Z d dlmZ d dlmZmZ d dl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 erd d	lmZmZmZ d d
lmZ d dlmZ  G d ded                   ZdS )    N)defaultdict)datetimetimezone)TYPE_CHECKING)Batcher)
SPANSTATUS)EnvelopeItem
PayloadRef)format_timestampserialize_attribute	safe_repr)AnyCallableOptional)StreamedSpan)SerializedAttributeValuec                   j    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edd            ZddZdS )SpanBatcheri  i  g      @span)application/vnd.sentry.items.span.v2+jsoncapture_funcCallable[[Envelope], None]record_lost_funcCallable[..., None]returnNc                     t          t                    | _        || _        || _        d| _        t          j                    | _        t          j	                    | _
        d | _        d | _        d S )NT)r   list_span_buffer_capture_func_record_lost_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfr   r   s      l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sentry_sdk/_span_batcher.py__init__zSpanBatcher.__init__   s`     >I=N=N)!1^%%
/8/@/@6:-1    c                 b    t          d | j                                        D                       S )Nc              3   4   K   | ]}t          |          V  d S )N)len).0buffers     r+   	<genexpr>z'SpanBatcher.get_size.<locals>.<genexpr>2   s(      HH63v;;HHHHHHr-   )sumr   values)r*   s    r+   get_sizezSpanBatcher.get_size0   s.    HHT->-E-E-G-GHHHHHHr-   r   c                    |                                  r| j        d S | j        5  |                                 }|| j        k    r&|                     ddd           	 d d d            d S | j        |j                                     |           |dz   | j	        k    r| j
                                         d d d            d S # 1 swxY w Y   d S )Nqueue_overflowr      )reasondata_categoryquantity)_ensure_threadr(   r%   r6   MAX_BEFORE_DROPr!   r   trace_idappendMAX_BEFORE_FLUSHr'   set)r*   r   sizes      r+   addzSpanBatcher.add4   sC   ""$$ 	(=4Z 	( 	(==??Dt+++&&+"( '   
 	( 	( 	( 	( 	( 	( 	( 	( dm,33D999ax4000!%%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   9C+ACCCitemr   c                 r    d| j         i}| j        r&d | j                                        D             |d<   |S )Nnamec                 4    i | ]\  }}|t          |          S  )r   )r1   kvs      r+   
<dictcomp>z4SpanBatcher._to_transport_format.<locals>.<dictcomp>N   s4     ! ! !.4q!&q))! ! !r-   
attributes)rG   _attributesitems)rE   ress     r+   _to_transport_formatz SpanBatcher._to_transport_formatF   sX     DI!
  	! !8<8H8N8N8P8P! ! !C 
r-   c                      j         5  t           j                  dk    r	 d d d            d S g } j                                        D ]\  }}|rd }t	          t          t          j        t          j	                            |d          }|
                    t          dddt          |          it          d fd|D             i	          
                     |                    |            j                                         d d d            n# 1 swxY w Y   |D ]}                     |           d S )Nr   )sent_attrace)headersr   r   
item_countrO   c                 :    g | ]}                     |          S rI   )rQ   )r1   r   r*   s     r+   
<listcomp>z&SpanBatcher._flush.<locals>.<listcomp>p   s7     .& .& .&,0 )-(A(A$(G(G.& .& .&r-   )json)typecontent_typerU   payload)r%   r0   r   rO   r	   r   r   nowr   utcadd_itemr
   r   r@   clearr    )r*   	envelopesr?   spansdscenvelopes   `     r+   _flushzSpanBatcher._flushT   s   Z &	& &	&4$%%**&	& &	& &	& &	& &	& &	& &	& &	& I#'#4#:#:#<#< / /% / C''7X\8R8R'S'S%(! !     H %%!')T ,c%jj% %/$+ .& .& .& .&49.& .& .&&"% % %    $ $$X...##%%%M&	& &	& &	& &	& &	& &	& &	& &	& &	& &	& &	& &	& &	& &	& &	&P " 	) 	)Hx((((	) 	)s   DC DD #D )r   r   r   r   r   N)r   r   r   N)rE   r   r   r   )r   N)__name__
__module____qualname__rA   r>   FLUSH_WAIT_TIMETYPECONTENT_TYPEr,   intr6   rD   staticmethodrQ   re   rI   r-   r+   r   r      s         OOD>L222 02 
	2 2 2 2*I# I I I I( ( ( ($    \*) *) *) *) *) *)r-   r   r   )r#   collectionsr   r   r   typingr   sentry_sdk._batcherr   sentry_sdk.constsr   sentry_sdk.enveloper	   r
   r   sentry_sdk.utilsr   r   r   r   r   r   sentry_sdk.tracesr   sentry_sdk._typesr   r   rI   r-   r+   <module>rv      s:       # # # # # # ' ' ' ' ' ' ' '             ' ' ' ' ' ' ( ( ( ( ( ( : : : : : : : : : : M M M M M M M M M M ;................::::::m) m) m) m) m)'.) m) m) m) m) m)r-   