o
    iy                     @   s  d dl Z 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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) ee*Z+e,de-de%e!dddd e,de-e%e .ddej/e%e j.dddd  d!e0fd"d#Z1d!e-e0e0f fd$d%Z2G d&d' d'ej3Z4ed(d) Z5ed*d+ Z6d,d- Z7d.d/ Z8d0d1 Z9d2d3 Z:dS )4    N)URL)config)Pin)	SPAN_KIND)ext_service)&extract_netloc_and_query_info_from_url)set_http_meta)unwrap)with_traced_module)wrap)SpanKind)	SpanTypes)	COMPONENT)
get_logger)schematize_url_operation)SpanDirection)
get_config)get_argument_value)asbool)HTTPPropagator)traceraiohttpT4DD_AIOHTTP_CLIENT_DISABLE_STREAM_TIMING_FOR_MEM_LEAKF)default)distributed_tracing"disable_stream_timing_for_mem_leakaiohttp_client%DD_AIOHTTP_CLIENT_DISTRIBUTED_TRACING!DD_AIOHTTP_CLIENT_SPLIT_BY_DOMAIN)r   default_http_tag_query_stringsplit_by_domainreturnc                   C   s   t jS N)r   __version__ r$   r$   Z/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/aiohttp/patch.pyget_version6   s   r&   c                   C   s   ddiS )Nr   z>=3.7r$   r$   r$   r$   r%   _supported_versions:   s   r'   c                       s,   e Zd Z fddZdd Zdd Z  ZS )_WrappedConnectorClassc                    s   t  | ||  d S r"   )super__init__onto)selfobjpin	__class__r$   r%   r*   ?   s   z_WrappedConnectorClass.__init__c                    l   t d| jj "}|ttjj | j	j
|g|R i |I d H }|W  d    S 1 s/w   Y  d S )Nz
%s.connect)r   tracer0   __name__set_tagr   r   r   integration_name__wrapped__connectr,   reqargskwargsspanresultr$   r$   r%   r7   C       $z_WrappedConnectorClass.connectc                    r1   )Nz%s._create_connection)r   r2   r0   r3   r4   r   r   r   r5   r6   _create_connectionr8   r$   r$   r%   r?   J   r>   z)_WrappedConnectorClass._create_connection)r3   
__module____qualname__r*   r7   r?   __classcell__r$   r$   r/   r%   r(   >   s    r(   c              
      sB  t ||dd}tt ||dd}|d}|dpi }	tjtddtjd	tj	t
|tjd
g}
tjjr9|j|
_|jd rIt|
j|	 |	|d< |
ttjj |
ttj t|r`||n|}t|\}}t|
tj|t||||	d ||i |I d H }t|
tj|j|j|j d |W  d    S 1 sw   Y  d S )Nr   method   urlparamsheaderszaiohttp.requesthttp)protocol	direction)	span_typeservicer   )rC   rE   target_hostqueryrequest_headers)response_headersstatus_code
status_msg)!r   r   getr   r2   r   r   OUTBOUNDr   HTTPr   r   r   r    hostrL   _configr   injectcontext_set_tag_strr   r5   r   r   CLIENTstrupdate_queryr   r   rG   statusreason)r   r.   funcinstancer:   r;   rC   rE   rF   rG   r<   url_strrV   rN   respr$   r$   r%   _traced_clientsession_requestR   sF   


	$rd   c                 C   s    ||i | t |j||_d S r"   )r(   
_connector)r   r.   r`   ra   r:   r;   r$   r$   r%   _traced_clientsession_init~   s   rf   c                 C   sL   t  |  t tj d}|| j tddt|  tddt|  d S )N)rW   r   zClientSession.__init__zClientSession._request)	r   r+   r   r   copyClientSessionr   rf   rd   )r   r.   r$   r$   r%   _patch_client   s
   ri   c                  C   s*   dd l } t| ddrd S t|  d| _d S )Nr   _datadog_patchFT)r   getattrri   rj   r   r$   r$   r%   patch   
   
rm   c                 C   s   t | jd t | jd d S )Nr*   _request)r	   rh   rl   r$   r$   r%   _unpatch_client   s   rp   c                  C   s*   dd l } t| ddsd S t|  d| _d S )Nr   rj   F)r   rk   rp   rj   rl   r$   r$   r%   unpatch   rn   rq   );osr   wraptyarlr   ddtracer   ddtrace._trace.pinr   ddtrace.constantsr   $ddtrace.contrib.internal.trace_utilsr   r   r   r	   r
   with_traced_module_syncr   *ddtrace.contrib.internal.trace_utils_asyncddtrace.extr   r   ddtrace.internal.constantsr   ddtrace.internal.loggerr   ddtrace.internal.schemar   -ddtrace.internal.schema.span_attribute_schemar   ddtrace.internal.telemetryr   _get_configddtrace.internal.utilsr   ddtrace.internal.utils.formatsr   ddtrace.propagation.httpr   ddtrace.tracer   r3   log_adddictgetenv_http_client_tag_query_stringr\   r&   r'   ObjectProxyr(   rd   rf   ri   rm   rp   rq   r$   r$   r$   r%   <module>   sl    



+
	