o
    ›¨ÊhÞ  ã                   @   s�   d 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
 ddlmZ ddlmZ dd	lmZ d
ZedƒZG dd„ dƒZ		ddd„ZdS )aS  Periodically store events in a database.

Consuming the events as a stream isn't always suitable
so this module implements a system to take snapshots of the
state of a cluster at regular intervals.  There's a full
implementation of this writing the snapshots to a database
in :mod:`djcelery.snapshots` in the `django-celery` distribution.
é    )ÚTokenBucket)Ú	platforms)Úapp_or_default)ÚSignal)Úinstantiate)Ú
get_logger)Úrate)ÚTimer)ÚPolaroidÚevcamzcelery.evcamc                   @   sŽ   e Zd ZdZdZeddhd�Zedd�ZdZdZ	dZ
		ddd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) r
   zRecord event snapshots.NÚshutter_signalÚstate)ÚnameÚproviding_argsÚcleanup_signal)r   Fç      ð?ç      ¬@c                 C   sJ   t |ƒ| _|| _|| _|| _|p| jptƒ | _t| _|o!tt	|ƒƒ| _
d S ©N)r   Úappr   ÚfreqÚcleanup_freqÚtimerr	   Úloggerr   r   Úmaxrate)Úselfr   r   r   r   r   r   © r   úH/var/www/html/env/lib/python3.10/site-packages/celery/events/snapshot.pyÚ__init__#   s   
zPolaroid.__init__c                 C   s,   | j  | j| j¡| _| j  | j| j¡| _d S r   )r   Úcall_repeatedlyr   ÚcaptureÚ_trefr   ÚcleanupÚ_ctref©r   r   r   r   Úinstall-   s   
ÿzPolaroid.installc                 C   ó   d S r   r   )r   r   r   r   r   Ú
on_shutter3   ó   zPolaroid.on_shutterc                 C   r%   r   r   r#   r   r   r   Ú
on_cleanup6   r'   zPolaroid.on_cleanupc                 C   s&   t  d¡ | jj| jd� |  ¡  d S )NzCleanup: Running...©Úsender)r   Údebugr   Úsendr   r(   r#   r   r   r   r!   9   s   
zPolaroid.cleanupc                 C   sF   | j d u s
| j  ¡ r!t d| j¡ | jj| jd� |  | j¡ d S d S )NzShutter: %sr)   )r   Úcan_consumer   r+   r   r   r,   r&   r#   r   r   r   Úshutter>   s
   ýzPolaroid.shutterc                 C   s   | j j| j| jd� d S )N)Úclear_after)r   Úfreeze_whiler.   r/   r#   r   r   r   r   D   s   zPolaroid.capturec                 C   s0   | j r|   ¡  | j  ¡  | jr| j ¡  d S d S r   )r    Úcancelr"   r#   r   r   r   r1   G   s   
ÿzPolaroid.cancelc                 C   s   |   ¡  | S r   )r$   r#   r   r   r   Ú	__enter__N   s   zPolaroid.__enter__c                 G   s   |   ¡  d S r   )r1   )r   Úexc_infor   r   r   Ú__exit__R   s   zPolaroid.__exit__)r   Nr   NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r/   r    r"   r   r$   r&   r(   r!   r.   r   r1   r2   r4   r   r   r   r   r
      s(    

ÿ
r
   r   Nc                 K   sÌ   t |ƒ}|rt |¡ |j ||¡ td| › d|› d�ƒ |j ¡ }	t| |	||||d�}
|
 	¡  | 
¡ }|jj|d|	jid�}zz|jdd� W n	 tyQ   t‚w W |
 ¡  | ¡  dS |
 ¡  | ¡  w )	zStart snapshot recorder.z -> evcam: Taking snapshots with z (every z secs.))r   r   r   r   Ú*)ÚhandlersN)Úlimit)r   r   Úcreate_pidlockÚlogÚsetup_logging_subsystemÚprintÚeventsÚStater   r$   Úconnection_for_readÚReceiverÚeventr   ÚKeyboardInterruptÚ
SystemExitr1   Úclose)Úcamerar   r   ÚloglevelÚlogfileÚpidfiler   r   Úkwargsr   ÚcamÚconnÚrecvr   r   r   r   V   s.   


ÿÿÿÿ
r   )r   Nr   NNNN)r8   Úkombu.utils.limitsr   Úceleryr   Ú
celery.appr   Úcelery.utils.dispatchr   Úcelery.utils.importsr   Úcelery.utils.logr   Úcelery.utils.timer   Úcelery.utils.timer2r	   Ú__all__r   r
   r   r   r   r   r   Ú<module>   s    >ÿ