
    tniS                         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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JobsProgress)__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  | _        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  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://N)osenvirongetPING_URLreplacer   intPING_INTERVALr   _sessionheadersupdater   requestsadaptersHTTPAdaptermount)selfr   retriesretry_strategyadapters        ^/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/runpod/serverless/modules/rp_ping.py__init__zHeartbeat.__init__   s,    
'<nMM--.>	JJ 0F!N!NOOSWW *++$$bjnn-@"EEF	
 	
 	
 666"G	
 
 
 #//-)& 0 
 

 	Iw///J00000    c                 L    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   	ping_loop)testhbs     r1   process_loopzHeartbeat.process_loop6   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	        sEt          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   r8   daemonstart)r-   r6   processs      r1   
start_pingzHeartbeat.start_ping?   s     z~~122 	IIRSSSFz~~o.. 	HHEFFFF 	$->"A"AII<===F) 	.Y%;4'JJJG!GNMMOOO)-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-   r6   s     r1   r5   zHeartbeat.ping_loopU   s<    	OOJt)*** 		r3   c                 ~   t                      }|                                }|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.
        )job_idrunpod_version   )paramstimeoutzHeartbeat Sent | URL: z | Status: zPing Request Error: z, attempting to restart ping.N)r   get_job_listrL   r&   r!   r"   r%   r=   r>   urlstatus_coder)   RequestExceptionr@   )r-   jobsjob_idsping_paramsresulterrs         r1   rG   zHeartbeat._send_ping_   s     ~~##%%!(NKK		Q]&&k4;MPQ;Q '  F IITTT@RTT     ( 	Q 	Q 	QIIOSOOOPPPPPPPPP	Qs   AB B<B77B<)r   r   )r   N)F)__name__
__module____qualname____doc__rA   r2   staticmethodr8   rE   r5   rG    r3   r1   r   r      s        001 1 1 1 1:    \. . . .,   Q Q Q Q Qr3   r   )r\   r   rH   multiprocessingr   r)   urllib3.util.retryr   runpod.http_clientr   #runpod.serverless.modules.rp_loggerr   &runpod.serverless.modules.worker_stater   r   runpod.versionr	   rL   r=   r   r^   r3   r1   <module>re      s    
 
			  # # # # # #  $ $ $ $ $ $ 0 0 0 0 0 0 < < < < < < J J J J J J J J 8 8 8 8 8 8lnn\Q \Q \Q \Q \Q \Q \Q \Q \Q \Qr3   