o
    i$                  	   @   s  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* e#e+Z,e-dde%di i Z.dddddddd d!Z/d"d# Z0d$d% Z1d&e2fd'd(Z3d&e4e2e2f fd)d*Z5d&e4e2e2f fd+d,Z6d-d. Z7d/d0 Z8d1d2 Z9d3d4 Z:d5d6 Z;d7d8 Z<d9d: Z=d;d< Z>d=S )>    )import_module)PackageNotFoundError)version)parse)wrap_function_wrapper)config)_limits)Pin)_SPAN_MEASURED_KEY)	SPAN_KIND)quantize)ext_service)&extract_netloc_and_query_info_from_url)SpanKind)	SpanTypeselasticsearch)http)net)	COMPONENT)
get_logger)schematize_service_name)unwrap)tracerr   _default_serviceelasticsearch1elasticsearch2elasticsearch5elasticsearch6elasticsearch7elastic_transportopensearchpy)r   r   r   r   r   r   zelastic-transportzopensearch-pyc               	   c   sH    t  D ]} zt| }t|ddt| < |V  W q ty!   Y qw d S )N__versionstr__ )ES_PACKAGE_TO_MODULE_NAMEvaluesr   getattrES_MODULE_VERSIONSImportError)module_namemodule r+   `/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/elasticsearch/patch.py_es_modules4   s   
r-   c                 C   s   t | ddS )N__version__r#   )r&   r   r+   r+   r,   get_version_tuple>   s   r/   returnc                   C   s   dS )Nr#   r+   r+   r+   r+   r,   get_versionB   s   r1   c                   C   s   ddiS )Nr   z>=1.10r+   r+   r+   r+   r,   _supported_versionsF   s   r2   c               	   C   s8   t st D ]} zt| t | < W q ty   Y qw t S N)r'   r$   keysget_package_versionr   )	es_moduler+   r+   r,   get_versionsJ   s   r7   c                 C   sB   z| j jW S  ty    z| jW  Y S  ty   |  Y  Y S w w r3   )_async	transportAttributeErrorr   r+   r+   r,   _get_transport_moduleT   s   
r;   c                  C      t  D ]} tt|  qd S r3   )r-   _patchr;   r   r+   r+   r,   patchb      
r>   c                 C   sx   t | ddrd S t| dr d| _t| jdt|  t | j t| dr:d| _t| jdt	|  t | j d S d S )N_datadog_patchF	TransportTperform_requestAsyncTransport)
r&   hasattrr@   _wrA   _get_perform_requestr	   ontorC   _get_perform_request_asyncr9   r+   r+   r,   r=   g   s   

r=   c                  C   r<   r3   )r-   _unpatchr;   r   r+   r+   r,   unpatcht   r?   rK   c              	   C   sP   t | ddsd S dD ]}zt | |}W n	 ty   Y q
w d| _t|d q
d S )Nr@   F)rA   rC   rB   )r&   r:   r@   _u)r9   	classnameclsr+   r+   r,   rJ   y   s   rJ   c                    s    fdd}|S )Nc                 3   s   t |}|r| s| |i |V  d S tjdt|tjtj	dU}|j
r.||j
 |ttjj |ttj |td |\}}|d}|d}	t|}
|
j}|rat|}n|
j}|tj| |tj| |tj| z|jj}W n t y   |j!" }Y nw |D ]}t#|j$\}}|r|t%j&| |t%j'|  nqtjj(r|t)j*| |dv rz|j+,|	}W n t y   |j-,|	}Y nw t.|t/j0kr|tj1| n|tj1dt.|t/j0f  d }t2|}z
| |i |V }W n  j3y } z|4t)j5t6|dd	 d|_7 d }~ww z6t8|t9r@z|j:|j;}}|j<}W n t y?   |\}}Y nw |}|d
}|rS|tj=t>| W n t?ye   t@jAddd Y nw |rp|4t)j5| 	 W d    d S 1 s}w   Y  d S )Nzelasticsearch.query)service	span_type   paramsbody)GETPOSTz"<body size %s exceeds limit of %s>status_codei  tookzUnexpected exceptionT)exc_info)Br	   get_fromenabledr   tracer   r   r   r   ELASTICSEARCHtagsset_tags_set_tag_strr   integration_namer   r   CLIENT
set_metricr
   getr   urlparsepath	urlencodequerymetadataMETHODURLPARAMSconnection_poolconnectionsr:   	node_poolallr   hostr   TARGET_HOSTSERVER_ADDRESStrace_query_stringr   QUERY_STRING
serializerdumpsserializerslenr   MAX_SPAN_META_VALUE_LENBODYr   TransportErrorset_tagSTATUS_CODEr&   error
isinstancetuplemetarS   statusTOOKint	Exceptionlogdebug)funcinstanceargskwargspinspanmethodtargetrR   rS   parsedurlencoded_paramsrm   
connectionhostname_ser_bodyr   resulter   datarW   rI   r+   r,   _perform_request   s   





&z3_get_perform_request_coro.<locals>._perform_requestr+   r9   r   r+   rI   r,   _get_perform_request_coro   s   kr   c                       t |   fdd}|S )Nc                    s<    | |||}t |}z|| W |S  ty   Y |S w r3   nextsendStopIterationr   r   r   r   coror   _perform_request_coror+   r,   r      s   z._get_perform_request.<locals>._perform_requestr   r   r+   r   r,   rF         	rF   c                    r   )Nc                    sD    | |||}t |I d H }z|| W |S  ty!   Y |S w r3   r   r   r   r+   r,   r     s   z4_get_perform_request_async.<locals>._perform_requestr   r   r+   r   r,   rH     r   rH   N)?	importlibr   importlib.metadatar   r   r5   urllibr   wraptr   rE   ddtracer   ddtrace._tracer   ddtrace._trace.pinr	   ddtrace.constantsr
   r   /ddtrace.contrib.internal.elasticsearch.quantizer   $ddtrace.contrib.internal.trace_utilsr   r   ddtrace.extr   r   r   rh   r   r   ddtrace.internal.constantsr   ddtrace.internal.loggerr   ddtrace.internal.schemar   ddtrace.internal.utils.wrappersr   rL   ddtrace.tracer   __name__r   _addr'   r$   r-   r/   strr1   dictr2   r7   r;   r>   r=   rK   rJ   r   rF   rH   r+   r+   r+   r,   <module>   sh    

o