o
    S۷i6                     @   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
 d dlmZmZmZ d dlmZmZmZ erPd d	lmZmZmZ d d
lmZ d dlmZ G d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                   @   sf   e Zd ZdZdZdZdZdZ						
	dddZd
e	fddZ
dddZedddZd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                 C   s@   t t| _|| _|| _d| _t | _t	 | _
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    r(   N/home/ubuntu/vllm_env/lib/python3.10/site-packages/sentry_sdk/_span_batcher.py__init__   s   




zSpanBatcher.__init__c                 C   s   t dd | j D S )Nc                 s   s    | ]}t |V  qd S )N)len).0bufferr(   r(   r)   	<genexpr>2   s    z'SpanBatcher.get_size.<locals>.<genexpr>)sumr   valuesr'   r(   r(   r)   get_size0   s   zSpanBatcher.get_sizer   c                 C   s   |   r	| jd u rd S | j@ |  }|| jkr)| jdddd 	 W d    d S | j|j | |d | j	krF| j
  W d    d S W d    d S 1 sQw   Y  d S )Nqueue_overflowr      )reasondata_categoryquantity)_ensure_threadr%   r"   r2   MAX_BEFORE_DROPr   r   trace_idappendMAX_BEFORE_FLUSHr$   set)r'   r   sizer(   r(   r)   add4   s$   

"zSpanBatcher.additemr   c                 C   s4   | j | j| jd}| jrdd | j D |d< |S )N)span_idnamestatusc                 S   s   i | ]	\}}|t |qS r(   )r   )r,   kvr(   r(   r)   
<dictcomp>P   s    z4SpanBatcher._to_transport_format.<locals>.<dictcomp>
attributes)rA   _name_status_attributesitems)r@   resr(   r(   r)   _to_transport_formatF   s   
z SpanBatcher._to_transport_formatc                    s    j [ t jdkr	 W d    d S g } j D ]6\}}|rQd }ttttj	|dd}|
tdddt|itd fdd	|D id
d || q j  W d    n1 saw   Y  |D ]} | qhd S )Nr   )sent_attrace)headersr   r   
item_countrK   c                    s   g | ]}  |qS r(   )rM   )r,   r   r1   r(   r)   
<listcomp>r   s    z&SpanBatcher._flush.<locals>.<listcomp>)json)typecontent_typerP   payload)r"   r+   r   rK   r   r   r   nowr   utcadd_itemr	   r
   r;   clearr   )r'   	envelopesr:   spansdscenveloper(   r1   r)   _flushV   sD   
(zSpanBatcher._flush)r   r   r   r   r   N)r   r   r   N)r@   r   r   r   )r   N)__name__
__module____qualname__r<   r9   FLUSH_WAIT_TIMETYPECONTENT_TYPEr*   intr2   r?   staticmethodrM   r_   r(   r(   r(   r)   r      s$    

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   r(   r(   r(   r)   <module>   s    