
    \jaX                        d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlmZm Z m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ e+r?d dl*m,Z, d dl*m-Z- d dl*m.Z. d dl*m/Z/ d dl*m0Z0 d dl*m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6  e0de-de,f         Z7	 d dl8m9Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZBmCZC d dlDmEZE eBe@eAfZG G d! d"e      ZHd#eId$dfd%ZJd9d&ZK	 d:	 	 	 	 	 	 	 	 	 	 	 d;d'ZLd(d)d*d+d,eMd$d)fd-ZN G d. d/      ZOd<d0ZPd=d1ZQ	 	 	 	 	 	 d>d2ZRd=d3ZSd?d4ZTd?d5ZUd?d6ZVd?d7ZWd?d8ZXy# eF$ r	  ed       w xY w)@    N)Mappingwraps)isolation_scope)continue_trace)OP
SPANSTATUSSPANDATA)_check_minimum_versionIntegrationDidNotEnable)_patch_beat_apply_entry_patch_redbeat_apply_async_setup_celery_beat_signals)_now_seconds_since_epoch)ignore_logger)should_send_default_pii)StreamedSpan_get_current_streamed_span)BAGGAGE_HEADER_NAMESpanTransactionSource)Baggagehas_span_streaming_enabled)SENSITIVE_DATA_SUBSTITUTEcapture_internal_exceptionsevent_from_exceptionreraise)TYPE_CHECKING)Any)Callable)List)Optional)TypeVar)Union)EventProcessorEventHintExcInfoF.)bound)VERSION)Task)task_has_custom)IgnoreRejectRetrySoftTimeLimitExceeded)ProducerzCelery not installedc            	       L    e Zd ZdZde Z	 	 	 ddededdddfd	Zedd
       Zy)CeleryIntegrationceleryzauto.queue.Npropagate_tracesmonitor_beat_tasksexclude_beat_taskszOptional[List[str]]returnc                 l    || _         || _        || _        t                t	                t        |       y N)r7   r8   r9   r   r   r   )selfr7   r8   r9   s       Q/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/celery/__init__.py__init__zCeleryIntegration.__init__A   s1     !1"4"4!"$"#56    c                      t        t        t               t                t	                t                t                t                t        d       t        d       t        d       y )Nzcelery.worker.jobzcelery.app.tracezcelery.redirected)	r   r5   CELERY_VERSION_patch_build_tracer_patch_task_apply_async_patch_celery_send_task_patch_worker_exit_patch_producer_publishr    r@   r>   
setup_oncezCeleryIntegration.setup_onceO   sJ    0.A!!!
 	)*() 	)*r@   )TFNr:   N)	__name__
__module____qualname__
identifieroriginboolr?   staticmethodrI   rH   r@   r>   r5   r5   =   s]    J:,'F "&#(48	77 !7 2	7
 
7 + +r@   r5   statusr:   c                 \   t        j                         }t        |j                        }t	               5  t        j
                         }|r%|j                  | dk(  rdnd|j                  _        n)|s'|j                  |j                  j                  |        d d d        y # 1 sw Y   y xY w)Nokerror)

sentry_sdk
get_clientr   optionsr   get_current_scopestreamed_spanrR   span
set_status)rR   clientspan_streamingscopes       r>   _set_statusr`   d   s    ""$F/?N	$	& *,,.e11=174WE&EJJ$:JJ!!&)* * *s   A%B""B+c                 b   t        j                         }|j                  t              y t	        |d   t
              rt        d       y t        d       t        | d      rt	        |d   | j                        ry t        ||j                  ddd      \  }}t        j                  ||	       y )
N   abortedinternal_errorthrowsr6   F)typehandled)client_options	mechanism)hint)rV   rW   get_integrationr5   
isinstanceCELERY_CONTROL_FLOW_EXCEPTIONSr`   hasattrre   r   rX   capture_event)taskexc_infor]   eventrj   s        r>   _capture_exceptionrs   q   s    ""$F/08(1+=>I !tX:hqk4;;#G&~~#6KE4 U.r@   c                       d fd}|S )Nc                    t               5  | j                  di       }|d<   | j                  di       }j                  t               rnt        t               rnt        d|d<   d d d        d|v r>t               5  t        |d   d   t              rdd	t        d
      g| d<   d d d        | S | S # 1 sw Y   MxY w# 1 sw Y   | S xY w)Ntagscelery_task_idextra)	task_nameargskwargsz
celery-jobrq   r   r6   r2   namefingerprint)r   
setdefaultr|   r   r   
issubclassr2   getattr)rr   rj   rv   rx   rz   r{   rp   uuids       r>   event_processorz._make_event_processor.<locals>.event_processor   s    (* 	##FB/D%)D!"$$Wb1E!YY35D;T 67F=V#E,		 ,. d:.q13HI /fd3,E-( u/	 	 s   AB5?*C5B>C)rr   r'   rj   r(   r:   zOptional[Event]rH   )rp   r   rz   r{   requestr   s   ````  r>   _make_event_processorr      s     4 r@   original_headerszdict[str, Any]r[   z#Optional[Union[StreamedSpan, Span]]r8   c                 H   | j                         }t               5  t        t        j                         j                  |            }|r|j                  ddt               z  i       |j                  dt               i       |r|j                  t              }|j                  t              }|xs |}|r|rt        j                  |      }t        j                  |      }	|	j                  j                  |j                         dj                  |	j                  |j                  fD 
cg c]  }
|
|
dk7  r|
 c}
      |	_        |	j                  d	      }|j                  |       |r	||t        <   |j!                  d
i       j                  |       |r||d
   t        <   |j#                         D ]  \  }}|j%                  d      s||d
   |<   ! | j#                         D ]  \  }}|d
k7  s||d
   vs||d
   |<    ddd       |S c c}
w # 1 sw Y   |S xY w)z
    Updates the headers of the Celery task with the tracing information
    and eventually Sentry Crons monitoring information for beat tasks.
    )r[   z sentry-monitor-start-timestamp-sz%.9fsentry-task-enqueued-time,N T)include_third_partyheaderszsentry-)copyr   dictrV   get_isolation_scopeiter_trace_propagation_headersupdater   getr   r   from_incoming_headersentry_itemsjointhird_party_items	serializer~   items
startswith)r   r[   r8   updated_headersr   existing_baggagesentry_baggagecombined_baggageincomingcombinedxkeyvalues                r>   _update_celery_task_headersr      sI    '++-O	$	& D< **,KKQUKV
 NN6.091 	(*B*DE	
 .223FG$[[)<=N-A1A"2 #778HI"77G%%,,X-B-BC-0XX %66$66" =Q"W 	.* $,#5#5$#5#O ""7+7G 34 &&y"5<<WEBR	*+>? .335 <
U>>),6;OI.s3< /446 <
U)#?93M(M6;OI.s3<ED<L IED<L s1   DH/H
?BH%H6H>
HHH!c                       e Zd ZddZddZy)NoOpMgrNc                      y r<   rH   )r=   s    r>   	__enter__zNoOpMgr.__enter__      r@   c                      y r<   rH   )r=   exc_type	exc_value	tracebacks       r>   __exit__zNoOpMgr.__exit__  r   r@   rJ   )r   r    r   r    r   r    r:   N)rK   rL   rM   r   r   rH   r@   r>   r   r      s    r@   r   c                 0     t               d fd       }|S )Nc                  v   t        j                         }|j                  t              }| | i |S |j	                  d      xs i }|j                  d|j                        }|s | i |S t        | d   t              r| d   j                  }n)t        |       dkD  rt        | d   t              r| d   }nd}t        |j                        }t        j                         j                  dk(  }t!               }	|rM|st#               wt         j$                  j'                  |t(        j*                  t        j,                  d      }	n6|s4t        j&                  t(        j*                  |t        j,                  	      }	|	5 }
t/        ||
|j0                        |d<    | i |cd d d        S # 1 sw Y   y xY w)
Nr   zsentry-propagate-tracesr   rb   <unknown Celery task>zcelery-beat	sentry.opsentry.originr|   
attributesopr|   rO   )rV   rW   rk   r5   r   popr7   rl   r-   r|   lenstrr   rX   r   _namer   r   traces
start_spanr   QUEUE_SUBMIT_CELERYrO   r   r8   )rz   r{   r]   integrationkwarg_headersr7   ry   r^   task_started_from_beatspan_mgrr[   fs              r>   apply_asyncz#_wrap_task_run.<locals>.apply_async	  s    &&(,,->?d%f%%

9-3(,,%{'C'C
  d%f%%d1gt$!!W\\IY]z$q'37QI/I3FNNC!+!?!?!A!G!G=!X9@).H.J.V%,,77"%'%;%;):)A)A  8  *%00--",33  	& ;t[%C%C!F9 d%f%		& 	& 	&s   "F//F8rz   r    r{   r    r:   r    r   )r   r   s   ` r>   _wrap_task_runr     s"    
1X2& 2&h r@   c                 4     t              d fd       }|S )Nc            
         t        j                         }|j                  t               
| i |S t	        |j
                        }t               5 }d|_        |j                          |j                  t        g| i |       t        dd      }i }t               5  d|t        | d         | d   di}d d d        t               }t               5  | d   j                  d	      xs i }|rt         j                   j#                  |       |j%                  |       t         j                   j'                  |d t        j(                  t*        j,                  j.                  t0        j2                  d
      }	|	}npt#        |t0        j2                  |t*        j,                  t        j(                        }	|	j5                  t6        j8                         t        j:                  |	|      }d d d        |5   
| i |cd d d        cd d d        S # 1 sw Y   [xY w# 1 sw Y   3xY w# 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY w)Nr6   r|   r   
celery_jobrb      )rp   rz   r{      r   )r   zsentry.span.sourcer   )r|   parent_spanr   )r   r|   sourcerO   )custom_sampling_context)rV   rW   rk   r5   r   rX   r   r   clear_breadcrumbsadd_event_processorr   r   r   listr   r   r   r   set_custom_sampling_contextr   rO   r   TASKr   r   QUEUE_TASK_CELERYr\   r	   OKstart_transaction)rz   r{   r]   r^   r_   ry   r   span_ctxr   r[   r   rp   s             r>   _innerz_wrap_tracer.<locals>._innerH  s,   &&(!!"34<d%f%%3FNNC 9	*%"EK##%%%&;D&R4&R6&RSf.EFI&(#,. 	  ) !%T!W"&q'#+'	 >EYH -. q'++i06B!%%44W=556MN%,,77&$(->-E-E2C2H2H2N2N)+)=)=$ 8 D  $H *//&055077D OOJMM2);;0G H7@  *$)&)* *q9	* 9	*	 	  @* * *q9	* 9	* 9	*sV   AI!H9IDH-
I7H+?	IH	IH(	$I+H4	0II
r   r   rp   r   r   s   `` r>   _wrap_tracerr   A  s%     1X@* @*D Mr@   c                 b   t               5  | j                  j                  }|rx|j                  d      }|j                  d      dk(  rS|Qt	        |t
              r!|j                  t        j                  |       n |j                  t        j                  |       ddd       y# 1 sw Y   yxY w)z-Set "messaging.destination.name" tag for spanrouting_keyexchanger   N)
r   r   delivery_infor   rl   r   set_attributer
   MESSAGING_DESTINATION_NAMEset_data)rp   r[   r   r   s       r>   _set_messaging_destination_namer     s     
%	& 
T22'++M:K  ,2{7N dL1&&x'J'JKXMM("E"E{S
T 
T 
Ts   BB%%B.c                 4     t              d fd       }|S )Nc                  V   t        j                         }|j                  t               	| i |S t	        |j
                        }	 |rKt         j                  j                  
j                  t        j                  t        j                  d      }n>t        j                  t        j                  
j                  t        j                        }|5  t        |t              r|j                  }n|j                  }t!        
|       d }t#               5  
j$                  j&                  Hd
j$                  j&                  v r0t)               
j$                  j&                  j+                  d      z
  }d d d        ||dz  } |t,        j.                  |       t#               5   |t,        j0                  
j$                  j2                         d d d        t#               5   |t,        j4                  
j$                  j6                         d d d        t#               5  
j8                  j;                         5 } |t,        j<                  |j>                  j@                         d d d        d d d         	| i |cd d d        S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   GxY w# 1 sw Y   KxY w# 1 sw Y   y xY w# tB        $ rK tE        jF                         }t#               5  tI        
|       d d d        n# 1 sw Y   nxY wtK        |  Y y w xY w)Nr   r   r   r   i  )&rV   rW   rk   r5   r   rX   r   r   r|   r   QUEUE_PROCESSrO   rl   r   r   r   r   r   r   r   r   r   r
   !MESSAGING_MESSAGE_RECEIVE_LATENCYMESSAGING_MESSAGE_IDidMESSAGING_MESSAGE_RETRY_COUNTretriesapp
connectionMESSAGING_SYSTEM	transportdriver_type	Exceptionsysrq   rs   r   )rz   r{   r]   r^   r[   set_on_spanlatencyconnrq   r   rp   s            r>   r   z_wrap_task_call.<locals>._inner  s   &&(!!"34<d%f%%3FNNC;	!((33%'%5%5):)A)A  4  ",,'',33  %*dL1"&"4"4K"&--K/d;02 ,,874<<;O;OO":"<t||?S?S?W?W7@ # &tOG J JGT02 P = =t||OP 12  >>@T@T
 12 ,,. $#$55 NN66 $)&)K%* %* P P   =%* %*L  	||~H,. 3"423 3 3X		s   	BK AKAJ70K',JK%,J$K#J<>,J0*J<2K	K J	KJ!	K$J-	)K0J95J<<K	KKK K 'L(;L	L(L	L('L(r   r   r   s   `` r>   _wrap_task_callr     s%     1XB BH Mr@   c                  ^    dd l mc m}  | j                  	 	 	 	 	 	 	 	 	 	 dfd}|| _        y )Nr   c                    t        |dd      s\t        |d      r.t        |t        |      j                        t        |      _        nt        ||j
                        |_        d|_        t        | | |g|i |      S )N_sentry_is_patchedF__call__T)r   r.   r   rf   r   runr   r   )r|   rp   rz   r{   original_build_tracers       r>   sentry_build_tracerz0_patch_build_tracer.<locals>.sentry_build_tracer  sv     t159 tZ0&5dDJ<O<O&PT
#*4:
 '+D#D"7d"TT"TV"TUUr@   )
r|   r    rp   r    rz   r    r{   r    r:   r    )celery.app.tracer   tracebuild_tracer)r   r   r   s     @r>   rC   rC     sR    $$!..VV V).V:?V	V$ -Er@   c                  H    t        t        j                        t        _        y r<   )r   r-   r   rH   r@   r>   rD   rD     s    %d&6&67Dr@   c                  D    ddl m}  t        | j                        | _        y )Nr   Celery)r6   r  r   	send_taskr  s    r>   rE   rE   	  s    %f&6&67Fr@   c                  D    ddl m}  | j                  dfd}|| _        y )Nr   )Workerc                     	  | i |t               5  t        j                         j                  t              	 t        j
                          d d d        S # 1 sw Y   S xY w# t               5  t        j                         j                  t              	 t        j
                          d d d        w # 1 sw Y   w xY wxY wr<   )r   rV   rW   rk   r5   flush)rz   r{   original_workloops     r>   sentry_workloopz+_patch_worker_exit.<locals>.sentry_workloop  s    	'$d5f5,. '))+;;<MN  $$&' ' ',. '))+;;<MN  $$&' ' 's.   A& =AA#	&C1=B7.	C7C <Cr   )billiard.poolr  workloop)r  r	  r  s     @r>   rF   rF     s      %	' &FOr@   c                  H    t         j                  dfd} | t         _        y )Nc                    t        j                         }|j                  t               | g|i |S t	        |j
                        }|j                  di       }t        |t              si }|j                  d      xs d}|j                  d      }|j                  d      }|j                  d      }	|j                  d      }
d }|rKt               ut         j                  j                  |t        j                  t        j                  d	      }n4t        j                  t        j                  |t        j                  
      }| | g|i |S |5  t        |t              r|j                   }n|j"                  }| |t$        j&                  |       |
dk(  r|	 |t$        j(                  |	       | |t$        j*                  |       t-               5   |t$        j.                  | j0                  j2                  j4                         d d d         | g|i |cd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rp   r   r   r   r   r   r   r   r   r   )rV   rW   rk   r5   r   rX   r   rl   r   r   r   r   r   QUEUE_PUBLISHrO   r   r   r   r
   r   r   r   r   r   r   r   r   )r=   rz   r{   r]   r^   kwargs_headersry   task_idr   r   r   r[   r   original_publishs                r>   sentry_publishz/_patch_producer_publish.<locals>.sentry_publish'  s   &&(!!"34<#D:4:6::3FNNCIr2.'2  N"&&v.I2I	 $$T* $$Y/jj/::j)26)+7!((33"%'%5%5):)A)A  4  ((##(//D <#D:4:6:: 	;$-"00"mm"H997C2~+"9 H??M"HBBGL,. --t/H/H/T/T
 $D:4:6:-	; 	;" #	; 	;s%   BH? 6H3H?3H<	8H??I)r=   r3   rz   r    r{   r    r:   r    )r3   publish)r  r  s    @r>   rG   rG   $  s     ''A;F &Hr@   )rp   r    rq   r)   r:   Nr<   )rp   r    r   r    rz   r    r{   r    r   zOptional[Any]r:   r&   )r   r*   r:   r*   )rp   r    r   r*   r:   r*   )rp   r    r[   zUnion[StreamedSpan, Span]r:   NrJ   )Yr   collections.abcr   	functoolsr   rV   r   sentry_sdk.apir   sentry_sdk.constsr   r	   r
   sentry_sdk.integrationsr   r   r   #sentry_sdk.integrations.celery.beatr   r   r   $sentry_sdk.integrations.celery.utilsr   sentry_sdk.integrations.loggingr   sentry_sdk.scoper   sentry_sdk.tracesr   r   sentry_sdk.tracingr   r   r   sentry_sdk.tracing_utilsr   r   sentry_sdk.utilsr   r   r   r   typingr   r    r!   r"   r#   r$   r%   sentry_sdk._typesr&   r'   r(   r)   r*   r6   r,   rB   celery.app.taskr-   r   r.   celery.exceptionsr/   r0   r1   r2   kombur3   ImportErrorrm   r5   r   r`   rs   r   rP   r   r   r   r   r   r   rC   rD   rE   rF   rG   rH   r@   r>   <module>r'     s   
 #   & ) 6 6 U U 
 J 9 4 F K K H  !FF8CH-.A/0$0  
 #(!8 $+ $+N
* 
* 
*/:  $!
!
! ! 	!
 ! !HP&P
/P P 	Pf 6rJZT
T2T	T"IX-488&*F&]  /
-
../s   ?$E E