
    i                         d dl Zd dlZd dlZd dlmZ g dZ ej                  d      Z G d d      Z G d d      Z	 G d	 d
      Z
 G d de      Z G d de
      Zy)    N)logger)	HistogramHistogramStorageCounterStoragezsearx.metricsc                       e Zd ZdZddZd Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zd
 Zd Zy)r   )_lock_size_sum
_quartiles_count_widthc                     t        j                         | _        || _        || _        dg|z  | _        d| _        d| _        y Nr   )	threadingLockr   r   r	   r   r   r
   )selfwidthsizes      %/root/searxng/searx/metrics/models.py__init__zHistogram.__init__   s9    ^^%

#*	    c                 B   t        || j                  z        }|dk  rd}|| j                  k\  r| j                  dz
  }| j                  5  | j                  |xx   dz  cc<   | xj
                  dz  c_        | xj                  |z  c_        d d d        y # 1 sw Y   y xY w)Nr      )intr   r	   r   r   r   r
   )r   valueqs      r   observezHistogram.observe   s    #$q5A

?

QAZZ 	OOA!#KK1KIII	 	 	s   
ABBc                 ,    t        | j                        S N)listr   r   s    r   	quartileszHistogram.quartiles*   s    DOO$$r   c                     | j                   S r   )r   r!   s    r   countzHistogram.count.   s    {{r   c                     | j                   S r   )r
   r!   s    r   sumzHistogram.sum2   s    yyr   c                     | j                   5  | j                  dk7  r"| j                  | j                  z  cd d d        S 	 d d d        y# 1 sw Y   y xY wr   )r   r   r
   r!   s    r   averagezHistogram.average6   sI    ZZ 	{{ayy4;;.	 	 	 	 	s   (A	A		Ac                     | j                   5  | j                  dkD  r<| j                  D cg c]  }t        |dz  | j                  z         c}cddd       S | j                  cddd       S c c}w # 1 sw Y   yxY w)zQuartile in percentager   d   N)r   r   r   r   )r   r   s     r   quartile_percentagezHistogram.quartile_percentage=   sj     ZZ 	#{{Q<@OOLqAGdkk12L	# 	# ??	# 	#L	# 	#s"   A3"A.A3A3.A33A<c           	         i }t        j                  d      }t        j                  | j                        }|j                         j                   }| j
                  5  | j                  dkD  rN| j                  D ]?  }t        |dz  | j                  z        }|dk7  r||t        t        |      |      <   ||z  }A d d d        |S # 1 sw Y   |S xY wNr   r*   )decimalDecimalr   as_tupleexponentr   r   r   r   roundfloat)r   resultxr   width_exponentyyps          r   quartile_percentage_mapz!Histogram.quartile_percentage_mapE   s    OOA,..*333ZZ 	{{Q AQWt{{23BQwBDuU1X~>?JA		 	 s   ACCc                 t   t        j                  d      }t        j                  | j                        }t        j                  | j                        dz  |z  }d}| j                  5  | j                  dkD  r-| j
                  D ]  }||z  }||k\  r|c cd d d        S ||z  }  d d d        y # 1 sw Y   y xY wr-   )r.   r/   r   r   r   r   )r   
percentager5   r   stop_at_value	sum_valuer7   s          r   r;   zHistogram.percentageU   s    OOA,4s:ZG	ZZ 	{{Q ANI M1 	 	 JA		 	 s   (,B.B..B7c                 j    dt        | j                        z   dz   t        | j                        z   dz   S )NzHistogram<avg: z	, count: >)strr(   r   r!   s    r   __repr__zHistogram.__repr__d   s/     3t||#44{BSEUUX[[[r   N)
      )__name__
__module____qualname___slots__r   r   propertyr"   r$   r&   r(   r+   r9   r;   rA    r   r   r   r      s    IH % %       # #  \r   r   c                   2    e Zd ZdZefdZd Zd Zd Zd Z	y)r   )measureshistogram_classc                 2    | j                          || _        y r   )clearrL   )r   rL   s     r   r   zHistogramStorage.__init__l   s    

.r   c                     i | _         y r   )rK   r!   s    r   rN   zHistogramStorage.clearp   s	    r   c                 H    | j                  ||      }|| j                  |<   |S r   )rL   rK   )r   r   r   argsmeasures        r   	configurezHistogramStorage.configures   s'    &&ud3%dr   c                 :    | j                   j                  |d       S r   )rK   getr   rQ   s     r   rU   zHistogramStorage.getx   s    }}  t,,r   c                     t        j                  d       t        | j                  j	                         dj
                        }|D ]5  }t        j                  ddj                  |      | j                  |          7 y )NzHistograms:/key
- %-60s %s|)r   debugsortedrK   keysjoinr   ksks      r   dumpzHistogramStorage.dump{   s]    ]#DMM&&(chh7 	FALLsxx{DMM!4DE	Fr   N)
rD   rE   rF   	__slots__r   r   rN   rS   rU   rd   rI   r   r   r   r   h   s$    -I'0 /
-Fr   r   c                   J    e Zd ZdZd Zd ZdefdZdefdZde	defdZ
d	 Zy
)r   )counterslockc                 V    t        j                         | _        | j                          y r   )r   r   rh   rN   r!   s    r   r   zCounterStorage.__init__   s    NN$	

r   c                 T    | j                   5  i | _        d d d        y # 1 sw Y   y xY wr   rh   rg   r!   s    r   rN   zCounterStorage.clear   s%    YY 	635DM	6 	6 	6s   'rQ   c                 d    | j                   5  d| j                  |<   d d d        y # 1 sw Y   y xY wr   rk   rV   s     r   rS   zCounterStorage.configure   s,    YY 	$"#DMM$	$ 	$ 	$s   &/c                      | j                   |   S r   )rg   rV   s     r   rU   zCounterStorage.get   s    }}T""r   r   c                 t    | j                   5  | j                  |xx   |z  cc<   d d d        y # 1 sw Y   y xY wr   rk   r   r   rQ   s      r   addzCounterStorage.add   s2    YY 	)MM$5(	) 	) 	)s   .7c                 B   | j                   5  t        | j                  j                         dj                        }d d d        t        j                  d       D ]5  }t        j                  ddj	                  |      | j                  |          7 y # 1 sw Y   YxY w)NrX   rY   z	Counters:r[   r\   )rh   r^   rg   r_   r`   r   r]   ra   s      r   rd   zCounterStorage.dump   sy    YY 	<**,#((;B	<[! 	FALLsxx{DMM!4DE	F	< 	<s   0BBN)rD   rE   rF   re   r   rN   r@   rS   rU   r   rp   rd   rI   r   r   r   r      sB    "I6$s $# #) )S )Fr   r   c                       e Zd Zd Zy)VoidHistogramc                      y r   rI   )r   r   s     r   r   zVoidHistogram.observe       r   N)rD   rE   rF   r   rI   r   r   rs   rs          r   rs   c                       e Zd Zd Zy)VoidCounterStoragec                      y r   rI   ro   s      r   rp   zVoidCounterStorage.add   ru   r   N)rD   rE   rF   rp   rI   r   r   rx   rx      rv   r   rx   )typingtr.   r   searxr   __all__getChildr   r   r   rs   rx   rI   r   r   <module>r      si        >		)T\ T\nF F4F F>I 
 r   