§
    AxÅjÖ  ã                   ó˜   — d Z ddlZddl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 ddlmZ ddlmZ  e¦   «         Z G d	„ d
¦  «        ZdS )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                   óN   — e Zd ZdZdZddd„Zedd„¦   «         Zdd	„Zdd
„Z	d„ Z
dS )Ú	Heartbeatz&Sends heartbeats to the Runpod server.Fé
   é   ÚreturnNc                 ó’  — t           j                             dd¦  «        | _        | j                             dt
          ¦  «        | _        t          t           j                             dd¦  «        ¦  «        dz  | _        d| _        t          ¦   «         | _
        | j
        j                             dt           j                             d	d
¦  «        i¦  «         t          |g d¢dgd¬¦  «        }t          j                             |||¬¦  «        }| j
                             d|¦  «         | j
                             d|¦  «         dS )z2
        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        úRC:\Projects\Historical\venv\Lib\site-packages\runpod/serverless/modules/rp_ping.pyÚ__init__zHeartbeat.__init__   s5  € õ œ
ŸšÐ'<¸nÑMÔMˆŒØœ×-Ò-Ð.>Å	ÑJÔJˆŒÝ ¥¤§¢Ð0FÈÑ!NÔ!NÑOÔOÐSWÑWˆÔð ˆŒõ *Ñ+Ô+ˆŒØŒÔ×$Ò$Ø�bœjŸnšnÐ-@À"ÑEÔEÐFñ	
ô 	
ð 	
õ ØØ6Ð6Ð6Ø"˜GØð	
ñ 
ô 
ˆõ Ô#×/Ò/Ø-Ø)Ø&ð 0ñ 
ô 
ˆð
 	Œ×Ò˜I wÑ/Ô/Ð/ØŒ×Ò˜J¨Ñ0Ô0Ð0Ð0Ð0ó    c                 óZ   — t          ¦   «         }| |_        |                     |¦  «         dS )zŽ
        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      r1   Úprocess_loopzHeartbeat.process_loop9   s,   € õ ‰[Œ[ˆØˆŒ
Ø
�Š�TÑÔÐÐÐr3   c                 óò  — t           j                             d¦  «        st                               d¦  «         dS t           j                             d¦  «        st                               d¦  «         dS | j        r| j        dk    rt                               d¦  «         dS t          j	        sFt          t          j        ||f¬¦  «        }d	|_        |                     ¦   «          d	t          _	        dS dS )
zS
        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   r9   ÚdaemonÚstart)r-   r6   r7   Úprocesss       r1   Ú
start_pingzHeartbeat.start_pingC   sß   € õ Œz�~Š~Ð1Ñ2Ô2ð 	Ý�IŠIÐRÑSÔSÐSØˆFåŒz�~Š~˜oÑ.Ô.ð 	Ý�HŠHÐEÑFÔFÐFØˆFà”ð 	 $¤-°>Ò"AÐ"AÝ�IŠIÐ<Ñ=Ô=Ð=ØˆFåÔ)ð 	.Ý¥YÔ%;À6È4À.ÐQÑQÔQˆGØ!ˆGŒNØ�MŠM‰OŒOˆOØ)-�IÔ&Ð&Ð&ð		.ð 	.r3   c                 óh   — 	 |                       ¦   «          t          j        | j        ¦  «         |rdS Œ2)zO
        Sends heartbeat pings to the Runpod server until interrupted.
        TN)Ú
_send_pingÚtimeÚsleepr$   )r-   r7   s     r1   r5   zHeartbeat.ping_loopY   s<   € ð	Ø�OŠOÑÔÐÝŒJ�tÔ)Ñ*Ô*Ð*Øð Ø�ð		r3   c                 ó~  — | j         �| j                              ¦   «         nd}|t          dœ}	 | j                             | j        || j        dz  ¬¦  «        }t                               d|j        › d|j	        › �¦  «         dS # t          j        $ r)}t                               d|› d�¦  «         Y d}~dS d}~ww xY w)	z9
        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    rM   r&   r!   r$   r>   r?   ÚurlÚstatus_coder)   ÚRequestExceptionrA   )r-   Újob_idsÚping_paramsÚresultÚerrs        r1   rH   zHeartbeat._send_pingc   sö   € ð )-¬Ð(@�$”,×"Ò"Ñ$Ô$Ð$ÀdˆØ!(½NÐKÐKˆð		QØ”]×&Ò&Ø” k¸4Ô;MÐPQÑ;Qð 'ñ ô ˆFõ �IŠIØT¨¬ÐTÐTÀÔ@RÐTÐTñô ð ð ð øõ Ô(ð 	Qð 	Qð 	QÝ�IŠIÐO¨SÐOÐOÐOÑPÔPÐPÐPÐPÐPÐPÐPÐPøøøøð	Qøøøs   ®AB ÂB<ÂB7Â7B<)r   r   )r   N)NF)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   r2   Ústaticmethodr9   rF   r5   rH   © r3   r1   r
   r
      s–   € € € € € Ø0Ð0àÐð1ð 1ð 1ð 1ð 1ð@ ðð ð ñ „\ðð.ð .ð .ð .ð,ð ð ð ðQð Qð Qð Qð Qr3   r
   )r[   r   rI   Úmultiprocessingr   r)   Úurllib3.util.retryr   Úrunpod.http_clientr   Ú#runpod.serverless.modules.rp_loggerr   Ú&runpod.serverless.modules.worker_stater   Úrunpod.versionr   rM   r>   r
   r]   r3   r1   ú<module>rd      sé   ððð ð
 
€	€	€	Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø <Ð <Ð <Ð <Ð <Ð <Ø <Ð <Ð <Ð <Ð <Ð <Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8à€l�n„n€ð_Qð _Qð _Qð _Qð _Qñ _Qô _Qð _Qð _Qð _Qr3   