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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& e e'Z(de	dej)e	 fddZ*eG dd deZ+eG dd dZ,G dd  d e&Z-G d!d" d"Z.dS )#    )	dataclass)Path)current_thread)monotonic_ns)	FrameType)FunctionType)
MethodTypeN)DEFAULT_CAPTURE_LIMITS)LiteralTemplateSegment)LogFunctionProbe)ProbeEvalTiming)Session)Snapshot)SignalUploader)UploaderProduct)NO_EXCEPTION)ExcInfoType)
get_logger)_isinstance)Lock)LazyWrappingContextframereturnc                 c   s*    | }|d ur|V  |j }|d usd S d S )N)f_back)r   _frame r   R/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/debugging/_origin/span.pyframe_stack   s   r   c                	   @   s.   e Zd ZdZededededd fddZdS )	EntrySpanProbeentrynamemodulefunctionr   c                 C   sT   | j  d| d| d| }| tt di ||tj|t|gdg td dtddS )	Nz span info for z, in z, in function r   Tg        inf)probe_idversiontagsr!   
func_qnameevaluate_attemplatesegmentstake_snapshotcapture_expressionslimits	conditioncondition_error_raterate)	__span_class__struuiduuid4r   ENTRYr
   r	   float)clsr    r!   r"   messager   r   r   build*   s"   
zEntrySpanProbe.buildN)__name__
__module____qualname__r1   classmethodr2   r9   r   r   r   r   r   &   s     r   c                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )EntrySpanLocationr    linefiler!   probeN)r:   r;   r<   r2   __annotations__intr   r   r   r   r   r>   @   s   
 r>   c                       s   e Zd ZdZdZdZdee deddf fdd	Z	d fd
dZ
defdejdeddfddZdejdejf fddZdejee  deje dejej ddf fddZ  ZS )EntrySpanWrappingContextzEntry span wrapping context.

    This context is lazy to avoid paid any upfront instrumentation costs for
    large functions that might not get invoked. Instead, the actual wrapping
    will be performed on the first invocation.
    F   uploaderfr   Nc                    sb   t  | || _tt|jj }|j}|j	}t
||jj||tttj|||dd| _d S )N)r    r!   r"   )r    r?   r@   r!   rA   )super__init__rF   r2   r   __code__co_filenameresolver<   r;   r>   co_firstlinenotcastr   r9   location)selfrF   rG   filenamer    r!   	__class__r   r   rI   T   s   z!EntrySpanWrappingContext.__init__c                    s   t    | jrXtj }tj }| j}|d u s$|d u s$|dd ur&| S ||fD ]&}|	dd |	d|j
 |	dt|j |	d|j |	d|j q*| dt  | S )	Nz_dd.entry_location.filez_dd.code_origin.typer   z_dd.code_origin.frames.0.filez_dd.code_origin.frames.0.linez_dd.code_origin.frames.0.typez_dd.code_origin.frames.0.method
start_time)rH   	__enter____enabled__ddtracetracercurrent_root_spancurrent_spanrP   get_tag_set_tag_strr@   r2   r?   r!   r    setr   )rQ   rootspanrP   srS   r   r   rV   d   s   


z"EntrySpanWrappingContext.__enter__retvalexc_infoc                 C   s   | j sd S tj }tj }|d u s|d u rd S tdd t|jp$|jD rsz| 	d}W n
 t
y:   Y d S w t| jj| jt |d}|  |d|j |d|j |||t |  | j  }d uru|| d S d S d S )Nc                 s   s    | ]}|j d kV  qdS )   N)level).0ra   r   r   r   	<genexpr>   s    z9EntrySpanWrappingContext._close_signal.<locals>.<genexpr>rU   )rA   r   threadtrace_contextz$_dd.code_origin.frames.0.snapshot_id)rW   rX   rY   rZ   r[   anyr   
from_tracecontextgetKeyErrorr   rP   rA   	__frame__r   do_enterr]   r3   do_exitr   rF   get_collectorpush)rQ   rb   rc   r_   r`   rU   snapshot	collectorr   r   r   _close_signal{   s4   

 z&EntrySpanWrappingContext._close_signalc                    s   | j |d t |S )N)rb   )rv   rH   
__return__)rQ   rb   rS   r   r   rw      s   z#EntrySpanWrappingContext.__return__exc_type	exc_value	tracebackc                    s.   | j tt|||fd t ||| d S )N)rc   )rv   rN   rO   r   rH   __exit__)rQ   rx   ry   rz   rS   r   r   r{      s   z!EntrySpanWrappingContext.__exit__)r   rD   )r:   r;   r<   __doc__rW   __priority__typer   r   rI   rV   r   rN   Anyr   rv   rw   OptionalBaseExceptionr{   __classcell__r   r   rS   r   rD   I   s"    &
rD   c                   @   sv   e Zd ZU eZeZdZej	d  e
d< g Zee
d< e Zedejeef ddfddZeddd	Zedd
dZdS )SpanCodeOriginProcessorEntryN	_instance_pendingrG   r   c                 C   s   t |trtt|j}t|tstd| d S | j	 | j
d u r1| j| 	 W d    d S W d    n1 s;w   Y  tt|}t|s[td| t| j|  d S d S )Nz)Cannot instrument view %r: not a functionz+Lazy wrapping entrypoint %r for code origin)
isinstancer   rN   rO   r   __func__r   logdebug_lockr   r   appendrD   
is_wrapped__uploader__wrap)r7   rG   _fr   r   r   instrument_view   s"   



z,SpanCodeOriginProcessorEntry.instrument_viewc                 C   s|   | j d urd S | j |  | _ | jr| | j  | jsW d    n1 s'w   Y  | jtj d| j	_
td d S )NTz%Code Origin for Spans (entry) enabled)r   r   r   r   popr   registerr   CODE_ORIGIN_SPAN_ENTRY__context_wrapper__rW   r   r   r7   r   r   r   enable   s   
z#SpanCodeOriginProcessorEntry.enablec                 C   s8   | j d u rd S d| j_| jtj d | _ td d S )NFz&Code Origin for Spans (entry) disabled)	r   r   rW   r   
unregisterr   r   r   r   r   r   r   r   disable   s   
z$SpanCodeOriginProcessorEntry.disable)r   N)r:   r;   r<   r   r   rD   r   r   rN   r   rB   r   listr   r   r=   Unionr   r   r   r   r   r   r   r   r   r      s   
 r   )/dataclassesr   pathlibr   	threadingr   timer   typesr   r   r   typingrN   r3   rX   ddtrace.debugging._probe.modelr	   r
   r   r   ddtrace.debugging._sessionr   "ddtrace.debugging._signal.snapshotr   ddtrace.debugging._uploaderr   r   ddtrace.internal.compatr   r   ddtrace.internal.loggerr   ddtrace.internal.safetyr   ddtrace.internal.threadsr   !ddtrace.internal.wrapping.contextr   r:   r   Iteratorr   r   r>   rD   r   r   r   r   r   <module>   s@    f