
    j                         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
mZmZ d dlmZmZ erd dlmZmZmZ d d	lmZ  G d
 ded         Zy)    N)defaultdict)datetimetimezone)TYPE_CHECKING)Batcher)EnvelopeItem
PayloadRef)format_timestampserialize_attribute)AnyCallableOptional)StreamedSpanc                   x    e Zd ZdZdZdZdZdZdZdZ		 	 	 	 	 	 dd	Z
ddZedd
defd       Zedd       ZddZy)SpanBatcheri  i  i  P g      @spanz)application/vnd.sentry.items.span.v2+jsonreturnNc                 *   t        t              | _        t        d       | _        || _        || _        d| _        t        j                         | _	        t        j                         | _        t        j                         | _        d | _        d | _        y )Nc                       y)Nr    r       q/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/sentry_sdk/_span_batcher.py<lambda>z&SpanBatcher.__init__.<locals>.<lambda>)   s    r   T)r   list_span_buffer_running_size_capture_func_record_lost_func_running	threadingLock_locklocal_activeEvent_flush_event_flusher_flusher_pid)selfcapture_funcrecord_lost_funcs      r   __init__zSpanBatcher.__init__   sp     >I=N-8-C)!1^^%
*3//*;/8/@6:-1r   r   c                    t        | j                  dd      ry d| j                  _        	 | j                         r| j                  	 d| j                  _        y | j
                  5  t        | j                  |j                           }|| j                  k\  r/| j                  ddd       	 d d d        d| j                  _        y | j                  |j                     j                  |       | j                  |j                  xx   | j                  |      z  cc<   |dz   | j                  k\  r5| j                  j!                          	 d d d        d| j                  _        y | j                  |j                     | j"                  k\  r5| j                  j!                          	 d d d        d| j                  _        y 	 d d d        d| j                  _        y # 1 sw Y   xY w# d| j                  _        w xY w)NflagFTqueue_overflowr      )reasondata_categoryquantity)getattrr%   r/   _ensure_threadr(   r#   lenr   trace_idMAX_BEFORE_DROPr   appendr   _estimate_sizeMAX_BEFORE_FLUSHr'   setMAX_BYTES_BEFORE_FLUSH)r*   r   sizes      r   addzSpanBatcher.add5   s    4<</ 	&&&(DMM,A. !&DLL+ 4,,T]];<4///**/&,!" + 
   * !&DLL !!$--077=""4==1T5H5H5NN1!8t444%%))+ * !&DLL	 %%dmm48S8SS%%))+' * !&DLL	 T# * !&DLL+ * !&DLLsJ   G( G( &AG-G( BGG( &AG'G( G( G%!G( (G;itemc                 8    ddt        | j                        z  z   S )N   F   )r7   _attributes)rA   s    r   r;   zSpanBatcher._estimate_size[   s    
 R#d..////r   c                    | j                   | j                  | j                  | j                  | j	                         | j
                  j                         d}| j                  r| j                  j                         |d<   | j                  r| j                  |d<   | j                  r:| j                  j                         D ci c]  \  }}|t        |       c}}|d<   |S c c}}w )N)r8   span_idnamestatus
is_segmentstart_timestampend_timestampparent_span_id
attributes)r8   rG   _name_status_is_segment_start_timestamp	timestamp
_timestamp_parent_span_idrE   itemsr   )rA   reskvs       r   _to_transport_formatz SpanBatcher._to_transport_formatb   s     ||JJll**,#44>>@!
 ??#'??#<#<#>C $($8$8C !8<8H8H8N8N8P!8Pfq!&q))8P!C 
	!s   C$c                    | j                   5  t        | j                        dk(  r
	 d d d        y g }| j                  j                         D ]  \  }}|s
|d   j	                         }t        dt        |      | j                        D ]  }t        || j                  z   t        |            }t        t        t        j                  t        j                              |d      }|j                  t        | j                   | j"                  d||z
  it%        dt        ||      D cg c]  }| j'                  ||          c}i                   |j)                  |         | j                  j+                          | j,                  j+                          d d d        D ]  }| j/                  |        y c c}w # 1 sw Y   'xY w)Nr   )sent_attrace)headers
item_countrV   )json)typecontent_typer^   payload)r#   r7   r   rV   _dynamic_sampling_contextrangeMAX_ENVELOPE_SIZEminr   r   r   nowr   utcadd_itemr	   TYPECONTENT_TYPEr
   rZ   r:   clearr   r   )	r*   	envelopesr8   spansdscstartendenvelopejs	            r   _flushzSpanBatcher._flush{   s   ZZ4$$%* Z I#'#4#4#:#:#<%(<<>C "'q#e*d6L6L!M!%$*@*@"@#e*M#++;HLL<V+W),%$ !)) %)YY-1->->$0#+)" )3(/5:5#5F2*5F -1,E,EeAh,O5F2**&)"$ "((29 "N $=H ##%$$&U X "Hx( "2*= Zs*   G%GCG'F?AG?GG)r+   zCallable[[Envelope], None]r,   zCallable[..., None]r   N)r   r   r   N)rA   r   r   r   )r   N)__name__
__module____qualname__rf   r<   r9   r>   FLUSH_WAIT_TIMErk   rl   r-   r@   staticmethodintr;   rZ   ru   r   r   r   r   r      s     O,OD>L222 02 
	2.$&L 0^ 0 0 0  0.)r   r   r   )r!   collectionsr   r   r   typingr   sentry_sdk._batcherr   sentry_sdk.enveloper   r	   r
   sentry_sdk.utilsr   r   r   r   r   sentry_sdk.tracesr   r   r   r   r   <module>r      s<     # '   ' : : B...Z)'.) Z)r   