
    -j8                         d dl Z d dlmZ d dlmZmZmZmZmZ ddl	m
Z
  G d de          Z G d d	          Z G d
 d          Z G d d          Z ed          ZdS )    N)Lock)DictIterableListOptionalProtocol   )Metricc                   &    e Zd Zdee         fdZdS )	Collectorreturnc                     dS )zCollect metrics.N selfs    n/lsinfo/ai/hellotax_ai/training_center/backend/venv/lib/python3.11/site-packages/prometheus_client/registry.pycollectzCollector.collect	   s          N__name__
__module____qualname__r   r
   r   r   r   r   r   r      s4        &)      r   r   c                   &    e Zd Zdee         fdZdS )_EmptyCollectorr   c                     g S Nr   r   s    r   r   z_EmptyCollector.collect   s    	r   Nr   r   r   r   r   r      s4        &)      r   r   c                   :   e Zd ZdZ	 	 ddedeeeef                  defdZde	d	dfd
Z
de	d	dfdZd Zd	ee         fdZdee         d	dfdZdeeeef                  d	dfdZd	eeeef                  fdZd Zddedeeeef                  d	ee         fdZdS )CollectorRegistryzMetric collector registry.

    Collectors must have a no-argument method 'collect' that returns a list of
    Metric objects. The returned metrics should be consistent with the Prometheus
    exposition formats.
    FNauto_describetarget_info support_collectors_without_namesc                     i | _         i | _        || _        t                      | _        i | _        || _        g | _        |                     |           d S r   )	_collector_to_names_names_to_collectors_auto_describer   _lock_target_info!_support_collectors_without_names_collectors_without_namesset_target_info)r   r   r    r!   s       r   __init__zCollectorRegistry.__init__   sW    ?A :<!+VV
681Q.:<&[)))))r   	collectorr   c                 ~   | j         5  |                     |          }t          | j                                      |          }|r"t          d                    |                    |D ]}|| j        |<   || j        |<   | j        r|s| j	        
                    |           ddd           dS # 1 swxY w Y   dS )z Add a collector to the registry.z.Duplicated timeseries in CollectorRegistry: {}N)r&   
_get_namessetr$   intersection
ValueErrorformatr#   r(   r)   append)r   r,   names
duplicatesnames        r   registerzCollectorRegistry.register%   s:   Z 	A 	AOOI..ET677DDUKKJ % DKK"$ $% % %  < <2;)$//27D$Y/5 Ae A.55i@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   BB22B69B6c                     | j         5  | j        |         D ]
}| j        |= | j        |= ddd           dS # 1 swxY w Y   dS )z%Remove a collector from the registry.N)r&   r#   r$   )r   r,   r6   s      r   
unregisterzCollectorRegistry.unregister4   s    Z 	4 	40; 4 4-d33(3	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   !6::c                 N   d}	 |j         }n# t          $ r Y nw xY w|s| j        r|j        }|sg S g }ddgg dg dg ddgd} |            D ]W}|                    |j                   |                    |j        g           D ]}|                    |j        |z               X|S )	z@Get names of timeseries the collector produces and clashes with.N_total_created)_sum_countr<   )_bucketr=   r>   r<   )r?   _gsum_gcount_info)countersummary	histogramgaugehistograminfo)describeAttributeErrorr%   r   r3   r6   gettype)r   r,   	desc_funcresulttype_suffixesmetricsuffixs          r   r.   zCollectorRegistry._get_names;   s
   		!*II 	 	 	D	  	*T0 	*!)I 	I *-555BBB===I
 
  ikk 	4 	4FMM&+&&&'++FK<< 4 4fkF233334s    
c              #     K   d}d}| j         5  t          j        | j                  }| j        r|                                 }ddd           n# 1 swxY w Y   |r|V  |D ]}|                                E d{V  dS )z3Yields metrics from the collectors in the registry.N)r&   copyr#   r'   _target_info_metricr   )r   
collectorstir,   s       r   r   zCollectorRegistry.collectX   s      
Z 	0 	04#;<<J  0--//	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0  	HHH# 	+ 	+I ((**********	+ 	+s   5AAAr4   RestrictedRegistryc                 @    t          |          }t          ||           S )a  Returns object that only collects some metrics.

        Returns an object which upon collect() will return
        only samples with the given names.

        Intended usage is:
            generate_latest(REGISTRY.restricted_registry(['a_timeseries']), escaping)

        Experimental.)r/   rV   )r   r4   s     r   restricted_registryz%CollectorRegistry.restricted_registrye   s     E

!%...r   labelsc                    | j         5  |r6| j        sd| j        v rt          d          t	                      | j        d<   n"| j        r| j                            dd            || _        d d d            d S # 1 swxY w Y   d S )Nr    z7CollectorRegistry already contains a target_info metric)r&   r'   r$   r1   r   pop)r   rY   s     r   r*   z!CollectorRegistry.set_target_infor   s    Z 	' 	' C( `]d>W-W-W$%^___;J;L;L)-88" C)--mTBBB &D	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A"A77A;>A;c                 R    | j         5  | j        cd d d            S # 1 swxY w Y   d S r   )r&   r'   r   s    r   get_target_infoz!CollectorRegistry.get_target_info|   st    Z 	% 	%$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s     c                 `    t          ddd          }|                    d| j        d           |S )NtargetzTarget metadatarG   r    r	   )r
   
add_sampler'   )r   ms     r   rS   z%CollectorRegistry._target_info_metric   s2    8.77	]D$5q999r   r6   c                     |i }|                                  D ]-}|j        D ]#}|j        |k    r|j        |k    r|j        c c S $.dS )z~Returns the sample value, or None if not found.

        This is inefficient, and intended only for use in unittests.
        N)r   samplesr6   rY   value)r   r6   rY   rO   ss        r   get_sample_valuez"CollectorRegistry.get_sample_value   si    
 >Fllnn 	# 	#F^ # #6T>>ah&&8&87NNNNN# tr   )FNFr   )r   r   r   __doc__boolr   r   strr+   r   r7   r9   r.   r   r
   r   rX   r*   r]   rS   floatrf   r   r   r   r   r      s         ]a:?	* 	*d 	*$sTWx.AY 	*37	* 	* 	* 	*A) A A A A A4I 4$ 4 4 4 4  :+&) + + + +/# /;O / / / /'htCH~&> '4 ' ' ' '%$sCx.!9 % % % %  
 S (4S>2J V^_dVe      r   r   c                   B    e Zd Zdee         defdZdee         fdZdS )rV   r4   registryc                 <    t          |          | _        || _        d S r   )r/   	_name_set	_registry)r   r4   rl   s      r   r+   zRestrictedRegistry.__init__   s    U!r   r   c              #     K   t          | j        j                  }d }| j        j        5  d| j        v r%| j        j        r| j                                        }| j        D ];}|dk    r3|| j        j        v r%|                    | j        j        |                    <	 d d d            n# 1 swxY w Y   |r|V  |D ]9}|	                                D ]"}|
                    | j                  }|r|V  #:d S )Nr    )r/   ro   r)   r&   rn   r'   rS   r$   addr   _restricted_metric)r   rT   target_info_metricr6   r,   rO   ra   s          r   r   zRestrictedRegistry.collect   s     ABB
!^! 	N 	N..4>3N.%)^%G%G%I%I" N N=((TT^5X-X-XNN4>#Ft#LMMMN	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N  	%$$$$# 	 	I#++--  --dn== GGG	 	s   A2B))B-0B-N)	r   r   r   r   ri   r   r+   r
   r   r   r   r   rV   rV      s[        "hsm "7H " " " "&)      r   rV   T)r   )rR   	threadingr   typingr   r   r   r   r   metrics_corer
   r   r   r   rV   REGISTRYr   r   r   <module>rx      s           ; ; ; ; ; ; ; ; ; ; ; ; ; ;                   
       
~ ~ ~ ~ ~ ~ ~ ~B       . 4000r   