o
    ›¨Êh;  ã                   @   sF   d Z ddlmZ ddlmZ ddlmZmZmZ dZ	G dd„ dƒZ
d	S )
z�Heartbeat service.

This is the internal thread responsible for sending heartbeat events
at regular intervals (may not be an actual thread).
é    )Úheartbeat_sent)Úload_averageé   )ÚSOFTWARE_INFOÚactive_requestsÚall_total_count)ÚHeartc                   @   s4   e Zd ZdZddd„Zddd„Zdd	„ Zd
d„ ZdS )r   a@  Timer sending heartbeats at regular intervals.

    Arguments:
        timer (kombu.asynchronous.timer.Timer): Timer to use.
        eventer (celery.events.EventDispatcher): Event dispatcher
            to use.
        interval (float): Time in seconds between sending
            heartbeats.  Default is 2 seconds.
    Nc                 C   s\   || _ || _t|p
dƒ| _d | _| jj | j¡ | jj | j	¡ t
jr)t
j| _d S d | _d S )Ng       @)ÚtimerÚeventerÚfloatÚintervalÚtrefÚ
on_enabledÚaddÚstartÚon_disabledÚstopr   Ú	receiversÚsendÚ_send_sent_signal)Úselfr	   r
   r   © r   úI/var/www/html/env/lib/python3.10/site-packages/celery/worker/heartbeat.pyÚ__init__   s   
ÿÿzHeart.__init__Tc                 C   sB   | j d ur| j | d� | jj|f| jttƒtd tƒ |dœt¤ŽS )N)Úsenderr   )ÚfreqÚactiveÚ	processedÚloadavgÚretry)	r   r
   r   r   Úlenr   r   r   r   )r   Úeventr   r   r   r   Ú_send'   s   
üûzHeart._sendc                 C   s0   | j jr|  d¡ | j | j| jd¡| _d S d S )Nzworker-online)zworker-heartbeat)r
   Úenabledr"   r	   Úcall_repeatedlyr   r   ©r   r   r   r   r   1   s   


ÿþzHeart.startc                 C   s<   | j d ur| j | j ¡ d | _ | jjr| jddd� d S d S )Nzworker-offlineF)r   )r   r	   Úcancelr
   r#   r"   r%   r   r   r   r   8   s   
ÿz
Heart.stop)N)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r   r   r   r   r   r   r      s    



r   N)r*   Úcelery.signalsr   Úcelery.utils.sysinfor   Ústater   r   r   Ú__all__r   r   r   r   r   Ú<module>   s    