ó
    Ú°›jÖ  ã                   óŠ   • S r SSKrSSKrSSKJr  SSKrSSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr  \" 5       r " S	 S
5      rg)zx
This module defines the Heartbeat class.
The heartbeat is responsible for sending periodic pings to the Runpod server.
é    N)ÚProcess)ÚRetry)ÚSyncClientSession)ÚRunPodLogger)Ú	WORKER_ID)Ú__version__c                   óX   • \ rS rSrSrSrSSS jjr\SS j5       rSS jr	SS jr
S	 rS
rg)Ú	Heartbeaté   z&Sends heartbeats to the Runpod server.FNc                 ó|  • [         R                  R                  SS5      U l        U R                  R	                  S[
        5      U l        [        [         R                  R                  SS5      5      S-  U l        SU l        [        5       U l
        U R                  R                  R                  S[         R                  R                  S	S
5      05        [        U/ SQS/SS9n[        R                  R!                  UUUS9nU R                  R#                  SU5        U R                  R#                  SU5        g)z"
Initializes the Heartbeat class.
ÚRUNPOD_WEBHOOK_PINGÚPING_NOT_SETz$RUNPOD_POD_IDÚRUNPOD_PING_INTERVALi'  iè  NÚAuthorizationÚRUNPOD_AI_API_KEYÚ )i­  iô  iö  i÷  iø  ÚGETé   )ÚtotalÚstatus_forcelistÚallowed_methodsÚbackoff_factor)Úpool_connectionsÚpool_maxsizeÚmax_retrieszhttp://zhttps://)ÚosÚenvironÚgetÚPING_URLÚreplacer   ÚintÚPING_INTERVALÚ_mirrorr   Ú_sessionÚheadersÚupdater   ÚrequestsÚadaptersÚHTTPAdapterÚmount)Úselfr   ÚretriesÚretry_strategyÚadapters        Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/runpod/serverless/modules/rp_ping.pyÚ__init__ÚHeartbeat.__init__   s  € ô Ÿ
™
Ÿ™Ð'<¸nÓMˆŒØŸ™×-Ñ-Ð.>Ä	ÓJˆŒÜ ¤§¡§¡Ð0FÈÓ!NÓOÐSWÑWˆÔð ˆŒô *Ó+ˆŒØ�‰×Ñ×$Ñ$ØœbŸj™jŸn™nÐ-@À"ÓEÐFô	
ô ØÚ6Ø"˜GØñ	
ˆô ×#Ñ#×/Ñ/Ø-Ø)Ø&ð 0ð 
ˆð
 	�‰×Ñ˜I wÔ/Ø�‰×Ñ˜J¨Õ0ó    c                 óF   • [        5       nXl        UR                  U5        g)zv
Static helper to run the ping loop in a separate process.
Creates a new Heartbeat instance to avoid pickling issues.
N)r
   r#   Ú	ping_loop)ÚmirrorÚtestÚhbs      r/   Úprocess_loopÚHeartbeat.process_loop9   s   € ô ‹[ˆØŒ
Ø
�‰�TÕr2   c                 óü  • [         R                  R                  S5      (       d  [        R	                  S5        g[         R                  R                  S5      (       d  [        R                  S5        gU R                  (       a  U R                  S:X  a  [        R                  S5        g[        R                  (       d<  [        [        R                  X4S9nS	Ul        UR                  5         S	[        l	        gg)
zC
Sends heartbeat pings to the Runpod server in a separate process.
r   z:Not deployed on Runpod serverless, pings will not be sent.NÚRUNPOD_POD_IDz.Not running on Runpod, pings will not be sent.r   z$Ping URL not set, cannot start ping.)ÚtargetÚargsT)r   r   r   ÚlogÚdebugÚinfor   Úerrorr
   Ú_process_startedr   r8   ÚdaemonÚstart)r+   r5   r6   Úprocesss       r/   Ú
start_pingÚHeartbeat.start_pingC   s§   € ô �z‰z�~‰~Ð1×2Ñ2Ü�I‰IÐRÔSØä�z‰z�~‰~˜o×.Ñ.Ü�H‰HÐEÔFØà—— $§-¡-°>Ó"AÜ�I‰IÐ<Ô=Øä×)×)Ü¤Y×%;Ñ%;À6À.ÑQˆGØ!ˆGŒNØ�M‰MŒOØ)-ŒIÕ&ð	 *r2   c                 óx   •  U R                  5         [        R                  " U R                  5        U(       a  gM:  )z?
Sends heartbeat pings to the Runpod server until interrupted.
N)Ú
_send_pingÚtimeÚsleepr"   )r+   r6   s     r/   r4   ÚHeartbeat.ping_loopY   s.   € ð Ø�O‰OÔÜ�JŠJ�t×)Ñ)Ô*ÞØñ	 r2   c                 óž  • U R                   b  U R                   R                  5       OSnU[        S.n U R                  R                  U R                  X R
                  S-  S9n[        R                  SUR                   SUR                   35        g! [        R                   a#  n[        R                  SU S35         SnAgSnAff = f)	z)
Sends a heartbeat to the Runpod server.
N)Újob_idÚrunpod_versioné   )ÚparamsÚtimeoutzHeartbeat Sent | URL: z | Status: zPing Request Error: z, attempting to restart ping.)r#   r   rO   r$   r   r"   r>   r?   ÚurlÚstatus_coder'   ÚRequestExceptionrA   )r+   Újob_idsÚping_paramsÚresultÚerrs        r/   rI   ÚHeartbeat._send_pingc   s¼   € ð )-¯©Ñ(@�$—,‘,×"Ñ"Ô$ÀdˆØ!(¼NÑKˆð		QØ—]‘]×&Ñ&Ø—‘ k×;MÑ;MÐPQÑ;Qð 'ð ˆFô �I‰IØ(¨¯©¨°KÀ×@RÑ@RÐ?SÐTõøô ×(Ñ(ó 	QÜ�I‰IÐ,¨S¨EÐ1NÐO×PÑPûð	Qús   ´A B ÂCÂ)CÃC)r"   r   r#   r$   )é
   é   )ÚreturnN)NF)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rB   r0   Ústaticmethodr8   rF   r4   rI   Ú__static_attributes__© r2   r/   r
   r
      s5   † Ù0àÐö1ð@ óó ðô.ô,õQr2   r
   )rb   r   rJ   Úmultiprocessingr   r'   Úurllib3.util.retryr   Úrunpod.http_clientr   Ú#runpod.serverless.modules.rp_loggerr   Ú&runpod.serverless.modules.worker_stater   Úrunpod.versionr   rO   r>   r
   re   r2   r/   Ú<module>rl      s<   ðñó
 
Û Ý #Û Ý $å 0Ý <Ý <Ý 8áƒn€÷_Qò _Qr2   