o
    Á¿iWè  ã                   @   sÄ  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl&m(Z( d dl)m*Z* d dl)mZ d dl)m+Z+ d dl)m,Z, d dl)m-Z- d dl)m.Z. d dl)m/Z0 d d l)m1Z1 d d!l2m3Z3 d d"l2m4Z4 d d#l2m5Z5 d d$l2m6Z6 d d%l2m7Z7 d d&l2m8Z8 d d'l9m:Z: d d(l;m<Z< d d)l;m=Z= d d*l;m>Z> d d+l;m?Z? d d,l@mAZA d d-l@mBZB d d.l@mCZC d d/l@mDZD d d0l@mEZE d d1l@mFZF d d2l@mGZG d d3l@mHZH d d4l@mIZI d d5l@mJZJ d d6l@mKZK d d7lLmMZM d d8lNmOZO d d9lPmQZQ d d:lRmSZS d d;lTmUZU eMeVƒZWeKejXiZYeKejZiZ[G d<d=„ d=ej\ƒZ]d>e:j^d?e_e`ef fd@dA„Zadd>e:j^dCebd?dDfdEdF„Zcd>e:j^dGedeee eef ee f fdHdI„ZgdJdK„ ZhdLdM„ ZidNdO„ ZjdPdQ„ ZkdRdS„ ZldTdU„ ZmdVdW„ Znd>e:j^d?dfdXdY„ZodZd[„ Zpd\d]„ Zqd^d_„ Zrd`da„ Zsdbdc„ Ztddde„ Zudfdg„ Zvdhdi„ Zwdjdk„ Zxdldm„ Zydndo„ Zzdpdq„ Z{d>e:j^fdrds„Z|dtdu„ Z}dvdw„ Z~dxedyedze`d{e`d|ee_e`e`f  f
d}d~„Zd>e:j^dGedeee eef ee f d?dfdd€„Z€dd‚„ Zd>e:j^dƒe_e`e`f d„e`dze`fd…d†„Z‚	‡	Dddˆd‰„ZƒdŠd‹„ Z„dŒd„ Z…dŽd„ Z†dd‘„ Z‡d’e_fd“d”„Zˆdd•d–„Z‰d—d˜„ ZŠd™dš„ Z‹d›dœ„ ZŒddž„ ZdŸd „ ZŽd¡d¢„ Zd>e:j^d£ee_e`ef  fd¤d¥„Z‘d>e:j^d¦e_e`ef d?dfd§d¨„Z’d>e:j^d£e_d©ebdªed?df
d«d¬„Z“d>e:j^d©ebdªefd­d®„Z”d>e:j^fd¯d°„Z•d>e:j^fd±d²„Z–d>e:j^fd³d´„Z—ddµd¶„Z˜dd·d¸„Z™d?ebfd¹dº„Zšd‡dDd»ed?dfd¼d½„Z›d¾d¿„ ZœdÀdÁ„ ZdÂdÃ„ ZždÄdÅ„ ZŸdÆdÇ„ Z dÈdÉ„ Z¡dÊdË„ Z¢dÌdÍ„ Z£dÎedÏee`ef fdÐdÑ„Z¤d‡edÏee`ef fdÒdÓ„Z¥dÔee`ef d‡efdÕdÖ„Z¦dÔe_e`ef d?dfd×dØ„Z§dÔe_e`ef dÙe`d?e¨fdÚdÛ„Z©dÜe¨dÝe¨dÞe¨dßebdàebd?e`fdádâ„Zªd‡ed?ebfdãdä„Z«dåe_e`ef dæedçedÔe_e`ef dàebd?dfdèdé„Z¬dêdë„ Z­dìdí„ Z®dîdï„ Z¯dðdñ„ Z°d>e:j^d?dfdòdó„Z±dôe`dõee² döee² d÷eede`e²f  d>e:j^døee¨ d?dfdùdú„Z³d>e:j^dGedeee eef ee f d?dfdûdü„Z´dýed>e:j^dþe¨dÏee dÿeef d?dfd d„Zµdýed>e:j^dee_eee f  d?dfdd„Z¶dd>e:j^dCebd?dfdd„Z·d?e`fdd„Z¸d>e:j^dGedeee eef ee f d?dfd	d
„Z¹dd„ Zºeºƒ  dS (  é    N)ÚTracebackType)ÚAny)ÚCallable)ÚMapping)ÚOptional)Úparse©Úconfig)ÚSUPPORTED_PROXY_SPAN_NAMES)Ú+create_inferred_proxy_span_if_headers_exist)ÚSpanLinkKind)Ú_SpanPointerDescription)Ú_SpanPointerDirection)Ú_SpanPointerDirectionName)ÚSpan)Ú extract_DD_context_from_messages)Ú_SPAN_MEASURED_KEY)Ú	ERROR_MSG)ÚERROR_STACK)Ú
ERROR_TYPE)Ú	SPAN_KIND)Útrace_utils)Ú BOTOCORE_STEPFUNCTIONS_INPUT_KEY)Ú_copy_trace_level_tags)Ú_set_url_tag)ÚSpanKind)Ú	SpanTypes)Údb)Úhttp)Únet)Úredis)Ú	websocket)ÚMESSAGE_KEY)ÚMESSAGE_OFFSET)Ú	PARTITION)ÚRECEIVED_MESSAGE)Ú	TOMBSTONE)ÚTOPIC)Úcore)Úensure_binary)Úensure_text)Úis_valid_ip)Úmaybe_stringify)Ú	COMPONENT)ÚFLASK_ENDPOINT)ÚFLASK_URL_RULE)ÚFLASK_VIEW_ARGS)ÚHTTP_REQUEST_UPGRADED)ÚMESSAGING_BATCH_COUNT)ÚMESSAGING_DESTINATION_NAME)ÚMESSAGING_MESSAGE_ID)ÚMESSAGING_OPERATION)ÚMESSAGING_SYSTEM)ÚSPAN_LINK_KIND)Ú
get_logger)Ú_inherit_sampling_tags)ÚSpanDirection)ÚHTTPPropagator)Útracerc                       sN   e Zd Zd‡ fdd„	Zdd„ Zdd„ ZeZdd	„ Zd
d„ Z‡ fdd„Z	‡  Z
S )Ú_TracedIterableFc                    sR   || _ | j rtt| ƒ |¡ t|ƒ| _n
tt| ƒ t|ƒ¡ || _|| _d| _d S )NF)	Ú_self_wrapped_is_iteratorÚsuperr=   Ú__init__ÚiterÚ_wrapped_iteratorÚ
_self_spanÚ_self_parent_spanÚ_self_span_finished)ÚselfÚwrappedÚspanÚparent_spanÚwrapped_is_iterator©Ú	__class__© úQ/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/_trace/trace_handlers.pyr@   L   s   
z_TracedIterable.__init__c                 C   s   | S ©NrM   ©rF   rM   rM   rN   Ú__iter__W   s   z_TracedIterable.__iter__c                 C   s^   z| j r
t| jƒW S t| jƒW S  ty   |  ¡  ‚  ty.   | jjt	 
¡ Ž  |  ¡  ‚ w rO   )r>   ÚnextrB   Ú__wrapped__ÚStopIterationÚ_finish_spansÚ	ExceptionrC   Úset_exc_infoÚsysÚexc_inforP   rM   rM   rN   Ú__next__Z   s   ýz_TracedIterable.__next__c                 C   s$   t | jdd ƒr| j ¡  |  ¡  d S )NÚclose)ÚgetattrrS   r[   rU   rP   rM   rM   rN   r[   k   s   
z_TracedIterable.closec                 C   s(   | j s| j ¡  | j ¡  d| _ d S d S )NT)rE   rC   ÚfinishrD   rP   rM   rM   rN   rU   p   s
   


ýz_TracedIterable._finish_spansc                    s    |dkrt dƒ‚tt| ƒ |¡S )NÚ__len__z__len__ is not supported)ÚAttributeErrorr?   r=   Ú__getattribute__)rF   ÚnamerK   rM   rN   r`   v   s   z _TracedIterable.__getattribute__)F)Ú__name__Ú
__module__Ú__qualname__r@   rQ   rZ   rR   r[   rU   r`   Ú__classcell__rM   rM   rK   rN   r=   K   s    r=   ÚctxÚreturnc                 C   s(   i }dD ]}|   |¡}|r|||< q|S )N>   ÚserviceÚactivateÚchild_ofÚresourceÚ	span_type)Úget_item)rf   Úspan_kwargsÚparameter_nameÚparameter_valuerM   rM   rN   Ú2_get_parameters_for_new_span_directly_from_context   s   
€rq   TÚ
call_tracer   c                 K   s(  |   d¡}t| ƒ}|   d|¡}|   d¡}|r'|r'tjt||   d¡|   d¡d |   d¡}|r4|s4||d< tjrFt d	| ||f¡ |   d
|¡}| 	|¡ |   d¡}|sVt
dƒ‚|r[tjntj|fi |¤Ž}|   d¡}	|	rz|	 ¡ D ]
\}
}| |
|¡ qo|   d¡r…| td¡ || _tjr’t d| f¡ |S )NÚactivate_distributed_headersrr   Úintegration_configÚdistributed_headersÚ#distributed_headers_config_override)Ú
int_configÚrequest_headersÚoverrideÚdistributed_contextrj   úinferred_proxy.startrn   Ú	span_namez;span_name must be set in the context before starting a spanÚtagsÚmeasuredé   úinferred_proxy.finish)rm   rq   r   rs   r<   r	   Ú _inferred_proxy_services_enabledr(   ÚdispatchÚupdateÚ
ValueErrorÚtraceÚ
start_spanÚitemsÚset_tagÚ
set_metricr   rH   )rf   rr   Úkwargsrs   rn   rt   rz   r|   rH   r}   ÚtkÚtvrM   rM   rN   Ú_start_spanˆ   s@   

ü




r   rY   c                 C   sT   | j }|sdS |\}}}|r|r|r| |||¡ n
|  dd¡r$| ¡  | ¡  dS )zP
    Finish the span in the context.
    If no span is present, do nothing.
    NÚshould_set_tracebackF)rH   rW   rm   Úset_tracebackr]   )rf   rY   rH   Úexc_typeÚ	exc_valueÚexc_tracebackrM   rM   rN   Ú_finish_spanµ   s   
r“   c                 C   s,   |  t|j¡ |  ttj¡ | td¡ d S )Nr   )Ú_set_tag_strr-   Úintegration_namer   r   ÚSERVERr‰   r   )rf   rH   rw   rM   rM   rN   Ú_set_web_frameworks_tagsÉ   s   r—   c                 C   s4   |   d¡}|   d¡du r|  dd¡ t| ||ƒ d S )NÚreq_spanÚallow_default_resourceTÚset_resource)rm   Úset_itemr—   )rf   rw   Úrequest_spanrM   rM   rN   Ú_on_web_framework_start_requestÐ   s   
r   c
                 K   s¶   t jddddu r%|d ur%zt|ƒ}W n	 ty   Y nw |› d|› | _tjd| ||||||||dœ	|
¤Ž t| |ƒ t jdtƒ d 	¡ D ]
\}}|  
||¡ qF|	rY|  ¡  d S d S )	Nrš   F)ÚdefaultTú )	rH   rt   ÚmethodÚurlÚstatus_codeÚqueryrx   Úresponse_headersÚrouteÚadditional_tagsrM   )r(   rm   Úintr„   rk   r   Úset_http_metaÚ_set_inferred_proxy_tagsÚdictr‡   r”   r]   )rH   rw   r    r¡   r¢   r£   Úreq_headersÚres_headersr¥   r]   rŠ   r‹   rŒ   rM   rM   rN   Ú _on_web_framework_finish_request×   s4   ÿ÷
ö
ÿr­   c                 C   sÀ   | j rX| j jtv rZ| j }|r|n|  d¡}|r| d|¡ | jdkr\| j|_t| j ¡ v r6| t|  t¡¡ t	| j ¡ v rF| t	|  t	¡¡ t
| j ¡ v r^| t
|  t
¡¡ d S d S d S d S d S )Nzhttp.status_coder   )Ú_parentra   r
   Úget_tagrˆ   Úerrorr   Ú_metaÚkeysr   r   )rH   r¢   Úinferred_spanrM   rM   rN   r©   ô   s    
ôr©   c                 C   s~   |   d¡rd S |   d|   dd ¡¡}|   d¡}|r7|d ur9t| |d |   d¡}|r;|s=||d< |  d|¡ d S d S d S d S d S )NÚinferred_proxy_spanÚheadersru   rt   )rµ   rj   rn   )rm   r   r›   )rf   rn   rr   rµ   rt   r´   rM   rM   rN   Ú_on_inferred_proxy_start  s   


ùr¶   c                 C   s\   t jsd S |  d¡}|  d¡}|r&|r(| jr*| jj|jkr,| jj |¡ d S d S d S d S d S )Nr´   Úinferred_proxy_finish_callback)r	   r   rm   rH   Ú	parent_idÚspan_idÚ_on_finish_callbacksÚappend)rf   r´   r·   rM   rM   rN   Ú_on_inferred_proxy_finish  s   

ÿþýúr¼   c                 C   sZ   t  ¡ }|  d¡jr|sd S || _|  d¡}t|  d¡||ƒ t| ƒ}| |  d¡¡ d S )NÚpinÚflask_configÚflask_requestÚignored_exception_type)r<   Úcurrent_spanrm   ÚenabledrH   Ú_set_flask_request_tagsr   Ú_ignore_exception)rf   rÁ   r¾   rœ   rM   rM   rN   Ú(_on_traced_request_context_started_flask*  s   
rÅ   c                 C   s|   |   d¡}|   d¡}|   d¡ dd¡\}}tj||j||   d¡d |   dd	¡r<| tj|¡ t| d	|   d
¡dd d S d S )Nrœ   Ú
middlewareÚstatusrŸ   r   Úenviron©r¢   r¤   r†   FÚparent_callT)rr   rj   ri   )	rm   Úsplitr   r¨   Ú_configr”   r   Ú
STATUS_MSGr   )rf   rœ   rÆ   r¢   Ú
status_msgrM   rM   rN   Ú_maybe_start_http_response_span6  s   

ÿ
üþrÏ   c           	      C   sê   |   d¡}|   d¡}| t|jj¡ | ttj¡ t|dƒr%|j	}| g}n
|j
}||   d¡g}||Ž  t t|dƒr=|jn|j¡}| t|jj¡ |  d|¡ t|dƒr\|j}|| g}n|j}|||g}tj|g|¢R Ž }|  d|¡ d S )	NrÆ   r˜   Ú_request_call_modifierrÈ   Ú_application_call_nameÚapp_spanÚ_wrapped_start_responseÚintercept_start_response)rm   r”   r-   rÌ   r•   r   r   r–   ÚhasattrrÐ   Ú_request_span_modifierr<   r…   rÑ   Ú_application_span_namer›   rÓ   Ú_traced_start_responseÚ	functoolsÚpartial)	rf   Ústart_responserÆ   r˜   ÚmodifierÚargsrÒ   rG   rÔ   rM   rM   rN   Ú_on_request_prepareG  s0   


ÿý


rÞ   c                 C   sH   |   d¡}|   d¡}t|dƒr|jn|j}|||   d¡|ƒ | ¡  d S )NrÒ   rÆ   Ú_application_call_modifierrÈ   )rm   rÕ   rß   Ú_application_span_modifierr]   )rf   Úclosing_iterablerÒ   rÆ   rÜ   rM   rM   rN   Ú_on_app_successg  s   

ÿýrâ   c                 C   sD   |   d¡}|   d¡}|jt ¡ Ž  |jt ¡ Ž  | ¡  | ¡  d S )Nr˜   rÒ   )rm   rW   rX   rY   r]   )rf   r˜   rÒ   rM   rM   rN   Ú_on_app_exceptions  s   

rã   c                 C   sv   |   d¡}|   d¡}tjt|dƒr|jn|j|dd}| t|jj	¡ t|dƒr+|j
n|j}|||ƒ t||||dS )NrÆ   r˜   Ú_response_call_nameT)rj   ri   Ú_response_call_modifier)rJ   )rm   r<   r†   rÕ   rä   Ú_response_span_namer”   r-   rÌ   r•   rå   Ú_response_span_modifierr=   )rf   rá   Úapp_is_iteratorrÆ   r˜   Ú	resp_spanrÜ   rM   rM   rN   Ú_on_request_complete|  s    

ÿù
ÿý
rê   c                 C   s4   t |dƒrt|jdd ƒ}|r|  d|¡ d S d S d S )NrL   rb   Úresult_class)rÕ   r\   rL   r”   )ré   ÚresponseÚ
resp_classrM   rM   rN   Ú_on_response_prepared—  s   
ýrî   c                 C   sF   |  d¡}|  d¡}tj|| j||||d | jr!|  ||¡ d S d S )NÚREQUEST_METHODÚQUERY_STRING)r    r¡   r£   rx   )Úgetr   r¨   rÌ   Úspan_modifier)rÆ   r˜   r¡   rx   rÈ   r    Úquery_stringrM   rM   rN   Ú_on_request_preparedž  s   

ÿÿrô   c                 C   s2  z‡|  t|j¡ |j d¡d dkr|  ttj¡ | t	¡s2| j
r2d | j| j
f¡|_|  t	| j
¡ | t¡sQ| jrQ| jjrQd | j| jjf¡|_|  t| jj¡ | t¡s| jr‚| d¡r…| j ¡ D ]\}}| d t|f¡|¡ qctj||| jd W d S W d S W d S W d S  ty˜   tjddd	 Y d S w )
NÚ.éÿÿÿÿÚrequestrŸ   Úcollect_view_args)Úrequest_path_paramsz+failed to set tags for "flask.request" spanT©rY   )r”   r-   r•   ra   rË   r   r   r–   r¯   r.   ÚendpointÚjoinr    rk   r/   Úurl_ruleÚruler0   Ú	view_argsrñ   r‡   rˆ   r   r¨   rV   ÚlogÚdebug)r÷   rH   r¾   ÚkÚvrM   rM   rN   rÃ   ¨  s$   ûÿrÃ   c           	      C   s~   |  d¡}| d¡\}}}t| ||ƒ | t¡s&| t¡s&d | j|f¡|_t	|ƒ}t
||| jd |d d || t¡d|d d S )Nr˜   rŸ   F)rH   rw   r    r¡   r¢   r£   r«   r¬   r¥   r]   Úresponse_cookies)rm   Ú	partitionrÃ   r¯   r.   r/   rü   r    rk   Ú_cookies_from_response_headersr­   )	r÷   rf   r¾   r¢   rµ   rH   ÚcodeÚ_r  rM   rM   rN   Ú_on_start_response_preÂ  s&   

õr	  c                 C   s>   i }| D ]}|d dkr|d   dd¡}|d ||d < q|S )Nr   z
Set-Cookier   ú=)rË   )r¤   ÚcookiesÚheader_tupleÚcookie_tokensrM   rM   rN   r  à  s   €r  c                 C   sL   t  ¡ }|sd S tt| dd ƒp| d¡ƒ}|d ur$||_| d|¡ d S d S )Nra   Útemplate_default_namezflask.template_name)r(   Úget_spanr,   r\   rñ   rk   r”   )Útemplater¾   rH   ra   rM   rM   rN   Ú_on_flask_renderê  s   þr  c           	      C   s:   |   d¡}d |j|jf¡|_| td¡ | ||¡ d S )Nr˜   rŸ   r   )rm   rü   r    Úpathrk   r‰   r   r”   )	rf   r¾   r÷   rÈ   Ú_HAS_JSON_MIXINÚflask_versionÚflask_version_strÚexception_typerH   rM   rM   rN   Ú_on_request_span_modifierô  s   
r  c                 C   sn   |   d¡}z|   d¡|   d¡ƒ}W n ty   |j}Y nw tj|||j|j||j|j|j	|j
||jd d S )Nr˜   zwsgi.construct_urlrÈ   )	r    r¡   Úraw_urir£   Úparsed_queryrx   Úrequest_cookiesÚrequest_bodyÚpeer_ip)rm   rV   r¡   r   r¨   r    Úbase_urlró   rÝ   rµ   r  Úremote_addr)rf   r¾   r÷   Úreq_bodyrH   r  rM   rM   rN   Ú_on_request_span_modifier_post  s&   

ÿ
õr   c                 C   s$   ||  d¡|j|ƒ d|jjt< d S )Nr½   r   )rm   rH   Ú_metricsr   )r  rf   r÷   Úbefore_request_tagsrM   rM   rN   Ú_on_traced_get_response_pre  s   r#  c                 C   s$   | r| j dkrt| d ƒ d S d S d S )NÚweb)rl   r©   ©rH   rM   rM   rN   Ú_on_web_request_final_tags  s   ÿr&  c                 C   sD   | j }||  d¡|||ƒ tj||  d¡| d¡d t|d ƒ d S )Nr½   rt   z
http.route)r¥   )rH   rm   r   r¨   r¯   r©   )rf   Úafter_request_tagsr÷   rì   rH   rM   rM   rN   Ú _on_django_finalize_response_pre&  s   r(  Úextract_bodyÚremake_bodyr£   Úurir  c           	      C   sB   |j }||ƒ}||ƒ tj| j|  d¡|j||||||jd	 d S )Nrt   )r    r£   r  rù   r  r  r  )ÚGETr   r¨   rH   rm   r    ÚCOOKIES)	rf   r÷   r)  r*  r£   r+  r  r  ÚbodyrM   rM   rN   Ú_on_django_start_response/  s   
÷r/  c              	   C   sP   z!|   d¡}|d ur| j tj|¡ W t| |ƒ d S W t| |ƒ d S t| |ƒ w )NÚrowcount)rm   rH   r‰   r   ÚROWCOUNTr“   )rf   rY   r0  rM   rM   rN   Ú_on_django_cacheC  s   
ýr2  c                 C   s"   |r|D ]
}|j  |¡ qd S d S rO   )rH   rÄ   )Ú_unused1Ú_unused2Ú_unused3rf   Úignored_excsÚexcrM   rM   rN   Ú_on_django_func_wrappedO  s
   þr8  Úmetadatar¡   c                 C   s4   |  ¡ D ]\}}| j ||¡ qt|| j||ƒ d S rO   )r‡   rH   r”   r   )rf   r9  Údjango_configr¡   r£   r‹   rŒ   rM   rM   rN   Ú_on_django_block_requestU  s   r;  rH   c	           	      C   s^   t j|||j||||j dd ¡|j| ||j|jd ur|jjnd t	 
d¡tt	 
d¡ƒ|d d S )Nrð   zhttp.request.remote_ipz#http.request.headers_case_sensitive)r    r¡   r  r¢   r£   r  rx   r¤   r  rù   r  Úheaders_are_case_sensitiver  )r   r¨   r    ÚMETArñ   r,  r-  Úresolver_matchrŠ   r(   rm   Úbool)	rx   r¤   rH   r:  r÷   r¡   r  rÇ   r  rM   rM   rN   Ú%_on_django_after_request_headers_post[  s"   
ñr@  c              	   C   sp   ddl m} | j}|||  d¡|  d¡|  d¡|  d¡|  d¡ƒ |  d¡}|d ur4|  d	¡r6||_d S d S d S )
Nr   )Ú'set_botocore_patched_api_call_span_tagsÚinstancerÝ   ÚparamsÚendpoint_nameÚ	operationÚstart_nsÚfunc_run)Ú'ddtrace._trace.utils_botocore.span_tagsrA  rH   rm   rF  )rf   rA  rH   rF  rM   rM   rN   Ú%_on_botocore_patched_api_call_startedy  s   ú

ÿrI  c                 C   sR   ddl m} | j}||||d | tj¡}|r%|t|ƒƒs'| |¡ d S d S d S )Nr   ©Ú#set_botocore_response_metadata_tags)Úis_error_code_fn)rH  rK  rH   r¯   r   ÚSTATUS_CODEr§   rÄ   )rf   rì   r  rL  rK  rH   r¢   rM   rM   rN   Ú'_on_botocore_patched_api_call_exception  s   ÿrN  c                 C   sp   ddl m} | j}|||ƒ tjjr4ddlm} |tjj|  	d¡|  	d¡|  	d¡|dD ]	}t
||ƒ q,d S d S )Nr   rJ  )Ú7extract_span_pointers_from_successful_botocore_responserD  rE  rC  )Ú%dynamodb_primary_key_names_for_tablesrD  Úoperation_nameÚrequest_parametersrì   )rH  rK  rH   r	   ÚbotocoreÚadd_span_pointersÚ+ddtrace._trace.utils_botocore.span_pointersrO  rP  rm   Ú_set_span_pointer)rf   rì   rK  rH   rO  Úspan_pointer_descriptionrM   rM   rN   Ú%_on_botocore_patched_api_call_success›  s   

ûörX  c           	      C   sž   |   d¡}|d urM| j}|dkrt|dntƒ }td|d}|dkr'tj|d< z|| fi |¤Ž ||fi |¤Ž|_W d S  tyL   tjdd	d
 Y d S w d S )NrD  Úsns)Úendpoint_serviceÚaws)Úcloud_providerÚcloud_serviceÚlambdaÚ	directionzUnable to inject trace contextTrú   )	rm   rH   rª   r:   ÚOUTBOUNDra   rV   r   Úwarning)	rf   r]  Úschematization_functionÚinjection_functionÚtrace_operationrD  rH   Úinject_kwargsÚschematize_kwargsrM   rM   rN   Ú-_on_botocore_trace_context_injection_prepared¯  s   

ÿ÷rg  Údata_objc                 C   s0   |rd|vr
i |d< t  | jj|d ¡ d S d S ©NÚ_datadog)r;   ÚinjectrH   Úcontext)rf   Ústreamrh  ÚrecordÚinject_trace_contextrM   rM   rN   Ú"_on_botocore_kinesis_update_recordÀ  s
   ýrp  c                 C   s"   |r|j n| jj }t ||¡ d S rO   )rl  rH   r;   rk  )rf   rH   r  Ú
trace_dataÚ__Úmessagerl  rM   rM   rN   Ú_on_botocore_update_messagesÇ  s   rt  c                 C   s2   |r|j n| jj }t ||d ¡ |  t|¡ d S ri  )rl  rH   r;   rk  r›   r   )rf   rH   r  rq  rr  rl  rM   rM   rN   Ú/_on_botocore_patched_stepfunctions_update_inputÌ  s   ru  c                 C   sb   | j }|  d¡}| | ¡ | d|  d¡¡ | d|  d¡¡ d|v r/|  dt|d ƒ¡ d S d S )NÚbedrock_integrationzbedrock.request.model_providerÚmodel_providerzbedrock.request.modelÚ
model_nameÚnÚnum_generations)rH   rm   Ú_tag_proxy_requestr”   r›   Ústr)rf   Úrequest_paramsrH   ÚintegrationrM   rM   rN   Ú-_on_botocore_patched_bedrock_api_call_startedÒ  s   

ÿr  c                 C   sJ   | j }|j|Ž  |  d¡}|  d¡}d|vr|j|| gi d | ¡  d S )Nrx  rv  Úembed)rÝ   rŠ   )rH   rW   rm   Úllmobs_set_tagsr]   )rf   rY   rH   rx  r~  rM   rM   rN   Ú/_on_botocore_patched_bedrock_api_call_exceptionÞ  s   


r‚  c                 C   s4   |   d¡j}| j}|r|rt |j|¡ d S d S d S )Nrt   )rm   Údistributed_tracing_enabledrH   r;   rk  rl  )rf   rµ   rƒ  rH   rM   rM   rN   Ú_propagate_contextè  s
   ÿr„  c                 C   s:   | j }|r|r
d|_| ¡ D ]}| ||| ¡ qdS dS )z?sets job.status and job.origin span tags after job is performedr   N)rH   r°   r²   r”   )rf   Ú
job_failedÚ	span_tagsrH   r  rM   rM   rN   Ú_after_job_executionï  s   ür‡  c                 C   s   t  ¡  dS )zbForce flush to agent since the process `os.exit()`s
    immediately after this method returns
    N)r<   Úflush)rf   rM   rM   rN   Ú _on_end_of_traced_method_in_forkú  s   r‰  Úresultc                 C   s*   |   d¡j| j| gi |d | j ¡  d S )Nrv  ©rÝ   rŠ   rì   )rm   r  rH   r]   )rf   rŠ  rM   rM   rN   Ú._on_botocore_bedrock_process_response_converse  s   
ürŒ  Úformatted_responsec                 C   sn   | j *}|  d¡}|  d¡}d|v r	 W d   ƒ d S |j|| gi |d W d   ƒ d S 1 s0w   Y  d S )Nrx  rv  r€  r‹  )rH   rm   r  )rf   r  rH   rx  r~  rM   rM   rN   Ú%_on_botocore_bedrock_process_response  s   

ü"ûrŽ  Ú	propagateÚmessage_parserc                 C   sZ   |d ur%d|v r't |d ƒdkr)|  dd¡ |r+|  dt|d |ƒ¡ d S d S d S d S d S )NÚMessagesr   Úmessage_receivedTrz   )Úlenr›   Úset_safer   )rf   r  rŠ  r  r  rM   rM   rN   Ú!_on_botocore_sqs_recvmessage_post  s    ýr•  c                 C   sZ   |d ur%d|v r't |d ƒdkr)|  dd¡ |r+|  dt|d |ƒ¡ d S d S d S d S d S )NÚRecordsr   r’  Trz   )r“  r›   r   )rf   r  rr  Ú___Ú____rŠ  r  r  rM   rM   rN   Ú$_on_botocore_kinesis_getrecords_post#  s    
ýr™  c                 C   ó    |d ur| j  tj|¡ d S d S rO   ©rH   r‰   r   r1  ©rf   r0  rM   rM   rN   Ú_on_redis_command_post3  ó   ÿr  c                 C   sP   | j }|d urt|ƒ|jtj< d S dD ]}t||ƒr%tt||ƒƒ|jtj< qd S )N)Úcommand_stackÚ_command_stack)rH   r“  r!  ÚredisxÚARGS_LENrÕ   r\   ÚPIPELINE_LEN)rf   r½   Úconfig_integrationrÝ   rB  r£   rH   ÚattrrM   rM   rN   Ú_on_redis_execute_pipeline8  s   
€ýr¦  c                 C   rš  rO   r›  rœ  rM   rM   rN   Ú_on_valkey_command_postD  rž  r§  c                 C   s   ddl m} |j| d d S )Nr   ©ÚCIVisibilityr   )Úddtrace.internal.ci_visibilityr©  Úenable)r	   r©  rM   rM   rN   Ú_on_test_visibility_enableI  s   r¬  c                  C   s   ddl m}  |  ¡  d S ©Nr   r¨  )rª  r©  Údisabler¨  rM   rM   rN   Ú_on_test_visibility_disableO  s   r¯  c                  C   s   ddl m}  | jS r­  )rª  r©  rÂ   r¨  rM   rM   rN   Ú_on_test_visibility_is_enabledU  s   r°  rW  c                 C   s   | j |j|j|j|jd d S )N)Úpointer_kindÚpointer_directionÚpointer_hashÚextra_attributes)Ú_add_span_pointerr±  r²  r³  r´  )rH   rW  rM   rM   rN   rV  [  s   
ürV  c                 C   s6   |   t|j¡ |   t|¡ |   d|¡ |   d|¡ d S )Nzaas.function.namezaas.function.trigger)r”   r-   r•   r   )rH   Úazure_functions_configÚfunction_nameÚtriggerÚ	span_kindrM   rM   rN   Ú_set_azure_function_tagsd  s   rº  c                 C   sp   | j }| t|¡ | t|¡ | t|¡ |d ur | tj|¡ |d ur*| t|¡ |d ur6| t|¡ d S d S rO   )	rH   r”   r3   r5   r6   r   ÚTARGET_NAMEr2   r4   )rf   Úentity_namerE  ÚsystemÚfully_qualified_namespaceÚ
message_idÚbatch_countrH   rM   rM   rN   Ú_set_azure_messaging_tagsk  s   ÿrÁ  c              	   C   sP   | j }t |j¡}|j}|j› d|› |_tj|||j|j|j	| 
¡ |d d S )NrŸ   )r    r¡   rx   r  r¥   )rH   r   Úurlparser¡   r  r    rk   r   r¨   rµ   Úget_body)rf   r¶  ÚreqrH   Ú
parsed_urlr  rM   rM   rN   Ú)_on_azure_functions_request_span_modifier{  s   
ùrÆ  c                 C   sB   | j }t||||tjƒ tj|||r|jnd |r|jnd d d S )NrÉ   )rH   rº  r   r–   r   r¨   r¢   rµ   )rf   r¶  Úresr·  r¸  rH   rM   rM   rN   Ú"_on_azure_functions_start_response‹  s   
ürÈ  c                 C   s   | j }t|||||ƒ d S rO   )rH   rº  )rf   r¶  r·  r¸  r¹  rH   rM   rM   rN   Ú)_on_azure_functions_trigger_span_modifier–  s   rÉ  c                 C   s.   | j }t|||||ƒ t| |||||	|
ƒ d S rO   )rH   rº  rÁ  )rf   r¶  r·  r¸  r¹  rE  r½  r¼  r¾  r¿  rÀ  rH   rM   rM   rN   Ú1_on_azure_functions_message_trigger_span_modifier›  s   ùrÊ  c           	      C   s:   | j }| t|j¡ | ttj¡ t| ||||||ƒ d S rO   )rH   r”   r-   r•   r   r   ÚPRODUCERrÁ  )	rf   Úazure_configrE  r½  r¼  r¾  r¿  rÀ  rH   rM   rM   rN   Ú_on_azure_message_modifierµ  s   rÍ  c                 C   sj   t  d¡}t  dd¡ | j› d| j› |_d}| |¡s#| || j¡ | t	j
¡s3| t	j
| j¡ d S d S )Nr˜   rš   FrŸ   zmolten.route)r(   rm   r›   r    r  rk   r¯   r”   ra   r   ÚROUTE)r¥   r˜   ÚMOLTEN_ROUTErM   rM   rN   Ú_on_router_match¿  s   

ÿrÐ  Úwebsocket_spanrs  c                 C   sj   d|v r|   tjd¡ |  tjt|d  d¡ƒ¡ d S d|v r3|   tjd¡ |  tjt|d ƒ¡ d S d S )NÚtextúutf-8ÚbinaryÚbytes)r”   r!   ÚMESSAGE_TYPEr‰   ÚMESSAGE_LENGTHr“  Úencode)rÑ  rs  rM   rM   rN   Ú#_set_websocket_message_tags_on_spanÌ  s    þrÙ  c                 C   sD   |  d¡}|  d¡}|d ur|  tj|¡ |r |  tj|¡ d S d S )Nr  Úreason)rñ   r‰   r!   Ú
CLOSE_CODErˆ   ÚCLOSE_REASON)rH   rs  r  rÚ  rM   rM   rN   Ú_set_websocket_close_tagsÕ  s   

ÿrÝ  Úscopec              
   C   s‚   |   d¡}t|ƒdkr?|d }| tj|¡ zt|ƒ | d|¡ W d S  ty> } zt dt	|ƒ¡ W Y d }~d S d }~ww d S )NÚclientr   r   znetwork.client.ipzCCould not validate client IP address for websocket send message: %s)
rñ   r“  r”   r   ÚTARGET_HOSTr+   r„   r   r  r|  )rÞ  rH   rß  Ú	client_ipÚerM   rM   rN   Ú_set_client_ip_tagsÞ  s   
€ÿúrã  c                 C   sH   d| vri | d< d| d vrd| d d< d| d vr"d| d d< d S d S )NÚdatadogÚwebsocket_receive_counterr   Úwebsocket_send_counterrM   )rÞ  rM   rM   rN   Ú _init_websocket_message_countersê  s   ÿrç  Úcounter_typec                 C   s    | d |  d7  < | d | S )zu
    Increment and return websocket message counter (either websocket_receive_counter or websocket_send_counter)
    rä  r   rM   )rÞ  rè  rM   rM   rN   Ú_increment_websocket_counteró  s   ré  Úhandshake_trace_idÚhandshake_span_idÚcounterÚ	is_serverÚis_incomingc           	      C   sF   |r|r|s|rd}nd}| d›}|d›}|d›}|› |› |› |› S )zã
    Build websocket span pointer hash.

    Format: <prefix><128 bit hex trace id><64 bit hex span id><32 bit hex counter>
    Prefix: 'S' for server outgoing or client incoming, 'C' for server incoming or client outgoing
    ÚSÚCÚ032xÚ016xÚ08xrM   )	rê  rë  rì  rí  rî  ÚprefixÚtrace_id_hexÚspan_id_hexÚcounter_hexrM   rM   rN   Ú"_build_websocket_span_pointer_hashû  s   rø  c                 C   s   | r| j sdS | j jS )a  
    Check if the handshake span has extracted distributed tracing context.

    A websocket server must not set the span pointer if the handshake has not extracted a context

    A span has distributed tracing context if it has a parent context that was
    extracted from headers.
    F)Ú_parent_contextÚ
_is_remoter%  rM   rM   rN   Ú _has_distributed_tracing_context  s   
	rû  Úlink_attributesrt   Úhandshake_spanc           
      C   s|   |j rt|ƒs	dS |rdnd}t||ƒ}t|j|j|d|d}|r(tj}tj}	ntj	}tj	}	|  
|tjjtj|	|dœ¡ dS )z[
    Add span pointer attributes to link_attributes for websocket message correlation.
    Nrå  ræ  T)rê  rë  rì  rí  rî  )z	link.namezdd.kindzptr.kindzptr.dirzptr.hash)Údistributed_tracingrû  ré  rø  Útrace_idr¹   r   ÚUPSTREAMr   Ú
DOWNSTREAMrƒ   Ú_SpanLinkKindÚSPAN_POINTERÚvaluer   Ú	WEBSOCKET)
rü  rt   rý  rÞ  rî  rè  rì  Úptr_hashÚ	link_nameÚptr_directionrM   rM   rN   Ú&_add_websocket_span_pointer_attributes"  s0   
ûûÿr	  c                 C   sÂ   | j }|  d¡}| t|j¡ | ttj¡ | tj	d¡ t
||ƒ | tjd¡ t| dƒr]| jj r_| jj }t ¡ }t||||dd | |j|¡ t|ddƒrVt||jƒ t||ƒ dS dS dS )	z2
    Handle websocket receive message events.
    rt   Úblockingr   ÚparentT©rî  Ú(asgi_websocket_messages_inherit_samplingN)rH   rm   r”   r-   r•   r   r   ÚCONSUMERr!   ÚRECEIVE_DURATION_TYPErÙ  r‰   ÚMESSAGE_FRAMESrÕ   r  Ú_WEBSOCKET_LINK_ATTRS_EXECUTEDÚcopyr	  Ú	link_spanrl  r\   r9   Ú_local_rootr   ©rf   rÞ  rs  rH   rt   rý  rü  rM   rM   rN   Ú"_on_asgi_websocket_receive_messageN  s$   


ÿór  c                 C   sœ   | j }|  d¡}| t|j¡ | ttj¡ t||ƒ t	||ƒ | 
tjd¡ t| dƒrJ| jj rL| jj }t ¡ }t||||dd | |j|¡ dS dS dS )z/
    Handle websocket send message events.
    rt   r   r  Fr  N)rH   rm   r”   r-   r•   r   r   rË  rã  rÙ  r‰   r!   r  rÕ   r  Ú_WEBSOCKET_LINK_ATTRS_RESUMINGr  r	  r  rl  r  rM   rM   rN   Ú_on_asgi_websocket_send_messagem  s   



ÿør  c                 C   s¢   | j }|  d¡}| t|j¡ | ttj¡ t||ƒ t	||ƒ t
||ƒ t| dƒrM| jj rO| jj }t ¡ }t||||dd | |j|¡ t||ƒ dS dS dS )z0
    Handle websocket close message events.
    rt   r  Fr  N)rH   rm   r”   r-   r•   r   r   rË  rã  rÙ  rÝ  rÕ   r  r  r  r	  r  rl  r   r  rM   rM   rN   Ú _on_asgi_websocket_close_message†  s    




ÿör  c                 C   s¦   | j }|  d¡}| t|j¡ | ttj¡ t||ƒ t	| dƒrO| j
j rQ| j
j }t ¡ }t||||dd | |j|¡ t|ddƒrHt||jƒ t||ƒ dS dS dS )z5
    Handle websocket disconnect message events.
    rt   r  Tr  r  N)rH   rm   r”   r-   r•   r   r   r  rÝ  rÕ   r  r  r  r	  r  rl  r\   r9   r  r   r  rM   rM   rN   Ú%_on_asgi_websocket_disconnect_message£  s    


ÿór  c                 C   s”   |   d¡}|   d¡}|  dt|jttji¡ t| ƒ}|  d|¡ d|vr,d|gi|d< n	|d d  |¡ |d dkrH| 	t
tj¡ t|ƒ d	S d	S )
z/Handler for ASGI request context started event.rÞ  rt   r}   r˜   rä  Úrequest_spansÚtyper!   N)rm   r›   r-   r•   r   r   r–   r   r»   r”   r1   r   r  rç  )rf   rÞ  rt   rH   rM   rM   rN   Ú_on_asgi_request¿  s   

þr  Ú_topicÚ
send_valueÚsend_keyrµ   r  c           
      C   s¦   |j }| ttj¡ | tt|d u ƒ¡ | t|r| 	d¡nd ¡ | 
t|p'd¡ | 
td¡ tjjrOi }t |j|¡ | ¡ D ]\}}	| ||	 d¡f¡ q@d S d S )NrÓ  rö   r   )rH   r”   r   r   rË  r&   r|  rˆ   r"   Údecoder‰   r$   r   r	   Úaiokafkarƒ  r;   rk  rl  r‡   r»   rØ  )
r  r  r   rµ   rf   r  rH   Útracing_headersÚkeyr  rM   rM   rN   Ú_on_aiokafka_send_startÓ  s   ûr%  c                 C   s   t | |ƒ d S rO   )r“   )rf   rY   r  rM   rM   rN   Ú_on_aiokafka_send_completeë  s   r&  Ú	_instancerF  Úerrc           	      C   sØ   |j }||_| tt|d uƒ¡ | td¡ |d urZ|jr#|j d¡nd }|j	p)d}t|j
ƒ}| t|¡ | tt|jd u ƒ¡ t|tƒrK| t|¡ | t|jpRd¡ | t|¡ |d urj| t|ƒ||j¡ d S d S )Nr   rÓ  rö   )rH   rF  r”   r%   r|  r‰   r   r$  r!  ÚoffsetÚtopicr'   r&   r  Ú
isinstancerˆ   r"   r$   r  r#   rW   r  Ú__traceback__)	r'  rf   rF  rs  r(  rH   Úmessage_keyÚmessage_offsetr*  rM   rM   rN   Ú_on_aiokafka_getone_messageñ  s"   


ÿr/  Úmessagesc                 C   s0  |j }| tt|d uƒ¡ | td¡ |d ur”tt|ƒƒj}| t	|¡ i }| 
¡ D ]}|j}|j}||vr:g ||< ||  |¡ q*t| 
¡ ƒ}	| td |	¡¡ | ¡ D ]\}}
d ttt|
ƒƒ¡}| d|› |¡ qU| ¡ D ]$\}}|D ]}tjjr’|jr’dd„ |jD ƒ}t |¡}| |¡ qwqqd S d S )Nr   ú,zkafka.partitions.c                 S   s>   i | ]\}}|d ur|t |ttfƒr|jdddnt|ƒ“qS )NrÓ  Úignore)Úerrors)r+  rÕ  Ú	bytearrayr!  r|  )Ú.0r$  ÚvalrM   rM   rN   Ú
<dictcomp>/  s
    $þz0_on_aiokafka_getmany_message.<locals>.<dictcomp>)rH   r”   r%   r|  r‰   r   rR   rA   r*  r3   r²   r  r»   Úlistrˆ   r'   rü   r‡   ÚmapÚsortedr	   r"  rƒ  rµ   r;   Úextractr  )r'  rf   r0  rH   Úfirst_topicÚtopics_partitionsÚtopic_partitionr*  r  Ú
all_topicsÚ
partitionsÚpartition_listÚrecordsrn  Ú
dd_headersrl  rM   rM   rN   Ú_on_aiokafka_getmany_message  s<   þ

€÷ìrD  c                 K   sJ   t | |fi |¤Ž}d|jt< |  d¡}t tj¡r#t 	|j
|j¡ d S d S )Nr   r÷   )r   r!  r   rm   r   rƒ  r	   Úhttpxr;   rk  rl  rµ   )rf   rr   rŠ   rH   r÷   rM   rM   rN   Ú_on_httpx_request_start9  s   

ÿrF  c                 C   sP   | j }| j}| j}| j}|d | } |dur | dtt|ƒƒ 7 } | |7 } t| ƒS )zC
    Helper to convert the httpx.URL parts from bytes to a str
    s   ://Nó   :)Ú
raw_schemeÚraw_hostÚportÚraw_pathr)   r|  r*   )r¡   ÚschemeÚhostrJ  rK  rM   rM   rN   Úhttpx_url_to_strC  s   rN  c                 C   s|   | j }|  d¡}|  d¡}z*tj|tj|jt|jƒ|jj	|r!|j
nd |jj|j|r,|jnd d	 W t| |ƒ d S t| |ƒ w )Nr÷   rì   )r    r¡   Útarget_hostr¢   r£   rx   r¤   )rH   rm   r   r¨   r	   rE  r    rN  r¡   rM  r¢   r£   rµ   r“   )rf   rY   rH   r÷   rì   rM   rM   rN   Ú_on_httpx_send_completedS  s    

÷rP  c                  C   sø  t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dtd¡ t  dt¡ t  dt¡ t  d	t	¡ t  d
t
¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  dt¡ t  d t¡ t  d!t¡ t  d"t¡ t  d#t¡ t  d$t¡ t  d%t¡ t  d&t¡ t  d't¡ t  d(t¡ t  d)t¡ t  d*t ¡ t  d+t!¡ t  d,t!¡ t  d-t"¡ t  d.t#¡ t  d/t#¡ t  d0t$¡ t  d1t%¡ t  d2t&¡ t  d3t'¡ t  d4t(¡ t  d5t%¡ t  d6t$¡ t  d7t)¡ t  d8t*¡ t  d9t+¡ t  d:t,¡ t  d;t-¡ t  d<t.¡ t  d=t/¡ t  d>t0¡ t  d?t1¡ t  d@t2¡ t  dAt3¡ t  dBt4¡ t  dCt5¡ t  dDt6¡ t  dEt7¡ t  dFt8¡ t  dGt9dH¡ t  dIt:¡ t  dJt;¡ t  dKt<¡ t  dLt=¡ dMD ]} t  dN| › t>¡ qÌt  dOt?¡ dPD ]}t  dQ|› t@¡ qát  dRtA¡ t  dStB¡ d S )TNzwsgi.request.preparezwsgi.request.preparedzwsgi.app.successzwsgi.app.exceptionzwsgi.request.completeÚtraced_iterablezwsgi.response.preparedzflask.start_response.prezflask.request_call_modifierz flask.request_call_modifier.postzflask.renderzcontext.started.wsgi.responsez&context.started.flask._patched_requestzdjango.traced_get_response.prezdjango.finalize_response.prezdjango.start_responseúdjango.func.wrappedzdjango.block_request_callbackz!django.after_request_headers.postz#botocore.patched_api_call.exceptionz!botocore.patched_api_call.successz)botocore.patched_kinesis_api_call.successz+botocore.patched_kinesis_api_call.exceptionz$botocore.prep_context_injection.postz!botocore.patched_api_call.startedz)botocore.patched_kinesis_api_call.startedzbotocore.kinesis.update_recordz%botocore.patched_sqs_api_call.startedz'botocore.patched_sqs_api_call.exceptionz%botocore.patched_sqs_api_call.successz botocore.sqs_sns.update_messagesz/botocore.patched_stepfunctions_api_call.startedz1botocore.patched_stepfunctions_api_call.exceptionz#botocore.stepfunctions.update_inputz$botocore.eventbridge.update_messagesz'botocore.client_context.update_messagesz)botocore.patched_bedrock_api_call.startedz+botocore.patched_bedrock_api_call.exceptionz!botocore.bedrock.process_responsez*botocore.bedrock.process_response_conversez botocore.sqs.ReceiveMessage.postz botocore.kinesis.GetRecords.postzredis.async_command.postzredis.command.postúredis.execute_pipelinezvalkey.async_command.postzvalkey.command.postz azure.eventhubs.message_modifierz+azure.functions.event_hubs_trigger_modifierz%azure.functions.request_call_modifierzazure.functions.start_responsez%azure.functions.trigger_call_modifierz,azure.functions.service_bus_trigger_modifierz!azure.servicebus.message_modifierúasgi.websocket.receive.messageúasgi.websocket.send.messageú!asgi.websocket.disconnect.messageúasgi.websocket.close.messagezcontext.started.asgi.requestzaiokafka.send.startzaiokafka.getone.messagezaiokafka.getmany.messagezaiokafka.send.completedzweb.request.startzweb.request.finishzweb.request.final_tagsr{   r€   ztest_visibility.enableztest_visibility.disableztest_visibility.is_enabledÚ
is_enabledúrq.worker.perform_jobzrq.worker.after.perform.jobúrq.queue.enqueue_jobzmolten.router.match)9zaiohttp.requestzbottle.requestzcherrypy.requestzfalcon.requestzmolten.requestúmolten.trace_funczpyramid.requestzsanic.requestztornado.requestz
flask.callzflask.jsonifyzflask.render_templaterW  rV  rT  rU  zwsgi.__call__zdjango.cacheúdjango.middleware.__call__údjango.middleware.funcú#django.middleware.process_exceptionú!django.middleware.process_requestú"django.middleware.process_responseú+django.middleware.process_template_responseúdjango.middleware.process_viewúdjango.template.renderúdjango.traced_get_responsezdjango.process_exceptionrR  zbotocore.instrumented_api_callz"botocore.instrumented_lib_functionz!botocore.patched_kinesis_api_callzbotocore.patched_sqs_api_callz'botocore.patched_stepfunctions_api_callz!botocore.patched_bedrock_api_callúredis.commandrS  zvalkey.commandrZ  zrq.traced_queue_fetch_jobrY  zrq.job.performzrq.job.fetch_manyú&azure.eventhubs.patched_producer_batchú%azure.eventhubs.patched_producer_sendú+azure.eventhubs.patched_producer_send_batchú"azure.functions.patched_event_hubsú%azure.functions.patched_route_requestú#azure.functions.patched_service_busúazure.functions.patched_timerú'azure.servicebus.patched_producer_batchú*azure.servicebus.patched_producer_scheduleú&azure.servicebus.patched_producer_sendúpsycopg.patched_connectzaiokafka.sendúaiokafka.getoneúaiokafka.getmanyzcontext.started.zcontext.started.httpx.request)zasgi.requestrW  rV  rT  rU  r\  r]  r^  r_  r`  ra  rb  rc  rd  r[  rS  re  ri  rj  rk  rl  rm  rn  ro  rp  rf  rg  rh  rq  rr  zcontext.ended.zcontext.ended.django.cachezcontext.ended.httpx.request)Cr(   ÚonrÞ   rô   râ   rã   rê   rî   r	  r  r   r  rÏ   rÅ   r#  r(  r/  r8  r;  r@  rN  rX  rg  rI  rp  rt  ru  r  r‚  rŽ  rŒ  r•  r™  r  r¦  r§  rÍ  rÊ  rÆ  rÈ  rÉ  r  r  r  r  r  r%  r/  rD  r&  r   r­   r&  r¶   r¼   r¬  r¯  r°  r‡  r‰  r„  rÐ  r   rF  r“   r2  rP  )Úcontext_namera   rM   rM   rN   Úlistenl  s¦   = ru  )T)rH   r   rO   )rg   N)»rÙ   rX   Útypesr   Útypingr   r   r   r   Úurllibr   ÚwraptÚddtracer	   Úddtrace._trace._inferred_proxyr
   r   Úddtrace._trace._span_linkr   r  Úddtrace._trace._span_pointerr   r   r   Úddtrace._trace.spanr   Úddtrace._trace.utilsr   Úddtrace.constantsr   r   r   r   r   Úddtrace.contribr   Ú+ddtrace.contrib.internal.botocore.constantsr   Ú$ddtrace.contrib.internal.trace_utilsr   r   Úddtrace.extr   r   r   r   r   r    r¡  r!   Úddtrace.ext.kafkar"   r#   r$   r%   r&   r'   Úddtrace.internalr(   Úddtrace.internal.compatr)   r*   r+   r,   Úddtrace.internal.constantsr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   Úddtrace.internal.loggerr8   Úddtrace.internal.samplingr9   Ú-ddtrace.internal.schema.span_attribute_schemar:   Úddtrace.propagation.httpr;   Úddtrace.tracer<   rb   r   ÚEXECUTEDr  ÚRESUMINGr  ÚObjectProxyr=   ÚExecutionContextrª   r|  rq   r?  r   Útupler  ÚBaseExceptionr“   r—   r   r­   r©   r¶   r¼   rÅ   rÏ   rÞ   râ   rã   rê   rî   rô   rÃ   r	  r  r  r  r   r#  r&  r(  r/  r2  r8  r;  r@  rI  rN  rX  rg  rp  rt  ru  r  r‚  r„  r‡  r‰  r8  rŒ  rŽ  r•  r™  r  r¦  r§  r¬  r¯  r°  rV  rº  rÁ  rÆ  rÈ  rÉ  rÊ  rÍ  rÐ  rÙ  rÝ  rã  rç  r§   ré  rø  rû  r	  r  r  r  r  r  rÕ  r%  r&  r/  rD  rF  rN  rP  ru  rM   rM   rM   rN   Ú<module>   s   

4	-ÿ
þ 	


	ÿÿÿÿ
ÿÿþ
ý$ý
ÿ
þÿ
þ
ýÿÿÿÿ
þ	ÿù
ø	
			ÿþýüû
ú
ÿþý
üû
ú,ÿþýüûú
ùÿÿ
þÿþýüûúÿþýü *
ÿþý 
;