
    9Yfb                         d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	  G d de
      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de
      Zy)z
Metric roll-up classes.
    )defaultdictN)iternext)
MetricTypec                       e Zd ZdZd Zd Zy)Metricz
    A base metric class that accepts points, slices them into time intervals
    and performs roll-ups within those intervals.
    c                     t               )z" Add a point to the given metric. NotImplementedErrorselfvalues     [/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/datadog/threadstats/metrics.py	add_pointzMetric.add_point       !##    c                     t               ). Flush all metrics up to the given timestamp. r	   r   	timestampintervals      r   flushzMetric.flush   r   r   N)__name__
__module____qualname____doc__r   r    r   r   r   r      s    
$$r   r   c                   &    e Zd ZdZdZd Zd Zd Zy)Setz A set metric. gc                 L    || _         || _        || _        t               | _        y N)nametagshostsetr   r"   r#   r$   s       r   __init__zSet.__init__$   s     			5r   c                 :    | j                   j                  |       y r!   )r%   addr   s     r   r   zSet.add_point*   s    Ur   c                     |t        | j                        | j                  | j                  | j                  t
        j                  |fgS r!   )lenr%   r"   r#   r$   r   Gauger   s      r   r   z	Set.flush-   s5    CM499diiJL\L\^fghhr   Nr   r   r   r   	stats_tagr'   r   r   r   r   r   r   r      s    Iir   r   c                   &    e Zd ZdZdZd Zd Zd Zy)r,   z A gauge metric. r   c                 <    || _         || _        || _        d | _        y r!   r"   r#   r$   r   r&   s       r   r'   zGauge.__init__6   s    			
r   c                     || _         y r!   )r   r   s     r   r   zGauge.add_point<   s	    
r   c                     || j                   | j                  | j                  | j                  t        j
                  |fgS r!   )r   r"   r#   r$   r   r,   r   s      r   r   zGauge.flush?   s1    DJJ		499diiIYIY[cdeer   Nr-   r   r   r   r,   r,   1   s    Ifr   r,   c                   &    e Zd ZdZdZd Zd Zd Zy)Counterz' A metric that tracks a counter value. cc                 <    || _         || _        || _        g | _        y r!   )r"   r#   r$   countr&   s       r   r'   zCounter.__init__H       			
r   c                 :    | j                   j                  |       y r!   )r8   appendr   s     r   r   zCounter.add_pointN       

% r   c                     t        | j                  d      }||t        |      z  | j                  | j                  | j
                  t        j                  |fgS Nr   )sumr8   floatr"   r#   r$   r   Rate)r   r   r   r8   s       r   r   zCounter.flushQ   sG    DJJ"EE(O3TYY		499V`VeVegopqqr   Nr-   r   r   r   r5   r5   C   s    1I!rr   r5   c                   &    e Zd ZdZdZd Zd Zd Zy)Distributionz A distribution metric. dc                 <    || _         || _        || _        g | _        y r!   r1   r&   s       r   r'   zDistribution.__init__[   r9   r   c                 :    | j                   j                  |       y r!   )r   r;   r   s     r   r   zDistribution.add_pointa   r<   r   c                     || j                   | j                  | j                  | j                  t        j
                  |fgS r!   )r   r"   r#   r$   r   rC   r   s      r   r   zDistribution.flushd   s1    DJJ		499diiI`I`bjkllr   Nr-   r   r   r   rC   rC   V   s    "I!mr   rC   c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)	Histogramz A histogram metric. hc                    || _         || _        || _        t        d      | _        t        d      | _        g | _        t        j                         | _	        t        | j                        | _        d| _        g | _        g d| _        y )Nz-infinfi  )g      ?g333333?gffffff?gGz?)r"   r#   r$   r@   maxminr?   	itertoolsr8   iter_counterr   sample_sizesamplespercentilesr&   s       r   r'   zHistogram.__init__m   sl    			=<%OO-d//0
3r   c                    | j                   |kD  r| j                   n|| _         | j                  |k  r| j                  n|| _        | j                  j                  |       | j                  | j
                  k  r| j                  j                  |       n-|| j                  t        j                  d| j
                        <   t        | j                        | _        y r>   )rM   rN   r?   r;   r8   rQ   rR   random	randranger   rP   r   s     r   r   zHistogram.add_pointz   s    #xx%/488U#xx%/488U::(((LL&BGDLL))!T-=-=>?d//0
r   c           
         | j                   sg S || j                  d| j                  z  | j                  | j                  t
        j                  |f|| j                  d| j                  z  | j                  | j                  t
        j                  |f|| j                   t        |      z  d| j                  z  | j                  | j                  t
        j                  |f|| j                         d| j                  z  | j                  | j                  t
        j                  |fg}t        | j                        }| j                  j                          | j                  D ]  }| j                  t        t!        ||z  dz
                 }| j                  dt        |dz        d}|j#                  |||| j                  | j                  t
        j                  |f        |S )	Nz%s.minz%s.maxz%s.countz%s.avg   .d   
percentile)r8   rN   r"   r#   r$   r   r,   rM   r@   rA   averager+   rR   sortrS   introundr;   )r   r   r   metricslengthpvalr"   s           r   r   zHistogram.flush   s~   zzI(TYY"6		499jN^N^`hi(TYY"6		499jN^N^`hi

U8_,TYY&				 499(<diiT^TdTdfno
 T\\"!! 	eA,,s5Va#89:C(,		3q3w<@DNNIsD$))TYY
HXHXZbcd	e r   c                 ^    t        | j                   d      }t        |      | j                  z  S r>   )r?   r@   r8   )r   sum_metricss     r   r\   zHistogram.average   s&    $((A&[!DJJ..r   N)	r   r   r   r   r.   r'   r   r   r\   r   r   r   rI   rI   h   s    I412/r   rI   c                       e Zd ZdZdZy)Timingz^
    A timing metric.
    Inherit from Histogram to workaround and support it in API mode
    msN)r   r   r   r   r.   r   r   r   rg   rg      s    
 Ir   rg   c                   &    e Zd ZdZddZddZd Zy)MetricsAggregatorzK
    A small class to handle the roll-ups of multiple metrics at once.
    c                 f    t        j                         | _        t        d       | _        || _        y )Nc                      i S r!   r   r   r   r   <lambda>z,MetricsAggregator.__init__.<locals>.<lambda>   s    B r   )	threadingRLock_lockr   _metrics_roll_up_interval)r   roll_up_intervals     r   r'   zMetricsAggregator.__init__   s$    __&
#J/!1r   Nc                 8   ||| j                   z  z
  }|||rt        t        |            nd f}	| j                  5  |	| j                  |   vr ||||      | j                  |   |	<   | j                  |   |	   j                  |       d d d        y # 1 sw Y   y xY wr!   )rr   tuplesortedrp   rq   r   )
r   metricr#   r   r   metric_classsample_rater$   r   keys
             r   r   zMetricsAggregator.add_point   s    y4+A+AAAtDU6$<0dCZZ 	:$--11/;FD$/Oh',MM(#C(2259	: 	: 	:s   ABBc                    |t        d      k(  rt        d      }n||| j                  z  z
  }| j                  5  | j                  j	                         D cg c]
  }||k  s	| }}g }|D ]X  }t        | j                  j                  |      j                               D ]!  }||j                  || j                        z  }# Z 	 ddd       |S c c}w # 1 sw Y   S xY w)r   rL   N)	r@   rr   rp   rq   keyslistpopvaluesr   )r   r   r   ipast_intervalsr`   ms          r   r   zMetricsAggregator.flush   s    e$U|H 9t/E/E#EEHZZ 	B)-););)=NAXaNNNG# Bdmm//299;< BAqwwq$*@*@AAGBB	B  O	B s$   C
C!C%A!CCC )
   )rX   N)r   r   r   r   r'   r   r   r   r   r   rj   rj      s    2
:r   rj   )r   collectionsr   rU   rO   rn   datadog.util.compatr   datadog.threadstats.constantsr   objectr   r   r,   r5   rC   rI   rg   rj   r   r   r   <module>r      s    $    ( 4$V $i& i$fF f$rf r&m6 m$7/ 7/tY    r   