§
    xÅjb"  ã                   óÖ   — d dl Z d dlZd dlZd dlZ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mZ e
rd dl	mZmZmZ d d	lmZ  G d
„ ded         ¦  «        ZdS )é    N)Údefaultdict)ÚdatetimeÚtimezone)ÚTYPE_CHECKING)ÚBatcher)ÚEnvelopeÚItemÚ
PayloadRef)Úcapture_internal_exceptionsÚformat_timestampÚserialize_attribute)ÚAnyÚCallableÚOptional)ÚSpanJSONc                   ó    — e Zd ZdZdZdZdZdZdZdZ		 	 	 	 	 	 dd„Z
dd„Zdd„Zdd„Zedddefd„¦   «         Zedd„¦   «         Zddeddf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                 ó&  ‡— t          t          ¦  «        | _        t          d„ ¦  «        | _        || _        || _        d| _        t          j        ¦   «         | _	        t          j
        ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        t#          ¦   «         | _        d | _        d | _        t+          t,          d¦  «        r6t/          j        | j        ¦  «        Šdˆfd„}t-          j        |¬¦  «         d S d S )Nc                  ó   — dS ©Nr   © r   ó    úIC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/_span_batcher.pyú<lambda>z&SpanBatcher.__init__.<locals>.<lambda>3   s   € À€ r   TÚregister_at_forkr   c                  ó8   •—  ‰¦   «         } | � | ¦   «          d S d S )Nr   )ÚmethodÚ
weak_resets    €r   Ú_reset_in_childz-SpanBatcher.__init__.<locals>._reset_in_childE   s+   ø€ Ø#˜™œ�ØÐ%Ø�F‘H”H�H�H�Hð &Ð%r   )Úafter_in_child©r   N)r   ÚlistÚ_span_bufferÚ_running_sizeÚ_capture_funcÚ_record_lost_funcÚ_runningÚ	threadingÚLockÚ_lockÚlocalÚ_activeÚtimeÚ	monotonicÚ_last_full_flushÚEventÚ_flush_eventÚsetÚ_pending_flushÚ_flusherÚ_flusher_pidÚhasattrÚosÚweakrefÚ
WeakMethodÚ_reset_thread_stater!   )Úselfr   r   r%   r$   s       @r   Ú__init__zSpanBatcher.__init__(   s  ø€ õ :EÅTÑ9JÔ9JˆÔÝ-8¸¸Ñ-CÔ-CˆÔØ)ˆÔØ!1ˆÔØˆŒÝ”^Ñ%Ô%ˆŒ
Ý*3¬/Ñ*;Ô*;ˆŒå'+¤~Ñ'7Ô'7ˆÔÝ%œOÑ-Ô-ˆÔÝ(+©¬ˆÔà6:ˆŒØ-1ˆÔõ •2Ð)Ñ*Ô*ð 	@Ý Ô+¨DÔ,DÑEÔEˆJðð ð ð ð ð õ
 Ô¨Ð?Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@r   c                 ór  — t          t          ¦  «        | _        t          d„ ¦  «        | _        d| _        t          j        ¦   «         | _        t          j        ¦   «         | _	        t          j        ¦   «         | _        t          j        ¦   «         | _        t          ¦   «         | _        d | _        d | _        d S )Nc                  ó   — dS r   r   r   r   r   r    z1SpanBatcher._reset_thread_state.<locals>.<lambda>N   s   € °€ r   T)r   r(   r)   r*   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   )rA   s    r   r@   zSpanBatcher._reset_thread_stateL   sŠ   € Ý'­Ñ-Ô-ˆÔÝ(¨¨Ñ3Ô3ˆÔØˆŒå”^Ñ%Ô%ˆŒ
Ý ”Ñ(Ô(ˆŒå $¤Ñ 0Ô 0ˆÔÝ%œOÑ-Ô-ˆÔÝ!™eœeˆÔàˆŒØ ˆÔÐÐr   c                 ó  — d| j         _        | j        ròt          j        ¦   «         | j        z  dz  }| j                             | j        |z   ¬¦  «         | j                             ¦   «          t          ¦   «         5  |  	                    d¬¦  «         t          j        ¦   «         | j        z
  | j        |z   k    r,|  	                    ¦   «          t          j        ¦   «         | _        d d d ¦  «         n# 1 swxY w Y   | j        °ðd S d S )NTgš™™™™™¹?)Útimeout)Úonly_pending)r2   Úflagr-   ÚrandomÚFLUSH_WAIT_TIMEr7   ÚwaitÚclearr   Ú_flushr3   r4   r5   )rA   Újitters     r   Ú_flush_loopzSpanBatcher._flush_loop[   sE  € Ø ˆŒÔØŒmð 	=Ý”]‘_”_ tÔ';Ñ;¸cÑAˆFØÔ×"Ò"¨4Ô+?À&Ñ+HÐ"ÑIÔIÐIØÔ×#Ò#Ñ%Ô%Ð%õ -Ñ.Ô.ð =ð =Ø—’¨�Ñ.Ô.Ð.õ ”NÑ$Ô$ tÔ'<Ñ<ØÔ+¨fÑ4ò5ð 5ð —K’K‘M”M�MÝ,0¬NÑ,<Ô,<�DÔ)ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =ð Œmð 	=ð 	=ð 	=ð 	=ð 	=s   Á<A*C2Ã2C6Ã9C6r   c                 óf  — t          | j        dd¦  «        rd S d| j        _        	 |                      ¦   «         r| j        €	 d| j        _        d S | j        5  t          | j        |d                  ¦  «        }|| j        k    r2|  	                    ddd¬¦  «         	 d d d ¦  «         d| j        _        d S | j        |d                   
                    |¦  «         | j        |d         xx         |                      |¦  «        z  cc<   |d	         du s*|dz   | j        k    s| j        |d                  | j        k    r#| j                             |d         ¦  «         d}nd}d d d ¦  «         n# 1 swxY w Y   |r| j                             ¦   «          d| j        _        d S # d| j        _        w xY w)
NrH   FTÚtrace_idÚqueue_overflowr   é   )ÚreasonÚdata_categoryÚquantityÚ
is_segment)Úgetattrr2   rH   Ú_ensure_threadr:   r0   Úlenr)   ÚMAX_BEFORE_DROPr,   Úappendr*   Ú_estimate_sizeÚMAX_BEFORE_FLUSHÚMAX_BYTES_BEFORE_FLUSHr9   Úaddr7   r8   )rA   r   ÚsizeÚnotifys       r   r`   zSpanBatcher.addp   sH  € õ �4”< ¨Ñ/Ô/ð 	Ø�4à ˆŒÔð	&Ø×&Ò&Ñ(Ô(ð ¨D¬MÐ,AØð: !&ˆDŒLÔÐÐð7 ”ð #ð #Ý˜4Ô,¨T°*Ô-=Ô>Ñ?Ô?�Ø˜4Ô/Ò/Ð/Ø×*Ò*Ø/Ø&,Ø!"ð +ñ ô ð ð
  ð#ð #ð #ñ #ô #ð #ð6 !&ˆDŒLÔÐÐð# Ô! $ zÔ"2Ô3×:Ò:¸4Ñ@Ô@Ð@ØÔ" 4¨
Ô#3Ð4Ð4Ô4¸×8KÒ8KÈDÑ8QÔ8QÑQÐ4Ð4Ñ4ð ˜Ô&¨$Ð.Ð.Ø˜a‘x 4Ô#8Ò8Ð8ØÔ)¨$¨zÔ*:Ô;ØÔ2ò3ð 3ð Ô'×+Ò+¨D°Ô,<Ñ=Ô=Ð=Ø!�F�Fà"�Fð-#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð0 ð (ØÔ!×%Ò%Ñ'Ô'Ð'à %ˆDŒLÔÐÐø ˆDŒLÔÐ%Ð%Ð%Ð%sC   ¦F" ÁF" ÁAE.ÂF" Â5B-E.Å"F" Å.E2Å2F" Å5E2Å6F" Æ"F0Úitemc                 óú   — d}|                       d¦  «        pi                      ¦   «         D ]N}|dz  }t          |t          ¦  «        r|t	          |¦  «        z  }Œ/|t	          t          |¦  «        ¦  «        z  }ŒO|S )NéÒ   Ú
attributesé2   )ÚgetÚvaluesÚ
isinstanceÚstrrZ   )rc   ÚestimateÚvalues      r   r]   zSpanBatcher._estimate_sizeœ   s   € ð
 ˆØ—h’h˜|Ñ,Ô,Ð2°×:Ò:Ñ<Ô<ð 	,ð 	,ˆEØ˜‰NˆHå˜%¥Ñ%Ô%ð ,Ø�C ™JœJÑ&��à�C¥ E¡
¤
™OœOÑ+��àˆr   r   c                 óÂ   — d„ |                       ¦   «         D ¦   «         }|                      d¦  «        r(d„ | d                               ¦   «         D ¦   «         |d<   n|d= |S )Nc                 ó"   — i | ]\  }}|d v¯	||“ŒS ))Ú_segment_spanr   ©Ú.0ÚkÚvs      r   ú
<dictcomp>z4SpanBatcher._to_transport_format.<locals>.<dictcomp>®   s)   € ÐLÐLÐL™˜˜1°Ð9KÐ0KÐ0Kˆq�!Ð0KÐ0KÐ0Kr   rf   c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r   )r   rq   s      r   ru   z4SpanBatcher._to_transport_format.<locals>.<dictcomp>±   s4   € ð !ð !ð !Ù.4¨q°!�Õ& qÑ)Ô)ð!ð !ð !r   )Úitemsrh   )rc   Úress     r   Ú_to_transport_formatz SpanBatcher._to_transport_format¬   sw   € àLÐL §
¢
¡¤ÐLÑLÔLˆà�8Š8�LÑ!Ô!ð 	"ð!ð !Ø8<¸\Ô8J×8PÒ8PÑ8RÔ8Rð!ñ !ô !ˆC�ÑÐð �LÐ!àˆ
r   FrG   c                 óð  ‡ ‡	— ‰ j         5  |rt          ‰ j        ¦  «        }n&t          ‰ j                             ¦   «         ¦  «        }‰ j                             ¦   «          |s	 d d d ¦  «         d S g }|D �]M}‰ j                             |¦  «        Š	‰	sŒ ‰	d         d                              ¦   «         }t          dt          ‰	¦  «        ‰ j
        ¦  «        D ]Ù}t          |‰ j
        z   t          ‰	¦  «        ¦  «        }t          t          t          j        t           j        ¦  «        ¦  «        |dœ¬¦  «        }|                     t'          ‰ j        ‰ j        d||z
  it-          dˆ ˆ	fd„t          ||¦  «        D ¦   «         dœ¬	¦  «        ¬
¦  «        ¦  «         |                     |¦  «         ŒÚ‰ j        |= ‰ j        |= �ŒO	 d d d ¦  «         n# 1 swxY w Y   |D ]}‰                      |¦  «         Œd S )Nr   rp   )Úsent_atÚtrace)ÚheadersÚ
item_counté   c                 óF   •— g | ]}‰                      ‰|         ¦  «        ‘ŒS r   )ry   )rr   ÚjrA   Úspanss     €€r   ú
<listcomp>z&SpanBatcher._flush.<locals>.<listcomp>å   s;   ø€ ð .&ð .&ð .&à,-ð )-×(AÒ(AÀ%ÈÄ(Ñ(KÔ(Kð.&ð .&ð .&r   )Úversionrw   )Újson)ÚtypeÚcontent_typer}   Úpayload)r0   r(   r9   r)   ÚkeysrL   rh   Ú_dynamic_sampling_contextÚrangerZ   ÚMAX_ENVELOPE_SIZEÚminr   r   r   Únowr   ÚutcÚadd_itemr	   ÚTYPEÚCONTENT_TYPEr
   r\   r*   r+   )
rA   rG   ÚbucketsÚ	envelopesÚ	bucket_idÚdscÚstartÚendÚenveloper‚   s
   `        @r   rM   zSpanBatcher._flush¹   s³  øø€ ØŒZð 7	2ð 7	2Øð 9Ý˜tÔ2Ñ3Ô3��õ ˜tÔ0×5Ò5Ñ7Ô7Ñ8Ô8�àÔ×%Ò%Ñ'Ô'Ð'àð Øð7	2ð 7	2ð 7	2ñ 7	2ô 7	2ð 7	2ð 7	2ð 7	2ð ˆIà$ð )2ñ )2�	ØÔ)×-Ò-¨iÑ8Ô8�Øð Øà˜A”h˜Ô/×IÒIÑKÔK�õ # 1¥c¨%¡j¤j°$Ô2HÑIÔIð /ð /�EÝ˜e dÔ&<Ñ<½cÀ%¹j¼jÑIÔI�Cå'å'7½¼ÅXÄ\Ñ8RÔ8RÑ'SÔ'SØ%(ð!ð !ð ñ  ô  �Hð ×%Ò%ÝØ!%¤Ø)-Ô):à ,¨c°E©kð%õ %/à/0ð.&ð .&ð .&ð .&ð .&å16°u¸cÑ1BÔ1Bð.&ñ .&ô .&ð&"ð &"ð%ñ %ô %ðñ ô ñô ð ð& ×$Ò$ XÑ.Ô.Ð.Ð.àÔ% iÐ0ØÔ& yÐ1Ñ1ðS)2ð7	2ð 7	2ð 7	2ñ 7	2ô 7	2ð 7	2ð 7	2ð 7	2ð 7	2ð 7	2ð 7	2øøøð 7	2ð 7	2ð 7	2ð 7	2ðr "ð 	)ð 	)ˆHØ×Ò˜xÑ(Ô(Ð(Ð(ð	)ð 	)s   ŠAGÁ1EGÇGÇG)r   r   r   r   r   Nr'   )r   r   r   N)rc   r   r   r   )F)Ú__name__Ú
__module__Ú__qualname__rŒ   r^   r[   r_   rJ   r‘   r’   rB   r@   rO   r`   ÚstaticmethodÚintr]   ry   ÚboolrM   r   r   r   r   r      s&  € € € € € ð ÐØÐØ€OØ,Ðà€Oà€DØ>€Lð"@à2ð"@ð 0ð"@ð 
ð	"@ð "@ð "@ð "@ðH!ð !ð !ð !ð=ð =ð =ð =ð**&ð *&ð *&ð *&ðX ð˜Zð ¨Cð ð ð ñ „\ðð ð
ð 
ð 
ñ „\ð
ð;)ð ;) 4ð ;)°Dð ;)ð ;)ð ;)ð ;)ð ;)ð ;)r   r   r   )r=   rI   r.   r3   r>   Úcollectionsr   r   r   Útypingr   Úsentry_sdk._batcherr   Úsentry_sdk.enveloper   r	   r
   Úsentry_sdk.utilsr   r   r   r   r   r   Úsentry_sdk._typesr   r   r   r   r   ú<module>r¦      sP  ðØ 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø  Ð  Ð  Ð  Ð  Ð  à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð +Ø.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.à*Ð*Ð*Ð*Ð*Ð*ð\)ð \)ð \)ð \)ð \)�'˜*Ô%ñ \)ô \)ð \)ð \)ð \)r   