
    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y)	    N)datetimetimezone)OptionalListCallableTYPE_CHECKINGAnyUnion)format_timestamp	safe_repr)EnvelopeItem
PayloadRef)Metricc                   N    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
ed	        Zd
 Zy)MetricsBatcherd   g      @c                     g | _         || _        d| _        t        j                         | _        t        j                         | _        d | _        d | _	        y )NT)
_metric_buffer_capture_func_running	threadingLock_lockEvent_flush_event_flusher_flusher_pid)selfcapture_funcs     {/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/sentry_sdk/_metrics_batcher.py__init__zMetricsBatcher.__init__   sG    
 !)^^%
%OO-     c                    | j                   syt        j                         }| j                  |k(  ry| j                  5  | j                  |k(  r
	 d d d        y|| _        t        j                  | j                        | _        d| j                  _	        	 | j                  j                          	 d d d        y# t        $ r d| _         Y d d d        yw xY w# 1 sw Y   yxY w)NFT)target)r   osgetpidr   r   r   Thread_flush_loopr   daemonstartRuntimeError)r   pids     r!   _ensure_threadzMetricsBatcher._ensure_thread!   s    }}iik#ZZ 	  C'	 	 !$D%,,D4D4DEDM#'DMM ##%	 	    %	 		 s/   C=CB::C
CCCC!c                     | j                   rr| j                  j                  | j                  t	        j                         z          | j                  j                          | j                          | j                   rqy y N)r   r   waitFLUSH_WAIT_TIMErandomclear_flushr   s    r!   r)   zMetricsBatcher._flush_loop;   sR    mm""4#7#7&--/#IJ##%KKM mmr#   c                 .   | j                         r| j                  y | j                  5  | j                  j	                  |       t        | j                        | j                  k\  r| j                  j                          d d d        y # 1 sw Y   y xY wr0   )	r.   r   r   r   appendlenMAX_METRICS_BEFORE_FLUSHr   set)r   metrics     r!   addzMetricsBatcher.addB   sw    
 ""$(=ZZ 	(&&v.4&&'4+H+HH!!%%'	( 	( 	(s   ABBc                 n    | j                   y d| _        | j                  j                          d | _         y )NF)r   r   r   r;   r6   s    r!   killzMetricsBatcher.killO   s/    == r#   c                 $    | j                          y r0   )r5   r6   s    r!   flushzMetricsBatcher.flushX   s    r#   c                    d }| d   | d   | d   | d   | d   | d   j                         D ci c]  \  }}| ||       c}}d}| j                  d	      | d	   |d	<   | j                  d
      | d
   |d
<   |S c c}}w )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_attribute_   se    #t$!$i88#s#!$i88#u%!$h77#s#!$h77&s^X>>r#   	timestamptrace_idnamerF   rE   
attributes)rQ   rR   rS   rF   rE   rT   span_idunit)itemsget)r<   rP   kvress        r!   _metric_to_transport_formatz*MetricsBatcher._metric_to_transport_format\   s    
	?  ,z*6N6NG_5;L5I5O5O5Q+1Aq#A&&	
 ::i ,#I.C	N::f) .CK
s   A;c                 (   t        dt        t        j                  t        j
                              i      }| j                  5  t        | j                        dk(  r
	 d d d        y |j                  t        dddt        | j                        it        d| j                  D cg c]  }| j                  |       c}i      	             | j                  j                          d d d        | j                  |       |S c c}w # 1 sw Y   !xY w)
Nsent_at)headersr   trace_metricz.application/vnd.sentry.items.trace-metric+json
item_countrW   )json)rF   content_typer_   payload)r   r   r   nowr   utcr   r9   r   add_itemr   r   r\   r4   r   )r   enveloper<   s      r!   r5   zMetricsBatcher._flush~   s     0hll1K LM
 ZZ 	(4&&'1,	( 	( '!Q$c$*=*=&> '#.2.A.A&$* !% @ @ H&" %%'+	(. 	8$&	( 	(s$   D(<D$D<,DDDN)__name__
__module____qualname__r:   r2   r"   r.   r)   r=   r?   rA   staticmethodr\   r5    r#   r!   r   r      sE    "O!4(  Br#   r   )r&   r3   r   r   r   typingr   r   r   r   r	   r
   sentry_sdk.utilsr   r   sentry_sdk.enveloper   r   r   sentry_sdk._typesr   r   rm   r#   r!   <module>rr      s2    	   ' F F 8 : :(N Nr#   