o
    i[                     @   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! e"edej#Z$e%de&ede'e (deee (ddd de)fddZ*de&e)e)f fddZ+d d! Z,d"d# Z-d$d% Z.dS )&    N)config)Pin)_SPAN_MEASURED_KEY)	SPAN_KIND)trace_utils)instrumented_execute_command)instrumented_pipeline)SpanKind)	SpanTypes)db)redis)	COMPONENT)schematize_cache_operation)schematize_service_name)CMD_MAX_LEN)asbool)stringify_cache_args)unwrap)tracerVERSIONredisclusterDD_REDISCLUSTER_CMD_MAX_LENGTHDD_REDIS_RESOURCE_ONLY_COMMANDT)_default_servicecmd_max_lengthresource_only_commandreturnc                   C   s   t tddS )N__version__ )getattrr    r    r    _/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/rediscluster/patch.pyget_version+   s   r"   c                   C   s   ddiS )Nr   z>=2.0r    r    r    r    r!   _supported_versions/   s   r#   c                  C   s   t tddrdS dt_tj} tdkr0| ddttj | ddt | dd	t	 t
 tj dS | dd
ttj | ddt | ddt	 t
 tj dS )zPatch the instrumented methods_datadog_patchFNT   r   r   r   z#client.RedisCluster.execute_commandzclient.RedisCluster.pipelinez pipeline.ClusterPipeline.executez"StrictRedisCluster.execute_commandzStrictRedisCluster.pipelinezStrictClusterPipeline.execute)r   r   r$   wraptwrap_function_wrapperREDISCLUSTER_VERSIONr   r   r   traced_execute_pipeliner   ontoRedisClusterStrictRedisCluster)_wr    r    r!   patch3   s   r/   c                   C   st   t tddr8dt_tdkr$ttjjd ttjjd ttjjd d S ttj	d ttj	d ttj
d d S d S )Nr$   Fr%   execute_commandpipelineexecute)r   r   r$   r)   r   clientr,   r1   ClusterPipeliner-   StrictClusterPipeliner    r    r    r!   unpatchF   s   r6   c                 C   s   t |}|r| s| |i |S dd |jD }d|}tjttj	tj
d|t|tjdtjd=}|ttj |ttjj |tjtj
 |td |tj| |tjt|j | |i |W  d    S 1 suw   Y  d S )Nc                 S   s   g | ]}t |jtjjd qS ))cmd_max_len)r   argsr   r   r   ).0cr    r    r!   
<listcomp>^   s    z+traced_execute_pipeline.<locals>.<listcomp>
)cache_providerr   )resourceservice	span_type   )r   get_fromenabledcommand_stackjoinr   tracer   redisxCMDAPPr   ext_servicer   r   r
   REDIS_set_tag_strr   r	   CLIENTr   integration_namer   SYSTEM
set_metricr   RAWCMDPIPELINE_LENlen)funcinstancer8   kwargspincmdsr>   sr    r    r!   r*   Y   s,   

$r*   )/osr   r'   ddtracer   ddtrace._trace.pinr   ddtrace.constantsr   r   ddtrace.contribr   $ddtrace.contrib.internal.redis.patchr   r   ddtrace.extr	   r
   r   r   rG   ddtrace.internal.constantsr   ddtrace.internal.schemar   r   ddtrace.internal.utils.formatsr   r   r   ddtrace.internal.utils.wrappersr   ddtrace.tracer   r   r   r)   _adddictintgetenvstrr"   r#   r/   r6   r*   r    r    r    r!   <module>   sH    
