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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rd dlm)Z* d dlm(Z+ d dl,m-Z. d dl/mZ0 e!e1Z2zd dl3m4Z W n e5y   e26d d dlmZ Y nw e7dd e
j89ddd D Z:d*d$d%Z;G d&d' d'eZG d(d) d)eZdS )+    )Iterator)Mapping)Sequence)contextmanager)TYPE_CHECKING)Optional)version)Context)SpanKindTracer)TracerProvider)use_span)get_current_span)DEFAULT_TRACE_OPTIONS)INVALID_SPAN)ActiveTrace)SPAN_API_OTEL)
get_logger)_TraceContext)tracer   )Span)Link)AttributeValue)_agnosticcontextmanagerzopentelemetry.util._decorator not found, using contextlib.contextmanager instead. Using @tracer.start_as_current_span decorator in generators and async functions will result in inaccurate durations. For async support upgrade to opentelemetry-api>=1.24.c                 c   s    | ]}t |V  qd S N)int).0x r    X/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/opentelemetry/trace.py	<genexpr>1   s    r"   .N   	otel_spanOtelSpanreturn	DDContextc                 C   s8   |   \}}}}}}|tu rd }| }t||||S r   )get_span_contextr   	to_headerr   _get_context)r%   trace_idspan_id_tftstrace_stater    r    r!   _otel_to_dd_span_context4   s
   r2   c                   @   sv   e Zd ZdZedkr%			ddedee dee dee def
d	d
Z	dS 		ddedee dee defdd
Z	dS )r   z
    Entry point of the OpenTelemetry API and provides access to OpenTelemetry compatible Tracers.
    One TracerProvider should be initialized and set per application.
    )r      Ninstrumenting_module_nameinstrumenting_library_version
schema_url
attributesr'   c                 C      t  S z+Returns an opentelemetry compatible Tracer.r   )selfr4   r5   r6   r7   r    r    r!   
get_tracerH   s   zTracerProvider.get_tracerc                 C   r8   r9   r   )r:   r4   r5   r6   r    r    r!   r;   T   s   )NNN)NN)
__name__
__module____qualname____doc__OTEL_VERSIONstrr   dict
OtelTracerr;   r    r    r    r!   r   >   s8    r   c                   @   s   e Zd ZdZdejdddddfdedee dedee	edf  d	ee
d
  dee dededdfddZedejddddddfdedee dedee	edf  d	ee
d
  dee dedededed fddZdS )r   zWStarts and/or activates OpenTelemetry compatible Spans using the global Datadog Tracer.NTnamecontextkindr7   OtelAttributeValuelinksOtelLink
start_timerecord_exceptionset_status_on_exceptionr'   r&   c	                 C   s   t |}	|	tu rd}
nt|	tr|	j}
nt|	}
tj||
dtd}|r<|D ]}|	|j
j|j
j|j
j |j
j|j q%t||||||dS )z)Creates and starts an opentelemetry span.NF)child_ofactivatespan_api)rF   r7   rJ   rK   rL   )r   r   
isinstancer   _ddspanr2   ddtracer_start_spanr   set_linkrE   r,   r-   r1   r*   trace_flagsr7   )r:   rD   rE   rF   r7   rH   rJ   rK   rL   curr_otel_span	dd_activedd_spanlinkr    r    r!   
start_spana   s0   

zTracer.start_spanend_on_exitc
              
   c   sX    | j ||||||||d}
t|
|	||d}
|
V  W d   dS 1 s%w   Y  dS )zEContext manager for creating and activating a new opentelemetry span.)rE   rF   r7   rH   rJ   rK   rL   )r[   rK   rL   N)rZ   r   )r:   rD   rE   rF   r7   rH   rJ   rK   rL   r[   spanr    r    r!   start_as_current_span   s(   "zTracer.start_as_current_span)r<   r=   r>   r?   OtelSpanKindINTERNALrA   r   OtelContextr   r   r   boolrZ   r   r   r]   r    r    r    r!   r   ^   st    
	

.
	
r   )r%   r&   r'   r(   )<collections.abcr   r   r   
contextlibr   typingr   r   opentelemetryr   opentelemetry.contextr	   r`   opentelemetry.tracer
   r^   r   rC   r   OtelTracerProviderr   opentelemetry.trace.propagationr   opentelemetry.trace.spanr   r   ddtrace._trace.providerr   DDActiveTraceddtrace.internal.constantsr   ddtrace.internal.loggerr   ddtrace.propagation.httpr   ddtrace.tracer   rR   r\   r   r   rI   r&   opentelemetry.util.typesr   rG   ddtrace.contextr(   r<   logopentelemetry.util._decoratorr   ImportErrorwarningtuple__version__splitr@   r2   r    r    r    r!   <module>   sN    "	

 