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  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( e$e)Z*e&Z+dd Z,dd Z-dd Z.d ed!e/fd"d#Z0d$d% Z1d&d' Z2d(d) Z3d*S )+    )urlparse)current_app)registry)config)Context)Pin)_SPAN_MEASURED_KEY)	SPAN_KIND)trace_utils)	constants)attach_span)attach_span_context)detach_span)retrieve_span)retrieve_span_context)retrieve_task_id)set_tags_from_context)SpanKind)	SpanTypes)net)core)	COMPONENT)
get_logger)HTTPPropagator)tracerc                  O   s  | d}| d}td| |d u s|d u rtd d S t|p)t|j}|d u r6td| d S |j di }|pCt||}tj	t
tj|d tjd }t
jtj||jtjd	}|ttj |ttjj |td
 t||| tjd rt||| d S d S )Nsendertask_idzprerun signal start task_id=%sXunable to extract the Task and the task_id. This version of Celery may not be supported.z+no pin found on task or task.app task_id=%sheaders
int_configrequest_headersworker_service_name)serviceresource	span_type   distributed_tracing)getlogdebugr   get_fromapprequestr   r
   activate_distributed_headersr   r   celerytracecWORKER_ROOT_SPANnamer   WORKER_set_tag_strr	   r   CONSUMERr   integration_name
set_metricr   r   r   )argskwargstaskr   pinr!   r#   span r>   [/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/celery/signals.pytrace_prerun"   s,   




r@   c                  O   s   | d}| d}td| |d u s|d u rtd d S t||}|d u r0td| d S |tjtj t	|| t	||j
j |  t|| d S )Nr   r   zpostrun signal task_id=%sr   z%no existing span found for task_id=%s)r(   r)   r*   r   warningr5   r1   TASK_TAG_KEYTASK_RUNr   r-   __dict__finishr   )r9   r:   r;   r   r=   r>   r>   r?   trace_postrunG   s   




rF   c            	      O   s4  | d}tj |}t|}|d u s|d u r+t }|r"t|| td|| d S t	j
d r@t||dd}tjtt	j
|d t	j
d }tjtj||d}td	| |tt	j
j |ttj |td
 |tjtj |d| t|| | dd urt||d  t|||dd t|j| d S )Nr   z_Task was not found in the local registry. Unable to create producer span. Task name: {}, ID: {}r'   F
is_publishr   producer_service_name)r#   r$   	task_spanr&   z	celery.idr   T) r(   r   tasksr   r   current_trace_context_inject_distributed_headersr)   r*   r   r/   r   r
   r.   r0   r1   PRODUCER_ROOT_SPANr   set_itemr5   r   r7   r	   r   PRODUCERr8   r   rB   TASK_APPLY_ASYNCr   r   context)	r9   r:   	task_namer;   r   activer!   r#   r=   r>   r>   r?   trace_before_publish_   s:   




rU   rR   r:   c                 C   sP   t jd r&i }t| | |di  |d di  |d d | d S d S )Nr'   r   )r   r/   
propagatorinject
setdefaultupdate)rR   r:   trace_headersr>   r>   r?   rM      s   
rM   c            	      O   s   | d}tj |}t|}|d u s|d u rtd d S t||dd}|d u r+d S tjj	}t
|tr8|d }|dkr?|}nt|}d }|jrK|j}|jrV|tj|j |r_|tj| |  t||dd d S )Nr   r   TrG   r   z	memory://)r(   r   rK   r   r)   r*   r   r   conf
broker_url
isinstancelistr   hostnameportr8   r   TARGET_PORTr5   TARGET_HOSTrE   r   )	r9   r:   rS   r;   r   r=   r\   host
parsed_urlr>   r>   r?   trace_after_publish   s0   


re   c                  O   s   | d}| d}|d u s|d u rtd d S t||}|d u r$d S | d}|d u r/d S t|drG|j}t|dr?|j}t||jrGd S |j}t|drR|j}|	|j
||j d S )Nr   r   r   einfothrowsexc)r(   r)   r*   r   hasattr	exceptionrh   r]   rg   set_exc_infotypetb)r9   r:   r;   r   r=   exoriginal_exceptionrh   r>   r>   r?   trace_failure   s*   







rp   c                  O   s|   | d}| d}|d u s|d u rtd d S | d}|s'td d S t||j}|d u r3d S |tjt| d S )Nr   r-   zWunable to extract the Task or the Context. This version of Celery may not be supported.reasonzPunable to extract the retry reason. This version of Celery may not be supported.)	r(   r)   r*   r   idr5   r1   TASK_RETRY_REASON_KEYstr)r9   r:   r;   rR   rq   r=   r>   r>   r?   trace_retry   s   




ru   N)4urllib.parser   r/   r   r   ddtracer   ddtrace._trace.contextr   ddtrace._trace.pinr   ddtrace.constantsr   r	   ddtrace.contribr
   ddtrace.contrib.internal.celeryr   r1   %ddtrace.contrib.internal.celery.utilsr   r   r   r   r   r   r   ddtrace.extr   r   r   ddtrace.internalr   ddtrace.internal.constantsr   ddtrace.internal.loggerr   ddtrace.propagation.httpr   ddtrace.tracer   __name__r)   rV   r@   rF   rU   dictrM   re   rp   ru   r>   r>   r>   r?   <module>   sD    %<)%