
    Ri8                         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y)    N)Lock)DictIterableListOptionalProtocol   )Metricc                       e Zd Zdee   fdZy)	Collectorreturnc                      y)zCollect metrics.N selfs    /home/jay/workspace/.worktrees/task-2117-dev1/scripts/.codegraph-venv/lib/python3.12/site-packages/prometheus_client/registry.pycollectzCollector.collect	   s        N__name__
__module____qualname__r   r
   r   r   r   r   r   r      s    &) r   r   c                       e Zd Zdee   fdZy)_EmptyCollectorr   c                     g S Nr   r   s    r   r   z_EmptyCollector.collect   s    	r   Nr   r   r   r   r   r      s    &) 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y)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.
    Nauto_describetarget_info support_collectors_without_namesc                     i | _         i | _        || _        t               | _        i | _        || _        g | _        | j                  |       y 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__   sI    ?A :<!+V
681Q.:<&[)r   	collectorr   c                    | j                   5  | j                  |      }t        | j                        j	                  |      }|rt        dj                  |            |D ]  }|| j                  |<    || j                  |<   | j                  r|s| j                  j                  |       ddd       y# 1 sw Y   yxY w)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    ZZ 	AOOI.ET667DDUKJ DKK"$% %  <2;))$/<27D$$Y/55e..55i@	A 	A 	As   B B66B?c                     | j                   5  | j                  |   D ]  }| j                  |=  | j                  |= ddd       y# 1 sw Y   yxY w)z%Remove a collector from the registry.N)r&   r#   r$   )r   r,   r6   s      r   
unregisterzCollectorRegistry.unregister4   sT    ZZ 	400; 4--d34((3	4 	4 	4s   /AAc                 p   d}	 |j                   }|s| j                  r|j                  }|sg S g }ddgg dg dg ddgd} |       D ]\  }|j	                  |j
                         |j                  |j                  g       D ]   }|j	                  |j
                  |z          " ^ |S # t        $ r Y w xY w)	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    		!**I T00!))II *-5B=I
  k 	4FMM&++&'++FKK< 4fkkF234	4 +  		s   B) )	B54B5c              #     K   d}d}| j                   5  t        j                  | j                        }| j                  r| j	                         }ddd       |r| |D ]  }|j                         E d{     y# 1 sw Y   /xY w7 w)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     
ZZ 	04#;#;<J  --/	0 H# 	+I ((***	+	0 	0 +s(   B<A=&B5B	6B=BBr4   RestrictedRegistryc                 0    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  |r=| j                  sd| j                  v rt        d      t	               | j                  d<   n(| j                  r| j                  j                  dd        || _        d d d        y # 1 sw Y   y xY w)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}    ZZ 	'((]d>W>W-W$%^__;J;L))-8""))--mTB &D	' 	' 	's   A/BBc                 ^    | j                   5  | j                  cd d d        S # 1 sw Y   y xY wr   )r&   r'   r   s    r   get_target_infoz!CollectorRegistry.get_target_info|   s'    ZZ 	%$$	% 	% 	%s   #,c                 Z    t        ddd      }|j                  d| j                  d       |S )NtargetzTarget metadatarG   r    r	   )r
   
add_sampler'   )r   ms     r   rS   z%CollectorRegistry._target_info_metric   s,    8.7	]D$5$5q9r   r6   c                     |i }| j                         D ]B  }|j                  D ]1  }|j                  |k(  s|j                  |k(  s#|j                  c c S  D y)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   sZ    
 >Flln 	#F^^ #66T>ahh&&877N#	# r   )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4I 4$ 4:+&) +/# /;O /'htCH~&> '4 '%$sCx.!9 %
S (4S>2J V^_dVe r   r   c                   4    e Zd Zdee   defdZdee   fdZy)rV   r4   registryc                 2    t        |      | _        || _        y r   )r/   	_name_set	_registry)r   r4   rl   s      r   r+   zRestrictedRegistry.__init__   s    U!r   r   c              #   Z  K   t        | j                  j                        }d }| j                  j                  5  d| j                  v r0| j                  j
                  r| j                  j                         }| j                  D ]I  }|dk7  s	|| j                  j                  v s"|j                  | j                  j                  |          K 	 d d d        |r| |D ]9  }|j                         D ]$  }|j                  | j                        }|s!| & ; y # 1 sw Y   NxY ww)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AB
!^^!! 	N.4>>3N3N%)^^%G%G%I" N=(TT^^5X5X-XNN4>>#F#Ft#LMN	N $$# 	I#++- --dnn=G		N 	Ns0   8D+ADD'*DAD+	D+D($D+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      sM      ; ;   
 
~ ~B . 40r   