o
    wvXjI  ã                   @   s¦   d Z ddlmZmZ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d
lmZ dZedƒZG dd„ deƒ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.
é    )Úabsolute_importÚprint_functionÚunicode_literals)Ú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   úS/var/www/html/myproject/venv/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   Úinstall0   s   
ÿzPolaroid.installc                 C   ó   d S r   r   )r   r   r   r   r   Ú
on_shutter6   ó   zPolaroid.on_shutterc                 C   r(   r   r   r&   r   r   r   Ú
on_cleanup9   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$   <   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   ÚshutterA   s
   ýzPolaroid.shutterc                 C   s   | j j| j| jd� d S )N)Úclear_after)r   Úfreeze_whiler1   r2   r&   r   r   r   r"   G   s   zPolaroid.capturec                 C   s0   | j r|   ¡  | j  ¡  | jr| j ¡  d S d S r   )r#   Úcancelr%   r&   r   r   r   r4   J   s   
ÿzPolaroid.cancelc                 C   s   |   ¡  | S r   )r'   r&   r   r   r   Ú	__enter__Q   s   zPolaroid.__enter__c                 G   s   |   ¡  d S r   )r4   )r   Úexc_infor   r   r   Ú__exit__U   s   zPolaroid.__exit__)r   Nr   NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r2   r#   r%   r    r'   r)   r+   r$   r1   r"   r4   r5   r7   r   r   r   r   r      s(    

ÿ
r   r   Nc                 C   sÆ   t |ƒ}|rt |¡ |j ||¡ td | |¡ƒ |j ¡ }t	| |||||d�}	|	 
¡  | ¡ }
|jj|
d|jid�}zz|jdd� W n	 tyN   t‚w W |	 ¡  |
 ¡  dS |	 ¡  |
 ¡  w )zStart snapshot recorder.z5-> evcam: Taking snapshots with {0} (every {1} secs.))r   r   r   r   Ú*)ÚhandlersN)Úlimit)r   r   Úcreate_pidlockÚlogÚsetup_logging_subsystemÚprintÚformatÚeventsÚStater	   r'   Úconnection_for_readÚReceiverÚeventr"   ÚKeyboardInterruptÚ
SystemExitr4   Úclose)Úcamerar   r   ÚloglevelÚlogfileÚpidfiler   r   r   ÚcamÚconnÚrecvr   r   r   r   Y   s2   
ÿ

ÿÿÿÿ
r   )r   Nr   NNNN)r;   Ú
__future__r   r   r   Úkombu.utils.limitsr   Úceleryr   Ú
celery.appr   Úcelery.utils.dispatchr   Úcelery.utils.importsr	   Úcelery.utils.logr
   Úcelery.utils.timer   Úcelery.utils.timer2r   Ú__all__r   Úobjectr   r   r   r   r   r   Ú<module>   s    >ÿ