o
    Df                     @   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   O/home/ubuntu/webapp/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   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    >