
    /j8                         S SK r S SKJr  S SKJrJrJrJrJr  SSK	J
r
   " S S\5      r " S S	5      r " S
 S5      r " S S5      r\" SS9rg)    N)Lock)DictIterableListOptionalProtocol   )Metricc                   (    \ rS rSrS\\   4S jrSrg)	Collector   returnc                     g)zCollect metrics.N selfs    K/app/agent/.venv/lib/python3.13/site-packages/prometheus_client/registry.pycollectCollector.collect	   s        r   N__name__
__module____qualname____firstlineno__r   r
   r   __static_attributes__r   r   r   r   r      s    &) r   r   c                   (    \ rS rSrS\\   4S jrSrg)_EmptyCollector   r   c                     / $ Nr   r   s    r   r   _EmptyCollector.collect   s    	r   r   Nr   r   r   r   r   r      s    &) r   r   c                      \ rS rSrSr  SS\S\\\\4      S\4S jjr	S\
S	S4S
 jrS\
S	S4S jrS rS	\\   4S jrS\\   S	S4S jrS\\\\4      S	S4S jrS	\\\\4      4S jrS rSS\S\\\\4      S	\\   4S jjrSrg)CollectorRegistry   zMetric 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                     0 U l         0 U l        Xl        [        5       U l        0 U l        X0l        / U l        U R                  U5        g 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__CollectorRegistry.__init__   sE    ?A :<!+V
681Q.:<&[)r   	collectorr   c                    U R                      U R                  U5      n[        U R                  5      R	                  U5      nU(       a  [        SR                  U5      5      eU H  nXR                  U'   M     X R                  U'   U R                  (       a"  U(       d  U R                  R                  U5        SSS5        g! , (       d  f       g= f)z Add a collector to the registry.z.Duplicated timeseries in CollectorRegistry: {}N)r-   
_get_namessetr+   intersection
ValueErrorformatr*   r/   r0   append)r   r4   names
duplicatesnames        r   registerCollectorRegistry.register%   s    ZZOOI.ET667DDUKJ DKK"$% % 2;))$/ 27$$Y/55e..55i@ ZZs   B/C
Cc                     U R                      U R                  U    H  nU R                  U	 M     U R                  U	 SSS5        g! , (       d  f       g= f)z%Remove a collector from the registry.N)r-   r*   r+   )r   r4   r>   s      r   
unregisterCollectorRegistry.unregister4   sD    ZZ00;--d3 <((3 ZZs   1A
Ac                    Sn UR                   nU(       d  U R                  (       a  UR                  nU(       d  / $ / nSS// SQ/ SQ/ SQS/S.nU" 5        H_  nUR	                  UR
                  5        UR                  UR                  / 5       H!  nUR	                  UR
                  U-   5        M#     Ma     U$ ! [         a     Nf = f)	z@Get names of timeseries the collector produces and clashes with.N_total_created)_sum_countrF   )_bucketrG   rH   rF   )rI   _gsum_gcount_info)countersummary	histogramgaugehistograminfo)describeAttributeErrorr,   r   r;   r>   gettype)r   r4   	desc_funcresulttype_suffixesmetricsuffixs          r   r6   CollectorRegistry._get_names;   s    		!**I T00!))II *-5B=I
  kFMM&++&'++FKK<fkkF23 = " +  		s   B< <
C	C	c              #   >  #    SnSnU R                      [        R                  " U R                  5      nU R                  (       a  U R	                  5       nSSS5        U(       a  Uv   U H  nUR                  5        Sh  vN   M     g! , (       d  f       N;= f N7f)z3Yields metrics from the collectors in the registry.N)r-   copyr*   r.   _target_info_metricr   )r   
collectorstir4   s       r   r   CollectorRegistry.collectX   sy     
ZZ4#;#;<J  --/  H#I ((*** $ Z +s)   BAB
+B B	B

BBr<   RestrictedRegistryc                 .    [        U5      n[        X5      $ )zReturns 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.)r7   rb   )r   r<   s     r   restricted_registry%CollectorRegistry.restricted_registrye   s     E
!%..r   labelsc                 L   U R                      U(       aD  U R                  (       d  SU R                  ;   a  [        S5      e[	        5       U R                  S'   O-U R                  (       a  U R                  R                  SS 5        Xl        S S S 5        g ! , (       d  f       g = f)Nr'   z7CollectorRegistry already contains a target_info metric)r-   r.   r+   r9   r   pop)r   rf   s     r   r1   !CollectorRegistry.set_target_infor   sp    ZZ((]d>W>W-W$%^__;J;L))-8""))--mTB & ZZs   A?B
B#c                 h    U R                      U R                  sS S S 5        $ ! , (       d  f       g = fr!   )r-   r.   r   s    r   get_target_info!CollectorRegistry.get_target_info|   s    ZZ$$ ZZs   #
1c                 Z    [        SSS5      nUR                  SU R                  S5        U$ )NtargetzTarget metadatarQ   r'   r	   )r
   
add_sampler.   )r   ms     r   r^   %CollectorRegistry._target_info_metric   s,    8.7	]D$5$5q9r   r>   c                     Uc  0 nU R                  5        HH  nUR                   H5  nUR                  U:X  d  M  UR                  U:X  d  M'  UR                  s  s  $    MJ     g)znReturns the sample value, or None if not found.

This is inefficient, and intended only for use in unittests.
N)r   samplesr>   rf   value)r   r>   rf   rY   ss        r   get_sample_value"CollectorRegistry.get_sample_value   sP    
 >FllnF^^66T>ahh&&877N $ % r   )r,   r*   r0   r-   r+   r/   r.   )FNFr!   )r   r   r   r   __doc__boolr   r   strr2   r   r?   rB   r6   r   r
   r   rd   r1   rk   r^   floatrv   r   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                   @    \ rS rSrS\\   S\4S jrS\\   4S jr	Sr
g)	rb      r<   registryc                 0    [        U5      U l        X l        g r!   )r7   	_name_set	_registry)r   r<   r~   s      r   r2   RestrictedRegistry.__init__   s    U!r   r   c              #     #    [        U R                  R                  5      nS nU R                  R                     SU R                  ;   a5  U R                  R
                  (       a  U R                  R                  5       nU R                   HN  nUS:w  d  M  X0R                  R                  ;   d  M&  UR                  U R                  R                  U   5        MP     S S S 5        U(       a  Uv   U HB  nUR                  5        H+  nUR                  U R                  5      nU(       d  M'  Uv   M-     MD     g ! , (       d  f       Nb= f7f)Nr'   )r7   r   r0   r-   r   r.   r^   r+   addr   _restricted_metric)r   r_   target_info_metricr>   r4   rY   rp   s          r   r   RestrictedRegistry.collect   s     AAB
!^^!!.4>>3N3N%)^^%G%G%I"=(T^^5X5X-XNN4>>#F#Ft#LM ' " $$#I#++---dnn=1G . $ "!s0   8EAD:D:2,D:AE-E:
EE)r   r   N)r   r   r   r   r   rz   r$   r2   r
   r   r   r   r   r   rb   rb      s+    "hsm "7H "&) r   rb   T)r&   )r]   	threadingr   typingr   r   r   r   r   metrics_corer
   r   r   r$   rb   REGISTRYr   r   r   <module>r      sM      ; ;   
 
~ ~B . 40r   