Ë
    çÞËj”   ã                   ó²   — 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  G d„ d	e«      Zd
„ Zd„ Zd„ Z G d„ d«      Z G d„ de«      Zy)é    N)ÚIntegration)Úcapture_internal_exceptionsÚensure_integration_enabled)ÚTYPE_CHECKING)ÚAny)ÚOptional)ÚEventÚHintc                   ó    — e Zd ZdZed„ «       Zy)ÚSparkIntegrationÚsparkc                  ó   — t        «        y ©N)Úpatch_spark_context_init© ó    úg/var/www/photos/backend/venv/lib/python3.12/site-packages/sentry_sdk/integrations/spark/spark_driver.pyÚ
setup_oncezSparkIntegration.setup_once   s
   € ô 	!Õ"r   N)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚstaticmethodr   r   r   r   r   r      s   „ Ø€Jàñ#ó ñ#r   r   c                  óž   — ddl m}  | j                  }|r9|j                  d|j                  «       |j                  d|j
                  «       yy)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   ©ÚSparkContextÚsentry_app_nameÚsentry_application_idN)Úpysparkr   Ú_active_spark_contextÚsetLocalPropertyÚappNameÚapplicationId)r   Úspark_contexts     r   Ú_set_app_propertiesr%      sJ   € õ %à ×6Ñ6€MÙØ×&Ñ&Ð'8¸-×:OÑ:OÔPØ×&Ñ&Ø# ]×%@Ñ%@õ	
ð r   c                 óž   — ddl m} | j                  } ||«       t        «       }| j                  j                  «       j                  |«       y)zA
    Start java gateway server to add custom `SparkListener`
    r   )Úensure_callback_server_startedN)Úpyspark.java_gatewayr'   Ú_gatewayÚSentryListenerÚ_jscÚscÚaddSparkListener)r,   r'   ÚgwÚlisteners       r   Ú_start_sentry_listenerr0   '   s9   € õ
 Dà	�‰€BÙ" 2Ô&ÜÓ€HØ‡G�G‡J�JƒL×!Ñ! (Õ+r   c                  óh   ‡— ddl m}  | j                  Št        t        ‰«      ˆfd„«       }|| _        y )Nr   r   c                 óœ   •‡ —  ‰‰ g|¢­i |¤Ž}t        ‰ «       t        «        t        j                  «       }|j                  ˆ fd„«       }|S )Nc                 óR  •— t        «       5  t        j                  «       j                  t        «      €| cd d d «       S ‰j
                  €| cd d d «       S | j                  di «      j                  d‰j                  «       «       | j                  di «      j                  d‰j                  j                  d«      «       | d   j                  d‰j                  j                  d«      «       | d   j                  d‰j                  j                  d	«      «       | d   j                  d
‰j                  j                  d«      «       | d   j                  d‰j                  «       | d   j                  d‰j                  «       | d   j                  d‰j                  «       | d   j                  d‰j                  «       | d   j                  d‰j                  «       | j                  di «      j                  d‰j                  «       d d d «       | S # 1 sw Y   | S xY w)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)ÚeventÚhintÚselfs     €r   Úprocess_eventz[patch_spark_context_init.<locals>._sentry_patched_spark_context_init.<locals>.process_eventC   sÛ  ø€ ô -Ó.ñ SÜ×(Ñ(Ó*×:Ñ:Ô;KÓLÐTØ ÷Sñ Sð ×-Ñ-Ð5Ø ÷Sñ Sð × Ñ  ¨Ó,×7Ñ7¸¸d¿n¹nÓ>NÔOà× Ñ  ¨Ó,×7Ñ7Ø! 4§:¡:§>¡>Ð2EÓ#Fôð �f‘×(Ñ(Ø-Ø—J‘J—N‘NÐ#<Ó=ôð �f‘×(Ñ(Ø! 4§:¡:§>¡>Ð2EÓ#Fôð �f‘×(Ñ(Ø! 4§:¡:§>¡>Ð2EÓ#Fôð �f‘×(Ñ(¨¸$¿,¹,ÔGØ�f‘×(Ñ(¨°T·\±\ÔBØ�f‘×(Ñ(Ð)9¸4×;MÑ;MÔNØ�f‘×(Ñ(¨°4·;±;Ô?Ø�f‘×(Ñ(¨°t·~±~ÔFà× Ñ  ¨"Ó-×8Ñ8¸ÀDÇMÁMÔR÷9Sð< ˆL÷=Sð< ˆLús   Œ)H¿HÁF<HÈH&)r0   r%   r>   Úget_isolation_scopeÚadd_event_processor)rJ   ÚargsÚkwargsÚrvÚscoperK   Úspark_context_inits   `     €r   Ú"_sentry_patched_spark_context_initzDpatch_spark_context_init.<locals>._sentry_patched_spark_context_init:   sU   ù€ ñ   Ð6 tÒ6¨vÑ6ˆÜ˜tÔ$ÜÔä×.Ñ.Ó0ˆà	×	"Ñ	"ó 	ó 
#ð 	ðD ˆ	r   )r   r   Ú_do_initr   r   )r   rS   rR   s     @r   r   r   4   s9   ø€ å$à%×.Ñ.ÐäÔ 0Ð2DÓEó+ó Fð+ðZ ?€LÕr   c                   ó°   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ d«      Zy)ÚSparkListenerc                  ó   — y r   r   )rJ   ÚapplicationEnds     r   ÚonApplicationEndzSparkListener.onApplicationEndl   ó   € àr   c                  ó   — y r   r   )rJ   ÚapplicationStarts     r   ÚonApplicationStartz SparkListener.onApplicationStartp   rZ   r   c                  ó   — y r   r   )rJ   ÚblockManagerAddeds     r   ÚonBlockManagerAddedz!SparkListener.onBlockManagerAddedt   rZ   r   c                  ó   — y r   r   )rJ   ÚblockManagerRemoveds     r   ÚonBlockManagerRemovedz#SparkListener.onBlockManagerRemovedx   rZ   r   c                  ó   — y r   r   )rJ   ÚblockUpdateds     r   ÚonBlockUpdatedzSparkListener.onBlockUpdated|   rZ   r   c                  ó   — y r   r   )rJ   ÚenvironmentUpdates     r   ÚonEnvironmentUpdatez!SparkListener.onEnvironmentUpdate€   rZ   r   c                  ó   — y r   r   )rJ   ÚexecutorAddeds     r   ÚonExecutorAddedzSparkListener.onExecutorAdded„   rZ   r   c                  ó   — y r   r   )rJ   ÚexecutorBlacklisteds     r   ÚonExecutorBlacklistedz#SparkListener.onExecutorBlacklistedˆ   rZ   r   c                  ó   — y r   r   )rJ   ÚexecutorBlacklistedForStages     r   ÚonExecutorBlacklistedForStagez+SparkListener.onExecutorBlacklistedForStageŒ   s   € ð 	r   c                  ó   — y r   r   )rJ   ÚexecutorMetricsUpdates     r   ÚonExecutorMetricsUpdatez%SparkListener.onExecutorMetricsUpdate’   rZ   r   c                  ó   — y r   r   )rJ   ÚexecutorRemoveds     r   ÚonExecutorRemovedzSparkListener.onExecutorRemoved–   rZ   r   c                  ó   — y r   r   )rJ   ÚjobEnds     r   ÚonJobEndzSparkListener.onJobEndš   rZ   r   c                  ó   — y r   r   )rJ   ÚjobStarts     r   Ú
onJobStartzSparkListener.onJobStartž   rZ   r   c                  ó   — y r   r   )rJ   ÚnodeBlacklisteds     r   ÚonNodeBlacklistedzSparkListener.onNodeBlacklisted¢   rZ   r   c                  ó   — y r   r   )rJ   ÚnodeBlacklistedForStages     r   ÚonNodeBlacklistedForStagez'SparkListener.onNodeBlacklistedForStage¦   rZ   r   c                  ó   — y r   r   )rJ   ÚnodeUnblacklisteds     r   ÚonNodeUnblacklistedz!SparkListener.onNodeUnblacklistedª   rZ   r   c                  ó   — y r   r   )rJ   rH   s     r   ÚonOtherEventzSparkListener.onOtherEvent®   rZ   r   c                  ó   — y r   r   )rJ   ÚspeculativeTasks     r   ÚonSpeculativeTaskSubmittedz(SparkListener.onSpeculativeTaskSubmitted²   rZ   r   c                  ó   — y r   r   )rJ   ÚstageCompleteds     r   ÚonStageCompletedzSparkListener.onStageCompleted¶   rZ   r   c                  ó   — y r   r   )rJ   ÚstageSubmitteds     r   ÚonStageSubmittedzSparkListener.onStageSubmittedº   rZ   r   c                  ó   — y r   r   )rJ   ÚtaskEnds     r   Ú	onTaskEndzSparkListener.onTaskEnd¾   rZ   r   c                  ó   — y r   r   )rJ   ÚtaskGettingResults     r   ÚonTaskGettingResultz!SparkListener.onTaskGettingResultÂ   rZ   r   c                  ó   — y r   r   )rJ   Ú	taskStarts     r   ÚonTaskStartzSparkListener.onTaskStartÆ   rZ   r   c                  ó   — y r   r   )rJ   ÚunpersistRDDs     r   ÚonUnpersistRDDzSparkListener.onUnpersistRDDÊ   rZ   r   c                   ó   — e Zd ZdgZy)úSparkListener.Javaz1org.apache.spark.scheduler.SparkListenerInterfaceN)r   r   r   Ú
implementsr   r   r   ÚJavar    Î   s
   „ ØIÐJ‰
r   r¢   N)r   r   r   rY   r]   r`   rc   rf   ri   rl   ro   rr   ru   rx   r{   r~   r�   r„   r‡   r‰   rŒ   r�   r’   r•   r˜   r›   rž   r¢   r   r   r   rV   rV   k   s†   „ òòòòòòòòòòòòòòòòòòòòòòòò÷Kò Kr   rV   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)r*   c                 ó„   — dj                  |j                  «       «      }t        j                  d|¬«       t	        «        y )NzJob {} StartedÚinfo)ÚlevelÚmessage)ÚformatÚjobIdr>   Úadd_breadcrumbr%   )rJ   r}   r§   s      r   r~   zSentryListener.onJobStartÓ   s/   € à"×)Ñ)¨(¯.©.Ó*:Ó;ˆÜ×!Ñ!¨¸Õ@ÜÕr   c                 óD  — d}d}d|j                  «       j                  «       i}|j                  «       j                  «       dk(  r"d}dj                  |j                  «       «      }n!d}dj                  |j                  «       «      }t	        j
                  |||¬«       y )	NÚ ÚresultÚJobSucceededr¥   zJob {} EndedÚwarningzJob {} Failed©r¦   r§   Údata)Ú	jobResultÚtoStringr¨   r©   r>   rª   )rJ   rz   r¦   r§   r±   s        r   r{   zSentryListener.onJobEndÙ   sŠ   € àˆØˆØ˜&×*Ñ*Ó,×5Ñ5Ó7Ð8ˆà×ÑÓ×&Ñ&Ó(¨NÒ:ØˆEØ$×+Ñ+¨F¯L©L«NÓ;‰GàˆEØ%×,Ñ,¨V¯\©\«^Ó<ˆGä×!Ñ!¨°wÀTÖJr   c                 óè   — |j                  «       }dj                  |j                  «       «      }|j                  «       |j	                  «       dœ}t        j                  d||¬«       t        «        y )NzStage {} Submitted©Ú	attemptIdÚnamer¥   r°   )Ú	stageInfor¨   ÚstageIdr¶   r·   r>   rª   r%   )rJ   r‘   Ú
stage_infor§   r±   s        r   r’   zSentryListener.onStageSubmittedè   s[   € à#×-Ñ-Ó/ˆ
Ø&×-Ñ-¨j×.@Ñ.@Ó.BÓCˆØ'×1Ñ1Ó3¸Z¿_¹_Ó=NÑOˆÜ×!Ñ!¨¸ÀdÕKÜÕr   c                 óˆ  — ddl m} |j                  «       }d}d}|j                  «       |j	                  «       dœ}	 |j                  «       j                  «       |d<   dj                  |j                  «       «      }d}t        j                  |||¬
«       y # |$ r$ dj                  |j                  «       «      }d	}Y ŒAw xY w)Nr   )ÚPy4JJavaErrorr¬   rµ   ÚreasonzStage {} Failedr¯   zStage {} Completedr¥   r°   )Úpy4j.protocolr¼   r¸   r¶   r·   ÚfailureReasonrD   r¨   r¹   r>   rª   )rJ   rŽ   r¼   rº   r§   r¦   r±   s          r   r�   zSentryListener.onStageCompletedð   s¸   € å/à#×-Ñ-Ó/ˆ
ØˆØˆØ'×1Ñ1Ó3¸Z¿_¹_Ó=NÑOˆð	Ø'×5Ñ5Ó7×;Ñ;Ó=ˆD�‰NØ'×.Ñ.¨z×/AÑ/AÓ/CÓDˆGØˆEô
 	×!Ñ!¨°wÀTÖJøð	 ò 	Ø*×1Ñ1°*×2DÑ2DÓ2FÓGˆGØŠEð	ús   ½AB Â&CÃ CN)r   r   r   r~   r{   r’   r�   r   r   r   r*   r*   Ò   s   „ òòKòóKr   r*   )r>   Úsentry_sdk.integrationsr   Úsentry_sdk.utilsr   r   Útypingr   r   r   Úsentry_sdk._typesr	   r
   r   r%   r0   r   rV   r*   r   r   r   ú<module>rÄ      sV   ðÛ Ý /ß Tå  áÝÝç-ô#�{ô #ò
ò 
,ò4?÷ndKñ dKôN0K�]õ 0Kr   