
    Mh4                         d dl mZmZ d dlZd dlmZ d dlmZmZm	Z	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          Z ed          ZdS )    )ABCabstractmethodN)Lock)DictIterableListOptional   )Metricc                   6    e Zd Zedee         fd            ZdS )	Collectorreturnc                     d S N selfs    Z/var/www/html/test/jupyter/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   r   
   s>        &)    ^  r   r   c                   &    e Zd Zdee         fdZdS )_EmptyCollectorr   c                     g S r   r   r   s    r   r   z_EmptyCollector.collect   s    	r   N)r   r   r   r   r   r   r   r   r   r   r      s4        &)      r   r   c                   2   e Zd ZdZddedeeeef                  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_infoc                     i | _         i | _        || _        t                      | _        i | _        |                     |           d S r   )_collector_to_names_names_to_collectors_auto_describer   _lock_target_infoset_target_info)r   r   r    s      r   __init__zCollectorRegistry.__init__   sG    ?A :<!+VV
68[)))))r   	collectorr   c                 8   | j         5  |                     |          }t          | j                                      |          }|r"t          d                    |                    |D ]}|| j        |<   || 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)   names
duplicatesnames        r   registerzCollectorRegistry.register%   s    Z 		8 		8OOI..ET677DDUKKJ % DKK"$ $% % %  < <2;)$//27D$Y/		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8s   A:BBB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)   r2   s      r   
unregisterzCollectorRegistry.unregister2   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_countr8   )_bucketr9   r:   r8   )r;   _gsum_gcount_info)countersummary	histogramgaugehistograminfo)describeAttributeErrorr$   r   appendr2   gettype)r   r)   	desc_funcresulttype_suffixesmetricsuffixs          r   r+   zCollectorRegistry._get_names9   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.collectV   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r0   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']))

        Experimental.)r,   rS   )r   r0   s     r   restricted_registryz%CollectorRegistry.restricted_registryc   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#   r.   r   pop)r   rV   s     r   r'   z!CollectorRegistry.set_target_infop   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_infoz   st    Z 	% 	%$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s     c                 `    t          ddd          }|                    d| j        d           |S )NtargetzTarget metadatarC   r    r
   )r   
add_sampler&   )r   ms     r   rP   z%CollectorRegistry._target_info_metric~   s2    8.77	]D$5q999r   r2   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   samplesr2   rV   value)r   r2   rV   rL   ss        r   get_sample_valuez"CollectorRegistry.get_sample_value   si    
 >Fllnn 	# 	#F^ # #6T>>ah&&8&87NNNNN# tr   )FNr   )r   r   r   __doc__boolr	   r   strr(   r   r3   r5   r+   r   r   r   rU   r'   rZ   rP   floatrc   r   r   r   r   r      s        * *d *$sTWx.AY * * * *8) 8 8 8 8 8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 )rS   r0   registryc                 <    t          |          | _        || _        d S r   )r,   	_name_set	_registry)r   r0   ri   s      r   r(   zRestrictedRegistry.__init__   s    U!r   r   c              #     K   t                      }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,   rl   r%   rk   r&   rP   r#   addr   _restricted_metric)r   rQ   target_info_metricr2   r)   rL   r^   s          r   r   zRestrictedRegistry.collect   sw     UU
!^! 	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"%B"N)	r   r   r   r   rf   r   r(   r   r   r   r   r   rS   rS      s[        "hsm "7H " " " "&)      r   rS   T)r   )abcr   r   rO   	threadingr   typingr   r   r   r	   metrics_corer   r   r   r   rS   REGISTRYr   r   r   <module>rv      s6   # # # # # # # #        1 1 1 1 1 1 1 1 1 1 1 1                       i   
y y y y y	 y y yx       . 4000r   