
    tni"                         d dl Z d dlmZ d dl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mZ d dlmZ  G d	 d
e          ZddZddZddZddZddZddZ G d d          Z G d de          ZddZdS )    N)Integration)capture_internal_exceptionsensure_integration_enabled)TYPE_CHECKING)Any)Optional)EventHintSparkContextc                   *    e Zd ZdZedd            ZdS )SparkIntegrationsparkreturnNc                  "    t                       d S N)_setup_sentry_tracing     g/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/spark/spark_driver.py
setup_oncezSparkIntegration.setup_once   s    r   r   N)__name__
__module____qualname__
identifierstaticmethodr   r   r   r   r   r      s7        J      \     r   r   r   c                      ddl m}  | j        }|r8|                    d|j                   |                    d|j                   dS dS )z
    Set properties in driver that propagate to worker processes, allowing for workers to have access to those properties.
    This allows worker integration to have access to app_name and application_id.
    r   r   sentry_app_namesentry_application_idN)pysparkr   _active_spark_contextsetLocalPropertyappNameapplicationId)r   spark_contexts     r   _set_app_propertiesr'      s~    
 %$$$$$ 6M 
&&!	
 	
 	
 	&&#'	
 	
 	
 	
 	

 
r   scr   c                     ddl m} | j        } ||           t                      }| j                                                            |           dS )zA
    Start java gateway server to add custom `SparkListener`
    r   )ensure_callback_server_startedN)pyspark.java_gatewayr*   _gatewaySentryListener_jscr(   addSparkListener)r(   r*   gwlisteners       r   _start_sentry_listenerr2   *   s^     DCCCCC	B""2&&&HGJJLL!!(+++++r   c                 T     t          j                    }|j        d fd            }d S )	Neventr	   hintr
   r   Optional[Event]c                    t                      5  t          j                                        t                    | cd d d            S j        | cd d d            S |                     di                               d                                           |                     di                               dj        	                    d                     | d                             dj        	                    d                     | d                             dj        	                    d	                     | d                             d
j        	                    d                     | d                             dj
                   | d                             dj                   | d                             dj                   | d                             dj                   | d                             dj                   |                     di                               dj                   d d d            n# 1 swxY w Y   | S )Nuseridtagszexecutor.idzspark.executor.idzspark-submit.deployModezspark.submit.deployModezdriver.hostzspark.driver.hostzdriver.portzspark.driver.portspark_versionapp_nameapplication_idmaster
spark_homeextraweb_url)r   
sentry_sdk
get_clientget_integrationr   r"   
setdefault	sparkUser_confgetversionr$   r%   r>   	sparkHomeuiWebUrl)r4   r5   r(   s     r   process_eventz+_add_event_processor.<locals>.process_event9   s   (** 	M 	M$&&667GHHP	M 	M 	M 	M 	M 	M 	M 	M '/	M 	M 	M 	M 	M 	M 	M 	M VR((33D",,..IIIVR((33rx||,?@@   &M$$)677   &M$$]BHLLAT4U4UVVV&M$$]BHLLAT4U4UVVV&M$$_bjAAA&M$$Z<<<&M$$%5r7GHHH&M$$Xry999&M$$\2<@@@Wb))44YLLL1	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M4 s   -I
IG.II I)r4   r	   r5   r
   r   r6   )rB   get_isolation_scopeadd_event_processor)r(   scoperL   s   `  r   _add_event_processorrP   6   sG    *,,E
       r   c                 ^    t          |            t                       t          |            d S r   )r2   r'   rP   )r(   s    r   _activate_integrationrR   X   s0    2r   c                      ddl m}  | j        t          t                    	 	 	 	 	 	 	 	 dfd
            }|| _        d S )Nr   r   selfr   argsr   kwargsr   Optional[Any]c                 >     | g|R i |}t          |            |S r   )rR   )rT   rU   rV   rvspark_context_inits       r   "_sentry_patched_spark_context_initzE_patch_spark_context_init.<locals>._sentry_patched_spark_context_initc   s8      6t666v66d###	r   )rT   r   rU   r   rV   r   r   rW   )r!   r   _do_initr   r   )r   r[   rZ   s     @r   _patch_spark_context_initr]   ^   s    $$$$$$%. 02DEE%*6;	     FE ?Lr   c                  h    ddl m}  | j        t          | j                   d S t	                       d S )Nr   r   )r!   r   r"   rR   r]   r   s    r   r   r   n   sE    $$$$$$)5l@AAAr   c                       e Zd Zd6dZd7dZd8d	Zd9dZd:dZd;dZd<dZ	d=dZ
	 	 	 	 d>dZd?dZd@dZdAdZdBdZdCdZdDd!ZdEd#ZdFd%ZdGd'ZdHd)ZdId+ZdJd-ZdKd/ZdLd1ZdMd3Z G d4 d5          ZdS )NSparkListenerapplicationEndr   r   Nc                     d S r   r   )rT   ra   s     r   onApplicationEndzSparkListener.onApplicationEndx       r   applicationStartc                     d S r   r   )rT   re   s     r   onApplicationStartz SparkListener.onApplicationStart{   rd   r   blockManagerAddedc                     d S r   r   )rT   rh   s     r   onBlockManagerAddedz!SparkListener.onBlockManagerAdded~   rd   r   blockManagerRemovedc                     d S r   r   )rT   rk   s     r   onBlockManagerRemovedz#SparkListener.onBlockManagerRemoved   rd   r   blockUpdatedc                     d S r   r   )rT   rn   s     r   onBlockUpdatedzSparkListener.onBlockUpdated   rd   r   environmentUpdatec                     d S r   r   )rT   rq   s     r   onEnvironmentUpdatez!SparkListener.onEnvironmentUpdate   rd   r   executorAddedc                     d S r   r   )rT   rt   s     r   onExecutorAddedzSparkListener.onExecutorAdded   rd   r   executorBlacklistedc                     d S r   r   )rT   rw   s     r   onExecutorBlacklistedz#SparkListener.onExecutorBlacklisted   rd   r   executorBlacklistedForStagec                     d S r   r   )rT   rz   s     r   onExecutorBlacklistedForStagez+SparkListener.onExecutorBlacklistedForStage   s	     	r   executorMetricsUpdatec                     d S r   r   )rT   r}   s     r   onExecutorMetricsUpdatez%SparkListener.onExecutorMetricsUpdate   rd   r   executorRemovedc                     d S r   r   )rT   r   s     r   onExecutorRemovedzSparkListener.onExecutorRemoved   rd   r   jobEndc                     d S r   r   )rT   r   s     r   onJobEndzSparkListener.onJobEnd   rd   r   jobStartc                     d S r   r   )rT   r   s     r   
onJobStartzSparkListener.onJobStart   rd   r   nodeBlacklistedc                     d S r   r   )rT   r   s     r   onNodeBlacklistedzSparkListener.onNodeBlacklisted   rd   r   nodeBlacklistedForStagec                     d S r   r   )rT   r   s     r   onNodeBlacklistedForStagez'SparkListener.onNodeBlacklistedForStage   rd   r   nodeUnblacklistedc                     d S r   r   )rT   r   s     r   onNodeUnblacklistedz!SparkListener.onNodeUnblacklisted   rd   r   r4   c                     d S r   r   )rT   r4   s     r   onOtherEventzSparkListener.onOtherEvent   rd   r   speculativeTaskc                     d S r   r   )rT   r   s     r   onSpeculativeTaskSubmittedz(SparkListener.onSpeculativeTaskSubmitted   rd   r   stageCompletedc                     d S r   r   )rT   r   s     r   onStageCompletedzSparkListener.onStageCompleted   rd   r   stageSubmittedc                     d S r   r   )rT   r   s     r   onStageSubmittedzSparkListener.onStageSubmitted   rd   r   taskEndc                     d S r   r   )rT   r   s     r   	onTaskEndzSparkListener.onTaskEnd   rd   r   taskGettingResultc                     d S r   r   )rT   r   s     r   onTaskGettingResultz!SparkListener.onTaskGettingResult   rd   r   	taskStartc                     d S r   r   )rT   r   s     r   onTaskStartzSparkListener.onTaskStart   rd   r   unpersistRDDc                     d S r   r   )rT   r   s     r   onUnpersistRDDzSparkListener.onUnpersistRDD   rd   r   c                       e Zd ZdgZdS )SparkListener.Javaz1org.apache.spark.scheduler.SparkListenerInterfaceN)r   r   r   
implementsr   r   r   Javar      s        IJ


r   r   )ra   r   r   N)re   r   r   N)rh   r   r   N)rk   r   r   N)rn   r   r   N)rq   r   r   N)rt   r   r   N)rw   r   r   N)rz   r   r   N)r}   r   r   N)r   r   r   Nr   r   r   Nr   r   r   N)r   r   r   N)r   r   r   N)r   r   r   N)r4   r   r   N)r   r   r   Nr   r   r   Nr   r   r   N)r   r   r   N)r   r   r   N)r   r   r   N)r   r   r   N)r   r   r   rc   rg   rj   rm   rp   rs   rv   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r`   w   s8                               %* 
                                                K K K K K K K K K Kr   r`   c            	       J    e Zd Z	 ddededdddfdZdd
ZddZddZddZdS )r-   NlevelmessagedatazOptional[dict[str, Any]]r   c                 X    t          j                                        |||           d S )Nr   r   r   )rB   rM   add_breadcrumb)rT   r   r   r   s       r   _add_breadcrumbzSentryListener._add_breadcrumb   s;     	&((77t 	8 	
 	
 	
 	
 	
r   r   r   c                     t          j                                                     d                    |                                          }|                     d|           t                       d S )NzJob {} Startedinfo)r   r   )rB   rM   clear_breadcrumbsformatjobIdr   r'   )rT   r   r   s      r   r   zSentryListener.onJobStart   se    &((::<<<"))(..*:*:;;67;;;r   r   c                    d}d}d|                                                                 i}|                                                                 dk    r*d}d                    |                                          }n)d}d                    |                                          }|                     |||           d S )	N resultJobSucceededr   zJob {} EndedwarningzJob {} Failedr   )	jobResulttoStringr   r   r   )rT   r   r   r   r   s        r   r   zSentryListener.onJobEnd   s    &**,,55778&&((N::E$++FLLNN;;GGE%,,V\\^^<<G5'EEEEEr   r   c                     |                                 }d                    |                                          }d|                                i}t	          |          }|||d<   |                     d||           t                       d S )NzStage {} Submittedname	attemptIdr   r   )	stageInfor   stageIdr   _get_attempt_idr   r'   )rT   r   
stage_infor   r   
attempt_ids         r   r   zSentryListener.onStageSubmitted   s    #--//
&--j.@.@.B.BCC
))*$Z00
! *D67FFFr   r   c                    ddl m} |                                }d}d}d|                                i}t	          |          }|||d<   	 |                                                                |d<   d                    |                                          }d}n4# |$ r, d	                    |                                          }d
}Y nw xY w| 	                    |||           d S )Nr   )Py4JJavaErrorr   r   r   reasonzStage {} Failedr   zStage {} Completedr   r   )
py4j.protocolr   r   r   r   failureReasonrH   r   r   r   )rT   r   r   r   r   r   r   r   s           r   r   zSentryListener.onStageCompleted   s   //////#--//

))*$Z00
! *D	'5577;;==DN'..z/A/A/C/CDDGEE 	 	 	*11*2D2D2F2FGGGEEE	 	5'EEEEEs   AB .CCr   r   r   r   r   )	r   r   r   strr   r   r   r   r   r   r   r   r-   r-      s        
 ,0	
 

 
 )	

 

 
 
 
   F F F F
 
 
 
F F F F F Fr   r-   r   r   Optional[int]c                     	 |                                  S # t          $ r Y nw xY w	 |                                 S # t          $ r Y nw xY wd S r   )r   	ExceptionattemptNumber)r   s    r   r   r     sw    ##%%%   '')))    4s    
##; 
AAr   )r(   r   r   N)r   r   r   r   )rB   sentry_sdk.integrationsr   sentry_sdk.utilsr   r   typingr   r   r   sentry_sdk._typesr	   r
   r!   r   r   r'   r2   rP   rR   r]   r   r`   r-   r   r   r   r   <module>r      s       / / / / / / T T T T T T T T             %--------$$$$$$         {      
 
 
 
&	, 	, 	, 	,   D   ? ? ? ?        MK MK MK MK MK MK MK MK`AF AF AF AF AF] AF AF AFH     r   