o
    ٰi                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZ zd dlZd dlmZ W n eyM   e	dw d dlmZ erjd d	lmZ d d
lmZmZ d dlmZ dddZdddZdddZdddZ G dd de
Z!dS )     N)OP
SPANSTATUS)_check_minimum_versionDidNotEnableIntegration)TransactionSource)event_from_exceptionloggerpackage_versionqualname_from_functionreraise)remotezRay not installed.)TYPE_CHECKING)Callable)AnyOptional)ExcInforeturnc                   C   s   t   rd S td d S )Nz[[Tracing] Sentry not initialized in ray cluster worker, performance data will be discarded.)
sentry_sdk
get_client	is_activer	   debug r   r   O/home/ubuntu/.local/lib/python3.10/site-packages/sentry_sdk/integrations/ray.py_check_sentry_initialized   s
   r   funcCallable[..., Any]c                 C   sl   t | }t|j }t jdt jjd d}|r(|d jt jju r(|	d| n|
| |j|d| _d S )N_sentry_tracing)kinddefault)
parameters)inspect	signaturelistr!   values	ParameterKEYWORD_ONLYr   VAR_KEYWORDinsertappendreplace__signature__)r   r#   paramssentry_tracing_paramr   r   r   #_insert_sentry_tracing_in_signature(   s   

r/   c                     s8   t  t 	 d
							d fdd	} | t_ d S )NfOptional[Callable[..., Any]]argsr   kwargsr   r   c                    sH   t rg R i S d fdd}d ur"|S |S )Nuser_fr   r   r   c                    s   t ri S td d							dfdd	}t| r/|}n	i |}|j 	
					d fdd}||_|S )N)r   f_argsr   r   Optional[dict[str, Any]]f_kwargsr   c              	      s   t   tj| pi tjt tjtj	d}t
|5}z |i |}|tj W n tyD   |tj t }t| t|  Y nw |W  d    S 1 sQw   Y  d S )N)opnameoriginsource)r   r   continue_tracer   QUEUE_TASK_RAYr   RayIntegrationr:   r   TASKstart_transaction
set_statusr   OK	ExceptionINTERNAL_ERRORsysexc_info_capture_exceptionr   )r   r5   r7   transactionresultrF   )r4   r   r   new_funcR   s(   $zH_patch_ray_remote.<locals>.new_remote.<locals>.wrapper.<locals>.new_funcr2   r3   c               	      s   t jtjttjdD}dd t   D }z | i |d|i}|	t
j W n tyF   |	t
j t }t| t|  Y nw |W  d   S 1 sSw   Y  dS )z,
                Ray Client
                )r8   r9   r:   c                 S   s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>   s    zz_patch_ray_remote.<locals>.new_remote.<locals>.wrapper.<locals>._remote_method_with_header_propagation.<locals>.<dictcomp>r   N)r   
start_spanr   QUEUE_SUBMIT_RAYr   r>   r:   get_current_scopeiter_trace_propagation_headersrA   r   rB   rC   rD   rE   rF   rG   r   )r2   r3   spantracingrI   rF   old_remote_methodr4   r   r   &_remote_method_with_header_propagationv   s4   
$zf_patch_ray_remote.<locals>.new_remote.<locals>.wrapper.<locals>._remote_method_with_header_propagation)r5   r   r   r6   r7   r   r   r   )r2   r   r3   r   r   r   )r"   isclass	functoolswrapsr/   r   )r4   rJ   rvrW   )r2   r0   r3   
old_remoterU   r   wrapperJ   s6   

z6_patch_ray_remote.<locals>.new_remote.<locals>.wrapper)r4   r   r   r   )r"   rX   )r0   r2   r3   r]   r\   )r2   r0   r3   r   
new_remote?   s   
Lz%_patch_ray_remote.<locals>.new_remote)N)r0   r1   r2   r   r3   r   r   r   )r   rY   rZ   ray)r_   r   r^   r   _patch_ray_remote<   s   
[ra   rF   r   r3   r   c                 K   s6   t  }t| |jdtjdd\}}t j||d d S )NF)handledtype)client_options	mechanism)hint)r   r   r   optionsr>   
identifiercapture_event)rF   r3   clienteventrf   r   r   r   rG      s   
rG   c                   @   s(   e Zd ZdZde ZedddZdS )r>   r`   zauto.queue.r   Nc                  C   s   t d} tt|  t  d S )Nr`   )r
   r   r>   ra   )versionr   r   r   
setup_once   s   

zRayIntegration.setup_oncer   N)__name__
__module____qualname__rh   r:   staticmethodrm   r   r   r   r   r>      s
    
r>   rn   )r   r   r   N)rF   r   r3   r   r   N)"r"   rY   rE   r   sentry_sdk.constsr   r   sentry_sdk.integrationsr   r   r   sentry_sdk.tracingr   sentry_sdk.utilsr   r	   r
   r   r   r`   r   ImportErrortypingr   collections.abcr   r   r   r   r   r/   ra   rG   r>   r   r   r   r   <module>   s0    

	

b