U
    DAf	                  	   @   s   d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ edZd dlZW 5 Q R X G dd de	ZG d	d
 d
e
ZdS )    N)AnyDictIteratorOptional)
LazyImport)SpanTracer)utilszRun 'pip install ddtrace'c                   @   sR   e Zd ZdddddZeeddddZed	d
dZeeef d	ddZ	dS )DatadogSpanzddtrace.SpanN)spanreturnc                 C   s
   || _ d S N_span)selfr    r   </tmp/pip-unpacked-wheel-z752163x/haystack/tracing/datadog.py__init__   s    zDatadogSpan.__init__)keyvaluer   c                 C   s   t |}| j|| dS )z
        Set a single tag on the span.

        :param key: the name of the tag.
        :param value: the value of the tag.
        N)tracing_utilsZcoerce_tag_valuer   set_tag)r   r   r   Zcoerced_valuer   r   r   r      s    
zDatadogSpan.set_tagr   c                 C   s   | j S )z|
        Provides access to the underlying span object of the tracer.

        :return: The underlying span object.
        r   )r   r   r   r   raw_span   s    zDatadogSpan.raw_spanc                 C   sN   |   }|si S td|j@ |j }}||tjjp4dtjjp>dtjjpHddS )z3Return a dictionary with correlation data for logs.l     )zdd.trace_idz
dd.span_idz
dd.servicezdd.envz
dd.version)	r   strtrace_idspan_idddtraceconfigZserviceenvversion)r   r   r   r   r   r   r   get_correlation_data_for_logs&   s    


z)DatadogSpan.get_correlation_data_for_logs)
__name__
__module____qualname__r   r   r   r   r   r   r"   r   r   r   r   r
      s   
r
   c                   @   sX   e Zd ZdddddZejdeeeee	f  e
e dddZee d	d
dZdS )DatadogTracerzddtrace.TracerN)tracerr   c                 C   s   t   || _d S r   )ddtrace_importcheck_tracer)r   r'   r   r   r   r   9   s    zDatadogTracer.__init__)operation_nametagsr   c              	   c   s8   | j |"}t|}|r$|| |V  W 5 Q R X dS )zJActivate and return a new span that inherits from the current active span.N)r*   tracer
   Zset_tags)r   r+   r,   r   r   r   r   r-   =   s
    
zDatadogTracer.tracer   c                 C   s   | j  }|dkrdS t|S )zReturn the current active spanN)r*   current_spanr
   )r   r.   r   r   r   r.   G   s    
zDatadogTracer.current_span)N)r#   r$   r%   r   
contextlibcontextmanagerr   r   r   r   r   r   r-   r.   r   r   r   r   r&   8   s   &	r&   )r/   typingr   r   r   r   Zhaystack.lazy_importsr   Zhaystack.tracingr   r   r	   r   r(   r   r
   r&   r   r   r   r   <module>   s   
(