U
    ÷Õ/e»  ã                   @  s<   d dl mZ d dlmZmZ d dlmZ G dd„ deƒZdS )é    )Úannotations)ÚCounterMetricFamilyÚGaugeMetricFamily)ÚPrometheusCollectorc                      s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚSemaphoreMetricCollectorc                   s   t ƒ  |¡ d| _d S )NZ	semaphore)ÚsuperÚ__init__Z	subsystem)ÚselfÚserver©Ú	__class__© úS/tmp/pip-unpacked-wheel-g426oqom/distributed/http/scheduler/prometheus/semaphore.pyr   	   s    z!SemaphoreMetricCollector.__init__c           
      c  sp  z| j jd }W n tk
r&   Y d S X t|  d¡ddgd}t|  d¡ddgd}t|  d¡d	dgd}t|  d
¡ddgd}t|  d¡ddgd}t|  d¡ddgdd}|j ¡ D ]Ž\}}	| |g|	¡ | |gt	|j
| ƒ¡ | |g|jd | ¡ | |g|jd
 | ¡ | |g|jd | ¡ | |g|jd | ¡ q¸|V  |V  |V  |V  |V  |V  d S )NZ
semaphoresÚ
max_leaseszhMaximum leases allowed per semaphore
Note: This will be constant for each semaphore during its lifetime.Úname)ÚlabelsZactive_leasesz/Amount of currently active leases per semaphoreZpending_leasesz0Amount of currently pending leases per semaphoreZacquire_totalz-Total number of leases acquired per semaphoreZrelease_totalz·Total number of leases released per semaphore
Note: If a semaphore is closed while there are still leases active, this count will not equal `semaphore_acquired_total` after execution.Zaverage_pending_lease_timea  Exponential moving average of the time it took to acquire a lease per semaphore
Note: This only includes time spent on scheduler side, it does not include time spent on communication.
Note: This average is calculated based on order of leases instead of time of lease acquisition.Ús)r   ÚunitÚpending)r
   Ú
extensionsÚKeyErrorr   Z
build_namer   r   ÚitemsZ
add_metricÚlenZleasesZmetrics)
r	   Zsem_extZsemaphore_max_leases_familyZsemaphore_active_leases_familyZsemaphore_pending_leasesZsemaphore_acquire_totalZsemaphore_release_totalZ$semaphore_average_pending_lease_timeZsemaphore_nameZsemaphore_max_leasesr   r   r   Úcollect   s„    ûýýýû÷ ÿ ÿ ÿ ÿ ÿþz SemaphoreMetricCollector.collect)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r      s   r   N)Ú
__future__r   Zprometheus_client.corer   r   Zdistributed.http.prometheusr   r   r   r   r   r   Ú<module>   s   