o
    ii#                     @   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! ee"Z#da$dd Z%dd Z&dd Z'dd Z(dd Z)e*deddd d!de)d"iid ed#dd$ej+e&e'd%d&d'ej+e%dd(ed)dd$ej+e(dd*ed+dd$ej+e(dd*ed,dd$ej+e(dd*d-id.d/ d0e,fd1d2Z-d0e.e,e,f fd3d4Z/d5d6 Z0d7d8 Z1d9d: Z2d;d< Z3d=d> Z4d?d@ Z5dAdB Z6dS )C    N)config)Pin)_SPAN_MEASURED_KEY)	SPAN_KIND)trace_utils)SpanKind)	SpanTypes)db)net)	COMPONENT)
get_logger)schematize_database_operation)schematize_service_name)get_argument_value)DDTraceDeprecationWarning)unwrap)tracer)	deprecateFc                 O      t ||dd|_d S )Nr   sqlr   resourceinstancespanconfargskwargs r   Z/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/vertica/patch.pycopy_span_start      r    c                 O   r   )Nr   	operationr   r   r   r   r   execute_span_start#   r!   r#   c                 O      | tj| j d S N
set_metricdbxROWCOUNTrowcountr   resultr   r   r   r   r   r   r   execute_span_end'   r!   r-   c                 O   r$   r%   r&   r+   r   r   r   fetch_span_end+   r!   r.   c                 O   s   i }| j d |tj< | j d |tj< | j d |tj< d| j v r'| j d |tj< d| j v r4| j d |tj< t|t	j
d d d}|| d S )Nhostportuserdatabasepatch$vertica_python.vertica.cursor.Cursortags_config)optionsr
   TARGET_HOSTTARGET_PORTSERVER_ADDRESSr(   USERNAMEr   r   verticaonto)r   cursor_r   r   r   r6   pinr   r   r   cursor_span_end/   s   

rC   r>   routinesr@   )trace_enabledspan_endzvertica.query)database_providerT)operation_name	span_type
span_startrF   measuredzvertica.copy)rH   rI   rJ   rK   zvertica.fetchone)rH   rI   rF   rK   zvertica.fetchallzvertica.nextset)executecopyfetchonefetchallnextset)z,vertica_python.vertica.connection.Connectionr4   )_default_service_dbapi_span_name_prefixr3   returnc                  C   s   dd l } | jS )Nr   )vertica_python__version__)rT   r   r   r   get_version|   s   rV   c                   C   s   ddiS )Nr>   z>=0.6r   r   r   r   r   _supported_versions   s   rW   c                   C   s(   t dtdd trd S ttj dad S )NzNThe vertica integration is deprecated and will be removed in a future version.z5.0.0)categoryremoval_versionT)r   r   _PATCHED_installr   r>   r   r   r   r   r3      s   
r3   c                   C   s   t rttj da d S d S )NF)rZ   
_uninstallr   r>   r   r   r   r   unpatch   s   
r]   c                 C   sh   | d D ]-}| d\}}}t|}t||d }|s!td q| d | d D ]}t|| q)qd S )Nr3   .z
                Unable to find corresponding class for tracing configuration.
                This version may not be supported.
                rD   )
rpartition	importlibimport_modulegetattrlogdebugr   )r   patch_class_path	patch_modrA   patch_classmodclspatch_routiner   r   r   r\      s   
r\   c                 C   sX   |j j}|D ]#}d|j|j}|| d vrq| d | d }||v r)||   S qi S )zcAttempts to find the config for a routine based on the bases of the
    class of the instance.
    {}.{}r3   rD   )	__class____mro__format
__module____name__)r   r   routine_namebasesbase	full_nameconfig_routinesr   r   r   _find_routine_config   s   rv   c                    s*   d |d}t|| fdd}d S )Nrk   __init__c                    s4   | |i |}t  di  d  d| |S )Nr6   r3   r5   )r   getr?   )wrappedr   r   r   rr   
patch_itemr   r   init_wrapper   s   

z#_install_init.<locals>.init_wrapperrn   wraptpatch_function_wrapper)r|   rg   rf   r   patch_class_routiner}   r   r{   r   _install_init   s   
r   c                    s*   d |}t|| fdd}d S )Nrk   c                    sh  t |}|jd v r|jd  }nt |}|dd}d }zz|sM| |i |}|W W dt vr7d }d|v rL|d ||||g|R i | S S |d }	tj|	t	| |ddi}|
t j |
tjd	 |
ttj |d
dr|td ||j d|v r|d |||g|R i | | |i |}|W  d    W W dt vrd }d|v r|d ||||g|R i | S S 1 sw   Y  W n! ty }
 zd|v r|d ||
||g|R i |  d }
~
ww W dt vrd }d|v r|d ||||g|R i | d S d S dt vrd }d|v r3|d ||||g|R i | w w )NrD   rE   Tr,   rF   rH   rI   )servicerI   r>   rK   F   rJ   on_error)r   get_fromr7   rv   rx   localsr   tracer   ext_service_set_tag_strr   integration_namer(   SYSTEMr   r   CLIENTr'   r   set_tagsr6   	Exception)ry   r   r   r   rB   r   enabledr   r,   rH   errr   rj   r   r   wrapper   sp   

"

" 

$
"z!_install_routine.<locals>.wrapperr~   )rj   rg   rf   r   r   r   r   r   r   _install_routine   s   
r   c                 C   sT   | d D ]#}| d\}}}t||||  | d | d D ]	}t||||  qqd S )Nr3   r^   rD   )r_   r   r   )r   re   rf   rA   rg   rj   r   r   r   r[     s   r[   )7r`   r   ddtracer   ddtrace._trace.pinr   ddtrace.constantsr   r   ddtrace.contribr   ddtrace.extr   r   r	   r(   r
   ddtrace.internal.constantsr   ddtrace.internal.loggerr   ddtrace.internal.schemar   r   ddtrace.internal.utilsr   #ddtrace.internal.utils.deprecationsr   ddtrace.internal.utils.wrappersr   ddtrace.tracer   ddtrace.vendor.debtcollectorr   rp   rc   rZ   r    r#   r-   r.   rC   _addSQLstrrV   dictrW   r3   r]   r\   rv   r   r   r[   r   r   r   r   <module>   s    	
	
	:9