o
    i                     @   sV  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& ee'Z(dej)j*de+fddZ,de-de-fddZ.de-dee- fddZ/dd  Z0dS )!    )Any)Optional)parseN)config)Pin)_SPAN_MEASURED_KEY)	SPAN_KIND)trace_utils)_sanitized_url)SpanKind)	SpanTypes)	COMPONENT)USER_AGENT_HEADER)
get_logger)OTLP_EXPORTER_HEADER_IDENTIFIER)schematize_url_operation)SpanDirection)get_argument_value)HTTPPropagator)tracerrequestreturnc                 C   s>   t jst jsdS | jtd}| dd}t|v rdS dS )zMDetermine if a request is submitting data to the OpenTelemetry OTLP exporter.F  -T)	r   _otel_logs_enabled_otel_metrics_enabledheadersgetr   lowerreplacer   )r   
user_agentnormalized_user_agent r#   `/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/requests/connection.pyis_otlp_export   s   r%   uric                 C   sX   t | }|j}z|jd urd|t|jf }W n ty&   d|f }Y nw ||jfS )Nz%s:%sz%s:?)r   urlparsehostnameportstr
ValueErrorpath)r&   
parsed_urir(   r#   r#   r$   _extract_hostname_and_path)   s   


r.   c                 C   sT   |  dd }|dkrd S t| }| dd|}|dkr|}||kr$d S | || S )N?   r   #)findlenrfind)r&   startendjr#   r#   r$   _extract_query_string5   s   r9   c                 C   s  t jstjs| |i |S t||dd}|rt|r!| |i |S t|j}d}|jdur2|j	 }t
|\}}|durC|dd nd}	i }
t|}|rQ|j}
d}|
d r[|r[|}|du re|
dd}|du ro|
dd}|du rztdtj}td	d
tjd}t j||| d| tjd}|ttjj |ttj | t!d |
drt"#|j$|j% d }}zH| |i |}|W z&d}|dur|j&}t't(|di }tj)|tj|j%|||j|	|t*|d	 W n t+y   t,j-ddd Y nw W  d   S z'd}|dur|j&}t't(|di }tj)|tj|j%|||j|	|t*|d	 W w  t+y9   t,j-ddd Y w w 1 s>w   Y  dS )z(Trace the `Session.send` instance methodr   r   r   N:split_by_domainserviceservice_namezrequests.requesthttp)protocol	directionr   )r<   resource	span_typer0   distributed_tracingr   )request_headersresponse_headersmethodurltarget_hoststatus_codequeryzrequests: error adding tagsT)exc_info).r   enabled
asm_config_apm_opt_outr   r%   r
   rG   rF   upperr.   splitr   get_from_configr   r	   ext_servicer   requestsr   r   OUTBOUNDtracer   HTTP_set_tag_strr   integration_namer   r   CLIENT
set_metricr   r   injectcontextr   rI   dictgetattrset_http_metar9   	Exceptionlogdebug)funcinstanceargskwargsr   rG   rF   r(   r,   host_without_portcfgpinr<   operation_namespanresponserE   statusr#   r#   r$   
_wrap_sendE   s   



 



ro   )1typingr   r   urllibr   rT   ddtracer   ddtrace._trace.pinr   ddtrace.constantsr   r   ddtrace.contribr	   $ddtrace.contrib.internal.trace_utilsr
   ddtrace.extr   r   ddtrace.internal.constantsr   r   ddtrace.internal.loggerr   (ddtrace.internal.opentelemetry.constantsr   ddtrace.internal.schemar   -ddtrace.internal.schema.span_attribute_schemar   ddtrace.internal.settings.asmrM   ddtrace.internal.utilsr   ddtrace.propagation.httpr   ddtrace.tracer   __name__rb   modelsRequestboolr%   r*   r.   r9   ro   r#   r#   r#   r$   <module>   s6    