o
    i                     @   sv  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deeeddedd edeeeddedd dZdZdZdefddZ deeef fddZ!ej"dd Z#ej"dd  Z$ej"d!d" Z%ej"d#d$ Z&ej"d%d& Z'd'd( Z(d)d* Z)dS )+    )config)Pin)	SPAN_KIND)trace_utils)SpanKind)	SpanTypes)core)	COMPONENT)schematize_messaging_operation)schematize_service_name)SpanDirection)_get_config)get_argument_value)asboolrq!DD_RQ_DISTRIBUTED_TRACING_ENABLEDN)distributed_tracing_enabled_default_service	rq_workerz	rq-workerzjob.idz
queue.namezjob.func_namereturnc                  C   s   dd l } tt| ddS )Nr   __version__ )r   strgetattrr    r   U/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/rq/patch.pyget_version'   s   r   c                   C   s   ddiS )Nr   z>=1.8r   r   r   r   r   _supported_versions-   s   r   c                 C   s   t ||dd}|j}|j}|rd|j|jjf nd}	|	r#d|	|f }
n|}
tjdtddt	j
d|t|tj|
tjtjttjjttjt|jt| t|jid6}|j" |jratd||jg ||i |W  d    W  d    S 1 syw   Y  W d    d S 1 sw   Y  d S )	Nr   fz%s.%sr   zrq.queue.enqueue_jobr   provider	direction)	span_namepinserviceresource	span_typeintegration_configtags) r   	func_nameinstance
__module__	__class____name__r   context_with_datar
   r   OUTBOUNDr   int_servicer   r   r   WORKERr   r	   integration_namer   r   PRODUCER
QUEUE_NAMEnameJOB_IDget_idJOB_FUNC_NAMEspanis_asyncdispatchmeta)r   r$   funcr+   argskwargsjobr*   job_instjob_inst_strr&   ctxr   r   r   traced_queue_enqueue_job1   s@   RrE   c              	   C   s   t ||dd}tjdtddtjd|t|tj	t
tj	jt|id*}|j ||i |W  d    W  d    S 1 s?w   Y  W d    d S 1 sOw   Y  d S )Nr   job_idzrq.traced_queue_fetch_jobzrq.queue.fetch_jobr   r    )r#   r$   r%   r)   )r   r   r/   r
   r   
PROCESSINGr   r1   r   r   r	   r3   r7   r:   )r   r$   r>   r+   r?   r@   rF   rD   r   r   r   traced_queue_fetch_jobY   s    	RrH   c           
      C   s^  t ||dd}ztjddt|tj|tj|j	tj|j
dttjjttjt| id
`}|jM z4||i |W | p=d|jd}|j}	td||	|g W  d   W  d   W td	|g S | pjd|jd}|j}	td||	|g w 1 sw   Y  W d   n1 sw   Y  W td	|g dS W td	|g dS td	|g w )
zTrace rq.Worker.perform_jobr   rA   zrq.worker.perform_jobT)	r#   r%   r$   r'   r&   r(   distributed_headersactivate_distributed_headersr)   None)z
job.statusz
job.originNzrq.worker.after.perform.job)r   r   r/   r   r1   r   r   r   r2   r*   r=   r	   r   r3   r   r   CONSUMERr7   r8   r:   
get_statusorigin	is_failedr<   )
r   r$   r>   r+   r?   r@   rA   rD   	span_tags
job_failedr   r   r   traced_perform_jobk   s@   0"rR   c              
   C   s   |}t jdd|j|ttjjt| id*}|j	 ||i |W  d   W  d   S 1 s2w   Y  W d   dS 1 sBw   Y  dS )zTrace rq.Job.perform(...)zrq.job.perform)r#   r&   r$   r)   N)
r   r/   r*   r	   r   r   r3   r7   r8   r:   )r   r$   r>   r+   r?   r@   rA   rD   r   r   r   traced_job_perform   s   
RrS   c              	   C   s   t ||dd}tjdtddtjdt|tj	|t
tjjt|id*}|j ||i |W  d   W  d   S 1 s?w   Y  W d   dS 1 sOw   Y  dS )zTrace rq.Job.fetch_many(...)r   job_idszrq.job.fetch_manyr   r    )r#   r%   r$   r)   N)r   r   r/   r
   r   rG   r   ext_servicer   r   r	   r   r3   r7   r:   )r   r$   r>   r+   r?   r@   rT   rD   r   r   r   traced_job_fetch_many   s    	RrV   c                  C   s   dd l } t| ddrd S t |  t | jj t| jdt| jj t | j	j
 tddt|  tddt|  t | jj t| jdt|  d	| _d S )
Nr   _datadog_patchFzJob.performzrq.queuezQueue.enqueue_jobzQueue.fetch_jobzWorker.perform_jobT)r   r   r   ontorA   Jobr   wraprS   queueQueuerE   rH   workerWorkerrR   rW   r   r   r   r   patch   s   
r_   c                  C   s   dd l } t| ddsd S t |  t | jj t| jjd t | jj	 t| jj	d t| jj	d t | j
j t| j
jd d| _d S )Nr   rW   Fperformenqueue_job	fetch_jobperform_job)r   r   r   remove_fromrA   rY   r   unwrapr[   r\   r]   r^   rW   r   r   r   r   unpatch   s   
rf   )*ddtracer   ddtrace._trace.pinr   ddtrace.constantsr   ddtrace.contribr   ddtrace.extr   r   ddtrace.internalr   ddtrace.internal.constantsr	   ddtrace.internal.schemar
   r   -ddtrace.internal.schema.span_attribute_schemar   !ddtrace.internal.settings._configr   ddtrace.internal.utilsr   ddtrace.internal.utils.formatsr   _adddictr7   r5   r9   r   r   r   with_traced_modulerE   rH   rR   rS   rV   r_   rf   r   r   r   r   <module>   sZ    	
'

#

