
    fi                         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          ZdS )	    N)datetimetimezone)OptionalListCallableTYPE_CHECKINGAnyUnion)format_timestamp	safe_repr)EnvelopeItem
PayloadRef)Metricc                   Z    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
d	 Zed
             Zd ZdS )MetricsBatcheri  i'  g      @c                     g | _         || _        || _        d| _        t	          j                    | _        t	          j                    | _        d | _	        d | _
        d S )NT)_metric_buffer_capture_func_record_lost_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfcapture_funcrecord_lost_funcs      k/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/sentry_sdk/_metrics_batcher.py__init__zMetricsBatcher.__init__   sW     !)!1^%%
%O--     c                    | j         sdS t          j                    }| j        |k    rdS | j        5  | j        |k    r	 d d d            dS || _        t          j        | j                  | _        d| j        _	        	 | j        
                                 n## t          $ r d| _         Y d d d            dS w xY w	 d d d            n# 1 swxY w Y   dS )NFT)target)r   osgetpidr   r   r   Thread_flush_loopr   daemonstartRuntimeError)r   pids     r"   _ensure_threadzMetricsBatcher._ensure_thread$   sf   } 	5ikk##4Z 	 	 C''	 	 	 	 	 	 	 	 !$D%,D4DEEEDM#'DM ##%%%%    %	 	 	 	 	 	 	 	 &	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ts;   C2C>BCB8)C7B88CCCc                     | j         ri| j                            | j        t	          j                    z              | j                                         |                                  | j         gd S d S N)r   r   waitFLUSH_WAIT_TIMErandomclear_flushr   s    r"   r*   zMetricsBatcher._flush_loop>   ss    m 	""4#7&-//#IJJJ##%%%KKMMM m 	 	 	 	 	r$   c                    |                                  r| j        d S | j        5  t          | j                  | j        k    r&|                     ddd           	 d d d            d S | j                            |           t          | j                  | j        k    r| j	        
                                 d d d            d S # 1 swxY w Y   d S )Nqueue_overflowtrace_metric   )reasondata_categoryquantity)r/   r   r   lenr   MAX_METRICS_BEFORE_DROPr   appendMAX_METRICS_BEFORE_FLUSHr   set)r   metrics     r"   addzMetricsBatcher.addE   sC   
 ""$$ 	(=4Z 	( 	(4&''4+GGG&&+"0 '   
 	( 	( 	( 	( 	( 	( 	( 	( &&v...4&''4+HHH!%%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   7C)ACC
C
c                 f    | j         d S d| _        | j                                         d | _         d S )NF)r   r   r   rC   r7   s    r"   killzMetricsBatcher.killZ   s6    = Fr$   c                 .    |                                   d S r1   )r6   r7   s    r"   flushzMetricsBatcher.flushc   s    r$   c                 $   d | d         | d         | d         | d         | d         fd| d                                          D             d	}|                     d
          | d
         |d
<   |                     d          | d         |d<   |S )Nc                     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   )vals    r"   format_attributezDMetricsBatcher._metric_to_transport_format.<locals>.format_attributej   s    #t$$ 9!$i888#s## 9!$i888#u%% 8!$h777#s## 8!$h777&s^^X>>>r$   	timestamptrace_idnamerN   rM   c                 .    i | ]\  }}| |          S  r]   ).0kvrX   s      r"   
<dictcomp>z>MetricsBatcher._metric_to_transport_format.<locals>.<dictcomp>|   s8       +1Aq##A&&  r$   
attributes)rY   rZ   r[   rN   rM   rb   span_idunit)itemsget)rD   resrX   s     @r"   _metric_to_transport_formatz*MetricsBatcher._metric_to_transport_formatg   s    
	? 
	? 
	?  ,z*6N6NG_   5;L5I5O5O5Q5Q  	
 	
 ::i  ,#I.C	N::f) .CK
r$   c                     t          dt          t          j        t          j                            i          } j        5  t           j                  dk    r	 d d d            d S |	                    t          dddt           j                  it          d fd j        D             i	          
                      j                                         d d d            n# 1 swxY w Y                        |           |S )Nsent_at)headersr   r:   z.application/vnd.sentry.items.trace-metric+json
item_countre   c                 :    g | ]}                     |          S r]   )rh   )r^   rD   r   s     r"   
<listcomp>z)MetricsBatcher._flush.<locals>.<listcomp>   s7     & & &$* !% @ @ H H& & &r$   )json)rN   content_typerk   payload)r   r   r   nowr   utcr   r?   r   add_itemr   r   r5   r   )r   envelopes   ` r"   r6   zMetricsBatcher._flush   s     0hl1K1K L LM
 
 
 Z 	( 	(4&''1,,	( 	( 	( 	( 	( 	( 	( 	( '!Q$c$*=&>&> '# & & & &.2.A& & &      " %%'''+	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(. 	8$$$s   C++A4C++C/2C/N)__name__
__module____qualname__rB   r@   r3   r#   r/   r*   rE   rG   rI   staticmethodrh   r6   r]   r$   r"   r   r      s        #$O! ! !"  4  ( ( (*       \B    r$   r   )r'   r4   r   r   r   typingr   r   r   r   r	   r
   sentry_sdk.utilsr   r   sentry_sdk.enveloper   r   r   sentry_sdk._typesr   r   r]   r$   r"   <module>r~      s    				      ' ' ' ' ' ' ' ' F F F F F F F F F F F F F F F F 8 8 8 8 8 8 8 8 : : : : : : : : : : )((((((Y Y Y Y Y Y Y Y Y Yr$   