o
    i	                     @   s  d dl mZ d dl mZ d dlm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$ ee%Z&dZ'dZ(eG dd deZ)eG dd deZ*ej+dededej,d ej,d!e j-d"e)fd#d$Z.ej+dededej,d ej,d!e j-d"e*fd%d$Z.ej+dededej,d ej,d!e j-d"e*fd&d$Z.dS )'    )	dataclass)field)	FrameTypeN)_ORIGIN_KEY)DDExpressionEvaluationError)Probe)SpanDecorationFunctionProbe)SpanDecorationLineProbe)SpanDecorationMixin)SpanDecorationTargetSpan)SpanFunctionProbe)	LogSignal)EvaluationError)Signal)probe_to_signal	serialize)ExcInfoType)
get_logger)Metrics)_isinstance)Spanzdd.dynamic.spanzdebugger.probeidc                
       s   e Zd ZU dZedddZeje e	d< d fddZ
d	ejeejf ddfd
dZdejdeded	ejeejf ddf
ddZd	ejeejf ddfddZ  ZS )DynamicSpanzDynamically created spanFN)initdefault_span_cmreturnc                    s   t    d | _d S N)super__post_init__r   self	__class__ U/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/debugging/_signal/tracing.pyr   '   s   

zDynamicSpan.__post_init__scopec                 C   sZ   t t| j}tjjtd |jd d| _	| j	
 }||j |t|j |td d S )N)serviceresource	span_typedi)tcastr   probeddtracetracertrace	SPAN_NAME
func_qnamer   	__enter__set_tagstags_set_tag_strPROBE_ID_TAG_NAMEprobe_idr   )r!   r&   r-   spanr$   r$   r%   enter,   s   
zDynamicSpan.enterretvalexc_infodurationc                 C   s   | j d ur| j j|  d S d S r   )r   __exit__r!   r;   r<   r=   r&   r$   r$   r%   exit;   s   
zDynamicSpan.exitc                 C   s   t d)Nz.Dynamic line spans are not supported in Python)NotImplementedErrorr!   r&   r$   r$   r%   line@   s   zDynamicSpan.line)r   N)__name__
__module____qualname____doc__r   r   r+   Optionalr   __annotations__r   MappingstrAnyr:   r   floatr@   rC   __classcell__r$   r$   r"   r%   r   !   s   
 ,&r   c                
   @   s   e Zd ZdZdejeejf ddfddZdejeejf ddfddZ	d	ejd
e
dedejeejf ddf
ddZdejeejf ddfddZedeje fddZdefddZdS )SpanDecorationzDecorate a span.r&   r   Nc                 C   s|  t t| j}|jtjkrtj	 }n|jtj
krtj }n	td|j d S |d urtd|| |jD ]}z|jd u sE||sEW q6W n  tyf } z| jt|jd|j d W Y d }~q6d }~ww |jD ]N}z	|j|t}W n$ ty } z|d|j ddd |jD  W Y d }~qjd }~ww ||jt|tr|nt| |d	|j t t |j! qjq6d S d S )
Nz+Invalid target span for span decoration: %sz8Decorating span %r according to span decoration probe %rz Failed to evaluate condition: %s)exprmessagez_dd.di.%s.evaluation_errorz, c                 S   s   g | ]}t |qS r$   r   ).0vr$   r$   r%   
<listcomp>c   s    z1SpanDecoration._decorate_span.<locals>.<listcomp>z_dd.di.%s.probe_id)"r+   r,   r
   r-   target_spanr   ACTIVEr.   r/   current_spanROOTcurrent_root_spanlogerrordebugdecorationswhenr   errorsappendr   dslr5   valuerenderr   r6   namejoinargsr   rK   r   r8   )r!   r&   r-   r9   detag	tag_valuer$   r$   r%   _decorate_spanH   sF   

 zSpanDecoration._decorate_spanc                 C      |  | d S r   rk   rB   r$   r$   r%   r:   i      zSpanDecoration.enterr;   r<   r=   c                 C   s   |  | d S r   rm   r?   r$   r$   r%   r@   l   rn   zSpanDecoration.exitc                 C   rl   r   rm   rB   r$   r$   r%   rC   o   rn   zSpanDecoration.linec                 C   s   | j r
d| jj S d S )Nz&Condition evaluation errors for probe )r_   r-   r8   r    r$   r$   r%   rQ   r   s   zSpanDecoration.messagec                 C   s
   t | jS r   )boolr_   r    r$   r$   r%   has_messagev   s   
zSpanDecoration.has_message)rD   rE   rF   rG   r+   rJ   rK   rL   rk   r:   r   rM   r@   rC   propertyrH   rQ   ro   rp   r$   r$   r$   r%   rO   D   s    !,rO   r-   framethreadtrace_contextmeterr   c                 C   s   t | |||dS )N)r-   rr   rs   rt   )r   r-   rr   rs   rt   ru   r$   r$   r%   _z   s   rw   c                 C      t | ||dS N)r-   rr   rs   rO   rv   r$   r$   r%   rw         c                 C   rx   ry   rz   rv   r$   r$   r%   rw      r{   )/dataclassesr   r   typesr   typingr+   r.   ddtrace.constantsr   ddtrace.debugging._expressionsr   ddtrace.debugging._probe.modelr   r   r	   r
   r   r   ddtrace.debugging._signal.logr   ddtrace.debugging._signal.modelr   r   r   ddtrace.debugging._signal.utilsr   ddtrace.internal.compatr   ddtrace.internal.loggerr   ddtrace.internal.metricsr   ddtrace.internal.safetyr   ddtrace.tracer   rD   rZ   r1   r7   r   rO   registerrL   Meterrw   r$   r$   r$   r%   <module>   s    "5