o
    `jr                     @   sX   d dl mZmZ d dlmZ d dlmZ d dlmZ G dd dZ	G dd deeZ
d	S )
    )AnonMeasurableNamedMeasurable)AbstractCompoundStat)	Histogram)AbstractSampledStatc                   @   s   e Zd ZdZdZdS )BucketSizingr      N)__name__
__module____qualname__CONSTANTLINEAR r   r   ]/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/metrics/stats/percentiles.pyr      s    r   c                       sd   e Zd ZdZdZ		d fdd	Zdd Zd	d
 Zdd Zdd Z	dd Z
G dd dejZ  ZS )Percentilesz4A compound stat that reports one or more percentiles)_initial_value_samples_current_percentiles_buckets_bin_scheme        Nc                    s   t  d |p	g | _t|d | _|tjkr"t| j||| _	d S |tj
kr9|dkr/tdt| j|| _	d S td|f )Nr      z0Linear bucket sizing requires min_val to be 0.0.zUnknown bucket type: %s)super__init__r   intr   r   r   r   ConstantBinSchemer   r   
ValueErrorLinearBinScheme)selfsize_in_bytes	bucketingmax_valmin_valpercentiles	__class__r   r   r      s   



zPercentiles.__init__c                    sD   g } fdd} j D ]}||j}t|jt|}|| q|S )Nc                    s    fddS )Nc                    s    | | d S )Ng      Y@value)confignow)pctr   r   r   <lambda>%   s    z<Percentiles.stats.<locals>.make_measure_fn.<locals>.<lambda>r   r+   r   r-   r   make_measure_fn$      z*Percentiles.stats.<locals>.make_measure_fn)r   
percentiler   namer   append)r   measurablesr/   r1   
measure_fnstatr   r.   r   stats!   s   

zPercentiles.statsc           
      C   s   |  || tdd | jD }|dkrtdS d}t|}t| jD ]+}| jD ]%}t|| ju s3J |jj	}	||	| 7 }|| |krM| j
|    S q(q#tdS )Nc                 s   s    | ]}|j V  qd S N)event_count).0sampler   r   r   	<genexpr>0   s    z$Percentiles.value.<locals>.<genexpr>r   NaNinf)purge_obsolete_samplessumr   floatranger   typeHistogramSample	histogramcountsr   from_bin)
r   r)   r*   quantilecountsum_valquantbr;   histr   r   r   r(   .   s    
zPercentiles.valuec                 C   s   |  ||dS )Ng      ?r'   )r   samplesr)   r*   r   r   r   combine>   r0   zPercentiles.combinec                 C   s   t | j|S r8   )r   rD   r   )r   time_msr   r   r   
new_sampleA   r0   zPercentiles.new_samplec                 C   s"   t || ju s	J |j| d S r8   )rC   rD   rE   record)r   r;   r)   r(   rP   r   r   r   updateD   s   zPercentiles.updatec                       s   e Zd Z fddZ  ZS )zPercentiles.HistogramSamplec                    s   t  d| t|| _d S )Nr   )r   r   r   rE   )r   schemer*   r%   r   r   r   I   s   z$Percentiles.HistogramSample.__init__)r	   r
   r   r   __classcell__r   r   r%   r   rD   H   s    rD   )r   N)r	   r
   r   __doc__	__slots__r   r7   r(   rO   rQ   rS   r   SamplerD   rU   r   r   r%   r   r      s    r   N)kafka.metricsr   r   kafka.metrics.compound_statr   kafka.metrics.statsr    kafka.metrics.stats.sampled_statr   r   r   r   r   r   r   <module>   s    