a
    Šxd_  ã                   @   sÐ   d dl Z d dlZd dlZd dl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 d dlmZ ddlmZ d d	lmZ d d
lmZmZmZ e e¡ZG dd„ deƒZG dd„ deƒZG dd„ dejƒZdS )é    N)Úpartial)ÚIOLoop)ÚPeriodicCallback)ÚEventReceiver)ÚStateé   )Úapi)ÚCounter)r	   Ú	HistogramÚGaugec                   @   sh   e Zd Zeddg d¢ƒZeddddgƒZedd	ddgƒZed
dddgƒZ	edddgƒZ
edddgƒZdS )ÚPrometheusMetricsZflower_events_totalzNumber of events)ÚworkerÚtypeÚtaskZflower_task_runtime_secondszTask runtimer   r   Z!flower_task_prefetch_time_secondszDThe time the task spent waiting at the celery worker to be executed.Zflower_worker_prefetched_tasksz4Number of tasks of given type prefetched at a workerZflower_worker_onlinezWorker online statusZ1flower_worker_number_of_currently_executing_tasksz/Number of tasks currently executing at a workerN)Ú__name__Ú
__module__Ú__qualname__ÚPrometheusCounterÚeventsr
   Úruntimer   Úprefetch_timeÚnumber_of_prefetched_tasksÚworker_onlineÚ*worker_number_of_currently_executing_tasks© r   r   úE/var/www/html/Ranjet/env/lib/python3.9/site-packages/flower/events.pyr      s$   ýýýr   c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚEventsStatec                    s.   t t| ƒj|i |¤Ž t t¡| _tƒ | _d S ©N)	Úsuperr   Ú__init__ÚcollectionsÚdefaultdictr	   Úcounterr   Úmetrics)ÚselfÚargsÚkwargs©Ú	__class__r   r   r   0   s    zEventsState.__init__c                    s  t t| ƒ |¡ |d }|d }| j| |  d7  < | d¡rh|d }| j |¡}| dd¡}|sz|| jv rz|jpxd}| jj	 
|||¡ ¡  | dd	¡}|r¶| jj 
||¡ |¡ |j}|j}	|d
krè|jsè|	rè| jj 
||¡ ¡  |dkr4|js4|r4|	r4| jj 
||¡ ||	 ¡ | jj 
||¡ ¡  |dv rh|jsh|rh|	rh| jj 
||¡ d	¡ |dkr†| jj 
|¡ d¡ |dkrÌ| jj 
|¡ d¡ | d¡}
|
d urÌ| jj 
|¡ |
¡ |dkrê| jj 
|¡ d	¡ tj	 |¡}ttj	|d ƒ}|r| |¡ d S )NÚhostnamer   r   ztask-ÚuuidÚnameÚ r   r   ztask-receivedztask-started)ztask-succeededztask-failedzworker-onlinezworker-heartbeatÚactivezworker-offline)r   r   Úeventr"   Ú
startswithZtasksÚgetr+   r#   r   ÚlabelsÚincr   ZobserveÚstartedZreceivedÚetar   r   ÚsetÚdecr   r   r   ZgetClassNameÚgetattrÚsend_message)r$   r.   Zworker_nameZ
event_typeZtask_idr   Z	task_namer   Ztask_startedZtask_receivedZnum_executing_tasksÚ	classnameÚclsr'   r   r   r.   5   sH    





zEventsState.event)r   r   r   r   r.   Ú__classcell__r   r   r'   r   r   -   s   r   c                   @   sJ   e 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S )ÚEventsiˆ  NFTr   c           	      K   s¶   t j | ¡ d| _|pt ¡ | _|| _|| _|| _	|| _
d | _d | _| j	rŒt d| j¡ t | j¡}|rr|d | _| ¡  |rŒt| j|ƒ| _| js¢tf i |¤Ž| _t| j| jƒ| _d S )NTzLoading state from '%s'...r   )Ú	threadingÚThreadr   Údaemonr   ÚinstanceÚio_loopÚcappÚdbÚ
persistentÚenable_eventsÚstateÚstate_save_timerÚloggerÚdebugÚshelveÚopenÚcloser   Ú
save_stater   Úon_enable_eventsÚevents_enable_intervalÚtimer)	r$   rB   rC   rD   rE   rA   Zstate_save_intervalr&   rF   r   r   r   r   n   s0    
ÿÿzEvents.__init__c                 C   sD   t j | ¡ | jr&t d¡ | j ¡  | jr@t d¡ | j ¡  d S )NzStarting enable events timer...zStarting state save timer...)r=   r>   ÚstartrE   rH   rI   rP   rG   ©r$   r   r   r   rQ   Ž   s    


zEvents.startc                 C   sF   | j rt d¡ | j ¡  | jr4t d¡ | j ¡  | jrB|  ¡  d S )NzStopping enable events timer...zStopping state save timer...)rE   rH   rI   rP   ÚstoprG   rD   rM   rR   r   r   r   rS   ˜   s    



zEvents.stopc                 C   s  d}zj|d9 }| j  ¡ D}t|d| ji| j d}d}t d¡ |jd d dd W d   ƒ n1 sb0    Y  W q ttfy´   zdd l	}W n t
y¦   dd l}Y n0 | ¡  Y q tyü } z2t d	||¡ tj|dd
 t |¡ W Y d }~qd }~0 0 qd S )Nr   é   Ú*)ÚhandlersZappzCapturing events...T)ÚlimitÚtimeoutÚwakeupr   z;Failed to capture events: '%s', trying again in %s seconds.)Úexc_info)rB   Ú
connectionr   Úon_eventrH   rI   ÚcaptureÚKeyboardInterruptÚ
SystemExitÚ_threadÚImportErrorÚthreadÚinterrupt_mainÚ	ExceptionÚerrorÚtimeÚsleep)r$   Ztry_intervalÚconnÚrecvrb   Úer   r   r   Úrun¤   s.    þ
2þz
Events.runc                 C   s4   t  d| j¡ tj| jdd}| j|d< | ¡  d S )NzSaving state to '%s'...Ún)Úflagr   )rH   rI   rC   rJ   rK   rF   rL   )r$   rF   r   r   r   rM   ¾   s    
zEvents.save_statec                 C   s   | j  d | jjj¡ d S r   )rA   Zrun_in_executorrB   ÚcontrolrE   rR   r   r   r   rN   Ä   s    zEvents.on_enable_eventsc                 C   s   | j  t| jj|ƒ¡ d S r   )rA   Zadd_callbackr   rF   r.   )r$   r.   r   r   r   r\   É   s    zEvents.on_event)NFTNr   )r   r   r   rO   r   rQ   rS   rk   rM   rN   r\   r   r   r   r   r<   k   s     ÿ
 
r<   )rf   rJ   Úloggingr=   r    Ú	functoolsr   Ztornado.ioloopr   r   Zcelery.eventsr   Zcelery.events.stater   r,   r   r	   Zprometheus_clientr   r
   r   Ú	getLoggerr   rH   Úobjectr   r   r>   r<   r   r   r   r   Ú<module>   s    
>