o
    0 i                     @   s   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m	Z	m
Z
mZ d dlmZmZ d dlmZmZmZ e	r>d dlmZ G dd dZdS )	    N)datetimetimezone)OptionalListCallableTYPE_CHECKINGAnyUnion)format_timestamp	safe_repr)EnvelopeItem
PayloadRef)Metricc                   @   s\   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	dd Z
dd Zedd Zdd ZdS )MetricsBatcheri  i'  g      @c                 C   s<   g | _ || _|| _d| _t | _t | _d | _	d | _
d S )NT)_metric_buffer_capture_func_record_lost_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfZcapture_funcZrecord_lost_func r   g/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/_metrics_batcher.py__init__   s   


zMetricsBatcher.__init__c              	   C   s   | j sdS t }| j|krdS | jA | j|kr"	 W d    dS || _tj| jd| _d| j_	z| j
  W n tyK   d| _ Y W d    dS w W d    dS 1 sWw   Y  dS )NFT)target)r   osgetpidr   r   r   Thread_flush_loopr   daemonstartRuntimeError)r   pidr   r   r   _ensure_thread$   s0   


zMetricsBatcher._ensure_threadc                 C   s<   | j r| j| jt   | j  |   | j sd S d S N)r   r   waitFLUSH_WAIT_TIMErandomclear_flushr   r   r   r   r$   >   s
   
zMetricsBatcher._flush_loopc                 C   s   |   r	| jd u rd S | j= t| j| jkr(| jdddd 	 W d    d S | j| t| j| jkrC| j	
  W d    d S W d    d S 1 sNw   Y  d S )NZqueue_overflowtrace_metric   )reasonZdata_categoryZquantity)r)   r   r   lenr   MAX_METRICS_BEFORE_DROPr   appendMAX_METRICS_BEFORE_FLUSHr   set)r   metricr   r   r   addE   s"   	
"zMetricsBatcher.addc                 C   s(   | j d u rd S d| _| j  d | _ d S )NF)r   r   r   r8   r0   r   r   r   killZ   s
   


zMetricsBatcher.killc                 C   s   |    d S r*   )r/   r0   r   r   r   flushc   s   zMetricsBatcher.flushc                    s|   dd  | d | d | d | d | d  fdd	| d
   D d}| dd ur/| d |d< | dd ur<| d |d< |S )Nc                 S   s^   t | tr
| ddS t | tr| ddS t | tr| ddS t | tr(| ddS t| ddS )Nboolean)valuetypeintegerdoublestring)
isinstanceboolintfloatstrr   )valr   r   r   format_attributej   s   







zDMetricsBatcher._metric_to_transport_format.<locals>.format_attribute	timestamptrace_idnamer?   r>   c                    s   i | ]	\}}| |qS r   r   ).0kvrI   r   r   
<dictcomp>|   s    z>MetricsBatcher._metric_to_transport_format.<locals>.<dictcomp>
attributes)rJ   rK   rL   r?   r>   rR   Zspan_idunit)itemsget)r9   resr   rP   r   _metric_to_transport_formatg   s   

z*MetricsBatcher._metric_to_transport_formatc                    s   t dtttjid} j: t jdkr!	 W d    d S |	t
dddt jitd fdd	 jD id
d  j  W d    n1 sMw   Y   | |S )NZsent_at)headersr   r1   z.application/vnd.sentry.items.trace-metric+json
item_countrT   c                    s   g | ]}  |qS r   )rW   )rM   r9   r0   r   r   
<listcomp>   s    z)MetricsBatcher._flush.<locals>.<listcomp>)json)r?   content_typerX   payload)r   r
   r   nowr   utcr   r4   r   Zadd_itemr   r   r.   r   )r   enveloper   r0   r   r/      s2   

zMetricsBatcher._flushN)__name__
__module____qualname__r7   r5   r,   r   r)   r$   r:   r;   r<   staticmethodrW   r/   r   r   r   r   r      s    	
!r   )r!   r-   r   r   r   typingr   r   r   r   r   r	   Zsentry_sdk.utilsr
   r   Zsentry_sdk.enveloper   r   r   Zsentry_sdk._typesr   r   r   r   r   r   <module>   s     