o
    ai                     @   s   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rBd dlmZmZmZ d d	lmZ G d
d ded ZdS )    N)defaultdict)datetimetimezone)TYPE_CHECKING)Batcher)EnvelopeItem
PayloadRef)format_timestampserialize_attribute)AnyCallableOptional)StreamedSpanc                   @   sv   e Zd ZdZdZdZdZdZdZdZ						
		dddZ
dddZedddefddZedddZdddZdS )SpanBatcheri  i  i  P g      @spanz)application/vnd.sentry.items.span.v2+jsoncapture_funcCallable[[Envelope], None]record_lost_funcCallable[..., None]returnNc                 C   sX   t t| _t dd | _|| _|| _d| _t | _	t
 | _t | _d | _d | _d S )Nc                   S   s   dS )Nr    r   r   r   V/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/sentry_sdk/_span_batcher.py<lambda>)   s    z&SpanBatcher.__init__.<locals>.<lambda>T)r   list_span_buffer_running_size_capture_func_record_lost_func_running	threadingLock_locklocal_activeEvent_flush_event_flusher_flusher_pid)selfr   r   r   r   r   __init__   s   





zSpanBatcher.__init__r   c                 C   sf  t | jddr	d S d| j_z|  r| jd u rW d| j_d S | jw t| j|j }|| j	krE| j
dddd 	 W d    W d| j_d S | j|j | | j|j  | |7  < |d | jkru| j  	 W d    W d| j_d S | j|j | jkr| j  	 W d    W d| j_d S W d    n1 sw   Y  W d| j_d S W d| j_d S d| j_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   sizer   r   r   add5   sF   


zSpanBatcher.additemc                 C   s   ddt | j  S )N   F   )r3   _attributes)r=   r   r   r   r7   [   s   zSpanBatcher._estimate_sizer   c                 C   sj   | j | j| j| j|  | j d}| jr| j |d< | jr$| j|d< | j	r3dd | j	
 D |d< |S )N)r4   span_idnamestatus
is_segmentstart_timestampend_timestampparent_span_idc                 S   s   i | ]	\}}|t |qS r   )r   ).0kvr   r   r   
<dictcomp>u   s    z4SpanBatcher._to_transport_format.<locals>.<dictcomp>
attributes)r4   rA   _name_status_is_segment_start_timestamp	timestamp
_timestamp_parent_span_idr@   items)r=   resr   r   r   _to_transport_formatb   s    	

z SpanBatcher._to_transport_formatc                    s.   j  t jdkr	 W d    d S g } j D ]V\}rqd  }tdt jD ]@}t| j t}tt	t
tj|dd}|t j jd|| itd fddt||D idd	 || q0q j   j  W d    n1 sw   Y  |D ]} | qd S )
Nr   )sent_attrace)headers
item_countrT   c                    s   g | ]	}  | qS r   )rV   )rH   jr)   spansr   r   
<listcomp>   s    z&SpanBatcher._flush.<locals>.<listcomp>)json)typecontent_typerY   payload)r"   r3   r   rT   _dynamic_sampling_contextrangeMAX_ENVELOPE_SIZEminr   r
   r   nowr   utcadd_itemr   TYPECONTENT_TYPEr	   r6   clearr   r   )r)   	envelopesr4   dscstartendenveloper   r\   r   _flush{   sJ   
,zSpanBatcher._flush)r   r   r   r   r   N)r   r   r   N)r=   r   r   r   )r   N)__name__
__module____qualname__re   r8   r5   r:   FLUSH_WAIT_TIMErj   rk   r*   r<   staticmethodintr7   rV   rr   r   r   r   r   r      s*    

&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   r   <module>   s    