o
    i                     @   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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&de'eddedddee j(dddee j(ddde#d dd ej)dej*dej+d ej,d!iZ-d"e.fd#d$Z/d"e'e.e.f fd%d&Z0d'd( Z1d)d* Z2d+d, Z3d-d. Z4dS )/    N)wrap_function_wrapper)config)Pin)_SPAN_MEASURED_KEY)	SPAN_KIND)TracedConnection)_convert_to_string)ext_service)SpanKind)	SpanTypes)db)net)	COMPONENT)schematize_database_operation)schematize_service_name)asbool)unwrap)_DBM_Propagator)tracermysqldbmysqlzmysql.query)database_providerDD_MYSQLDB_TRACE_FETCH_METHODSF)defaultDD_MYSQLDB_TRACE_CONNECTquery)_default_service_dbapi_span_name_prefix_dbapi_span_operation_nametrace_fetch_methodstrace_connect_dbm_propagator)hostr   )user   )r      returnc                   C   s   d tttjdd S )N.r   r%   )joinmapstrMySQLdbversion_info r-   r-   Z/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/mysqldb/patch.pyget_version/   s   r/   c                   C   s   ddiS )Nr   *r-   r-   r-   r-   r.   _supported_versions3   s   r1   c                  C   s   t tddrd S dt_t t tddt ttdr"tddt ttdr-tddt tj	rBdd	l
m}  dd
lm} | | d S d S )N_datadog_patchFTr+   Connect
Connectionconnectr   )"_set_metric_iast_instrumented_sink)VULN_SQL_INJECTION)getattrr+   r2   r   onto_w_connecthasattr
asm_config_iast_enabledddtrace.appsec._iast._metricsr6   ddtrace.appsec._iast.constantsr7   )r6   r7   r-   r-   r.   patch7   s   

rA   c                  C   sh   t tddsd S dt_tt} | r| t ttd ttdr&ttd ttdr2ttd d S d S )Nr2   Fr3   r4   r5   )r8   r+   r2   r   get_fromremove_from_ur<   )pinr-   r-   r.   unpatchN   s   





rF   c                 C   s   t t}|r| rtjjs| |i |}n9tjdt	|tjt
jd$}|ttjj |ttj |td | |i |}W d    n1 sKw   Y  t|g|R i |S )NzMySQLdb.connection.connect)service	span_typer$   )r   rB   r+   enabledr   r   r    r   tracer	   r   SQL_set_tag_strr   integration_namer   r
   CLIENT
set_metricr   
patch_conn)funcinstanceargskwargsrE   connspanr-   r-   r.   r;   _   s   
r;   c                    sV    fddt  D }d|tj< | j|tj< t|d}t| |t	j
d}|| |S )Nc                    sJ   i | ]!\}\}}|v st  |kr||v rt| nt | qS r-   )lenr   ).0tkprS   rT   r-   r.   
<dictcomp>t   s
    
 zpatch_conn.<locals>.<dictcomp>r   )tags)rE   cfg)KWPOS_BY_TAGitemsr   SYSTEMportr   TARGET_PORTr   r   r   r   r9   )rU   rS   rT   r^   rE   wrappedr-   r\   r.   rP   s   s   


rP   )5osr+   wraptr   r:   ddtracer   ddtrace._trace.pinr   ddtrace.constantsr   r   ddtrace.contrib.dbapir   $ddtrace.contrib.internal.trace_utilsr   r	   ddtrace.extr
   r   r   r   ddtrace.internal.constantsr   ddtrace.internal.schemar   r   ddtrace.internal.settings.asmr=   ddtrace.internal.utils.formatsr   ddtrace.internal.utils.wrappersr   rD   (ddtrace.propagation._database_monitoringr   ddtrace.tracer   _adddictgetenvTARGET_HOSTSERVER_ADDRESSUSERNAMEr`   r*   r/   r1   rA   rF   r;   rP   r-   r-   r-   r.   <module>   sX    
