
    /j+                     (   S SK Jr  S SKJr  S SKJr  SSKJrJr  SSK	J
r
Jr  Sr Sr S	rS
rSrSrSrS rS r\S4S jr\4S\S	\S\4S jjr\4S\S	\S\4S jjrS\S	\S\\\/\4   S\4S jrS\S\S\4S jrS\S\S\4S jrSrSrS\S\4S jr g)     )StringIO)
maxunicode)Callable   )floatToGoStringparse_version)_is_valid_legacy_labelname_is_valid_legacy_metric_namez:application/openmetrics-text; version=1.0.0; charset=utf-8z:application/openmetrics-text; version=2.0.0; charset=utf-8escapingzallow-utf-8underscoresdotsvaluesc                 ^   U R                   S:X  a!  UR                  R                  S5      (       a  gU R                   S;   a!  UR                  R                  S5      (       a  gU R                   S;   a   UR                  R                  S5      (       d  UR                  U R                  :X  a  gg)Ncounter_totalTgaugehistogram_bucket	histogramF)typenameendswith)metricsamples     Y/app/agent/.venv/lib/python3.13/site-packages/prometheus_client/openmetrics/exposition.py_is_valid_exemplar_metricr      s    {{iFKK$8$8$B$B{{'(V[[-A-A)-L-L{{{#(<(<Y(G(G6;;Z`ZeZeKe    c                 V   [        X5      (       d  [        SU R                   S35      eSR                  SR	                  [        UR                  R                  5       5       VVs/ s HF  u  p4SR                  X4R                  SS5      R                  SS	5      R                  S
S5      5      PMH     snn5      5      nUR                  b2  SR                  U[        UR                  5      UR                  5      nU$ SR                  U[        UR                  5      5      nU$ s  snnf )zConstructs an exemplar string.zMetric z8 has exemplars, but is not a histogram bucket or counterz{{{0}}},{}="{}"\\\
\n"\"z # {} {} {}z # {} {})r   
ValueErrorr   formatjoinsortedlabelsitemsreplace	timestampr   value)r   r   exemplarkvr*   exemplarstrs          r   _compose_exemplar_stringr3   #   s   $V4476;;-/ghiichh x4467	97 
		yyu%--dE:BB3N
P7	9: ;F %#**HNN+
  !''HNN+

 	9s   &AD%z1.0.0c                    / nU R                  5        GH7  n UR                  nUR                  SR                  [	        XQ5      [        UR                  [        [        5      5      5        UR                  S[	        XQ5       SUR                   S35        UR                  (       a+  UR                  S[	        XQ5       SUR                   S35        UR                   GHg  nU[        :X  aG  [        UR                  5      (       d-  [	        UR                  U5      nUR                  (       a  US-  nOSnUR                  (       ax  [        UR                  R                  5       5      nUSR!                  U V	V
s/ s H3  u  pSR                  [#        X5      [        U
[        [        5      5      PM5     sn
n	5      -  nU(       a  S	U-   S
-   nUR$                  (       a  ['        XFUR$                  5      nOSnSnUR(                  b  SUR(                   3nUR*                  (       a  [-        U5      S:  a  GMZ  SnSnSnSnSnUR*                  (       Ga2  SnUR*                  R.                  UR*                  R0                  UR*                  R2                  UR*                  R4                  UR*                  R6                  /nUR*                  R8                  (       a  SR!                  UR*                  R8                   Vs/ s H  nUS    SUS    3PM     sn5      nSR!                  S UR*                  R:                   5       5      nUS-  nUR                  U5        US-  nUR                  U5        UR*                  R<                  (       a  SR!                  UR*                  R<                   Vs/ s H  nUS    SUS    3PM     sn5      nSR!                  S UR*                  R>                   5       5      nUS-  nUR                  U5        US-  nUR                  U5        US-  nUR                  " U6 nUR*                  R@                  (       a.  UR*                  R@                   H  n['        XFU5      nUU-  nM     SnUR*                  (       a  UnO"URB                  b  [E        URB                  5      nU[        :w  d  [        UR                  5      (       a@  UR                  SR                  [        UR                  U[        5      UUUU5      5        GMD  UR                  SR                  UUUU5      5        GMj     GM:     UR                  S5        SR!                  U5      RK                  S5      $ s  sn
n	f s  snf s  snf ! [F         a$  nURH                  =(       d    SU4-   Ul$        e SnAff = f)zHReturns the metrics from the registry in latest text format as a string.z# HELP {} {}
z# TYPE  r"   z# UNIT r    r   {}N)r   r   r   z;{{count:{},sum:{},schema:{},zero_threshold:{},zero_count:{}r   :   c              3   8   #    U  H  n[        U5      v   M     g 7fN)str).0nds     r   	<genexpr>"generate_latest.<locals>.<genexpr>w   s     2cEbr3r77Ebs   z,negative_spans:[{}]z,negative_deltas:[{}]c              3   &   #    U  H  o v   M	     g 7fr<    )r>   pds     r   r@   rA      s     2cEbrT7Ebs   z,positive_spans:[{}]z,positive_deltas:[{}]z}}z{}{} {}{}{}
z
{} {}{}{}
)r6   z# EOF
zutf-8)&collectr   appendr'   escape_metric_name_escapedocumentation	ALLOWUTF8_is_legacy_labelname_runer   unitsamplesr
   r*   r)   r+   r(   escape_label_namer/   r3   r-   native_histogramr   count_value	sum_valueschemazero_threshold
zero_count	neg_spans
neg_deltas	pos_spans
pos_deltasnh_exemplarsr.   r   	Exceptionargsencode)registryr   versionoutputr   mnameslabelstrr+   r0   r1   r2   r-   rO   negative_spansnegative_deltaspositive_spanspositive_deltasnh_sample_templater[   nspsnh_exnh_exemplarstrr.   	exceptions                             r   generate_latestrm   :   s   F""$i	KKEMM*11"53WV=Q=QS\^w5xz {MMG$6u$G#H&++VXYZ{{(:5(K'LAfkk]Z\]^^^y(1Maff1U1U1!&&(CHxx C!H88"188>>#34E )./(- #))-a:GAyRk<ln(-/!0 0H "X~3H::":6ajj"QK"$K	;;*"#AKK= 1I %%-*@9*L#% !#"$!#"$%%%)f& **66**44**11**99**55D ))33),PQPbPbPlPl2mPl"beWAbeW3EPl2m)n*-((2cQEWEWEbEb2c*c*.DD*N3*.EE*O4 ))33),PQPbPbPlPl2mPl"beWAbeW3EPl2m)n*-((2cQEWEWEbEb2c*c*.DD*N3*.EE*O4 '$.& (:'@'@$'G$))66%&%7%7%D%DE-EfQV-WN'>9K &E %%,EWW(+AGG4E	).J166.R.RMM/"8"82KL !##  MM-"6"6 !#	# u $ %X MM)776?!!'**s/J 3n 3nL  	'nn5&BIN	sE   E"V::V 4EV?VBV3V
F V V
V>V99V>ra   returnc                    [        U 5      S:X  a  U $ U[        :X  a?  [        U 5      (       d  SR                  [	        X[
        5      5      $ [	        X[
        5      $ U[        :X  a"  [        U 5      (       a  U $ [	        X[
        5      $ U[        :X  a  [	        X[
        5      $ U[        :X  a"  [        U 5      (       a  U $ [	        X[
        5      $ U $ )ztEscapes the metric name and puts it in quotes iff the name does not
conform to the legacy Prometheus character set.
r   "{}")	lenrJ   r
   r'   rH   _is_legacy_metric_runeUNDERSCORESDOTSVALUESra   r   s     r   rG   rG      s     1v{9+A..==6L!MNNq$:;;	[	 '**Hq$:;;	T	q$:;;	V	'**Hq$:;;Hr   c                    [        U 5      S:X  a  U $ U[        :X  a?  [        U 5      (       d  SR                  [	        X[
        5      5      $ [	        X[
        5      $ U[        :X  a"  [        U 5      (       a  U $ [	        X[
        5      $ U[        :X  a  [	        X[
        5      $ U[        :X  a"  [        U 5      (       a  U $ [	        X[
        5      $ U $ )zsEscapes the label name and puts it in quotes iff the name does not
conform to the legacy Prometheus character set.
r   rp   )	rq   rJ   r	   r'   rH   rK   rs   rt   ru   rv   s     r   rN   rN      s     1v{9)!,,==6O!PQQq$=>>	[	 %a((Hq$=>>	T	q$=>>	V	%a((Hq$=>>Hr   valid_rune_fnc                 \   U[         :X  a2  U R                  SS5      R                  SS5      R                  SS5      $ U[        :X  a_  [        5       n[	        U 5       H6  u  pEU" XT5      (       a  UR                  U5        M%  UR                  S5        M8     UR                  5       $ U[        :X  a  [        5       n[	        U 5       Hh  u  pEUS:X  a  UR                  S5        M  US	:X  a  UR                  S
5        M7  U" XT5      (       a  UR                  U5        MW  UR                  S5        Mj     UR                  5       $ U[        :X  a  [        5       nUR                  S5        [	        U 5       H  u  pEUS:X  a  UR                  S5        M  U" XT5      (       a  UR                  U5        M>  [        U5      (       d  UR                  S5        Ma  UR                  S5        UR                  [        [        U5      S5      5        UR                  S5        M     UR                  5       $ U $ )zPerforms backslash escaping on backslash, newline, and double-quote characters.

valid_rune_fn takes the input character and its index in the containing string.r    r!   r"   r#   r$   r%   ___._dot_U___FFFD_x)rJ   r,   rs   r   	enumeratewritegetvaluert   ru   _is_valid_utf8r'   ord)ra   r   rx   escapedibs         r   rH   rH      s    9yyu%--dE:BB3NN	[	 *aLDAQ""a c"	 !
 !!	T	*aLDACxd#cg&q$$a d# ! !!	V	*eaLDACxd#q$$a #A&&h'c"fSVS12c" ! !!Hr   r   r   c                 0    [        X5      =(       d    U S:H  $ )Nr9   )rK   r   r   s     r   rr   rr     s    $Q*6a3h6r   c                     [        U 5      S:w  a  [        S5      eSU s=:*  =(       a    S:*  Os  =(       dI    SU s=:*  =(       a    S:*  Os  =(       d-    U S:H  =(       d!    SU s=:*  =(       a    S	:*  Os  =(       a    US
:  $ )Nr:   z%Input 'b' must be a single character.azAZrz   09r   )rq   r&   r   s     r   rK   rK     sf    
1v{@AA	S 	'1OOO	'H	' 1OOO%A	r   i   i  c                     S[        U 5      s=::  a  [        :  a   g  [        [        U 5      s=:  a  [        ::  a   g  gg)Nr   TF)r   _SURROGATE_MIN_SURROGATE_MAXr   )ra   s    r   r   r     s7    CF#^# $A,*, -r   N)!ior   sysr   typingr   utilsr   r   
validationr	   r
   CONTENT_TYPE_LATESTCONTENT_TYPE_LATEST_2_0ESCAPING_HEADER_TAGrJ   rs   rt   ru   r   r3   rm   r=   rG   rN   intboolrH   rr   rK   r   r   r   rC   r   r   <module>r      s#      2 S  <V  5   		. (3G p+f 0; #  s . /:   c .)s )c )(C:t;K2L )QT )X7c 7c 7d 7    c d r   