
    ei+                        d dl mZ d dlmZ d dlmZ ddlmZmZ ddl	m
Z
mZ dZ	 dZ	 d	Zd
ZdZdZdZd Zd ZedfdZefded	edefdZefded	edefdZded	edeeegef   defdZdededefdZdededefdZdZdZdedefdZ y)     )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                 4   | j                   dk(  r|j                  j                  d      ry| j                   dv r|j                  j                  d      ry| j                   dv r|j                  j                  d      s|j                  | j                  k(  ryy)Ncounter_totalTgaugehistogram_bucket	histogramF)typenameendswith)metricsamples     j/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/prometheus_client/openmetrics/exposition.py_is_valid_exemplar_metricr      sx    {{iFKK$8$8$B{{'(V[[-A-A)-L{{{#(<(<Y(G6;;Z`ZeZeKe    c                 J   t        | |      st        d| j                   d      dj                  dj	                  t        |j                  j                               D cg c]G  \  }}dj                  ||j                  dd      j                  dd	      j                  d
d            I c}}            }|j                  2dj                  |t        |j                        |j                        }|S dj                  |t        |j                              }|S c c}}w )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   $VV476;;-/ghiichh x4467	91 
		qyyu%--dE:BB3N
P 	9: ;F %#**HNN+
  !''HNN+

 	9s   "ADz1.0.0c                 
   g }| j                         D ]  }	 |j                  }|j                  dj                  t	        ||      t        |j                  t        t                           |j                  dt	        ||       d|j                   d       |j                  r,|j                  dt	        ||       d|j                   d       |j                  D ]  }|t        k(  r=t        |j                        s(t	        |j                  |      }|j                  r|dz  }nd}|j                  rwt        |j                  j                               }|dj!                  |D 	
cg c]4  \  }	}
dj                  t#        |	|      t        |
t        t                    6 c}
}	      z  }|rd	|z   d
z   }|j$                  rt'        |||j$                        }nd}d}|j(                  d|j(                   }|j*                  rt-        |      dk  r8d}d}d}d}d}|j*                  rd}|j*                  j.                  |j*                  j0                  |j*                  j2                  |j*                  j4                  |j*                  j6                  g}|j*                  j8                  rdj!                  |j*                  j8                  D cg c]  }|d    d|d     c}      }dj!                  d |j*                  j:                  D              }|dz  }|j                  |       |dz  }|j                  |       |j*                  j<                  rdj!                  |j*                  j<                  D cg c]  }|d    d|d     c}      }dj!                  d |j*                  j>                  D              }|dz  }|j                  |       |dz  }|j                  |       |dz  } |j                  | }|j*                  j@                  r-|j*                  j@                  D ]  }t'        |||      }||z  } d}|j*                  r|}n!|jB                  tE        |jB                        }|t        k7  st        |j                        r?|j                  dj                  t        |j                  |t              ||||             |j                  dj                  ||||               |j                  d       dj!                  |      jK                  d      S c c}
}	w c c}w c c}w # tF        $ r}|jH                  xs d|fz   |_$         d}~ww xY w)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   2   K   | ]  }t        |        y wN)str).0nds     r   	<genexpr>z"generate_latest.<locals>.<genexpr>w   s     2cr3r72cs   z,negative_spans:[{}]z,negative_deltas:[{}]c              3   "   K   | ]  }|  	 y wr<    )r>   pds     r   r@   z"generate_latest.<locals>.<genexpr>   s     2crbT72cs   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-   rN   negative_spansnegative_deltaspositive_spanspositive_deltasnh_sample_templaterZ   nspsnh_exnh_exemplarstrr.   	exceptions                             r   generate_latestrl   :   s   F""$ ji	KKEMM*11"5(3WV=Q=QS\^w5xz {MMG$6uh$G#H&++VXYZ{{(:5((K'LAfkk]Z\]^^^ _y(1Maff1U1!&&(CHxx C!H88"188>>#34E )./ $1 #))-a:GAyRk<ln /!0 0H "X~3H::":61ajj"QK"$K	;;*"#AKK= 1I %%-*@9*L#% !#"$!#"$%%)f& **66**44**11**99**55D ))33),PQPbPbPlPl2m"beWAbeW3E2m)n*-((2cQEWEWEbEb2c*c*.DD*N3*.EE*O4 ))33),PQPbPbPlPl2m"beWAbeW3E2m)n*-((2cQEWEWEbEb2c*c*.DD*N3*.EE*O4 '$.& (A'9'@'@$'G$))66%&%7%7%D%D :E-EfaQV-WN'>9K: %%,EWW(+AGG4E	).J166.RMM/"8"82KL !##  MM-"6"6 !#	# u_jX MM)776?!!'**s/J 3n 3nL  	'nn5&BIN	sE   EU (9T0!D0U T6%BU =T;E+U 0U  	U(	U##U(r`   returnc                    t        |       dk(  r| S |t        k(  r<t        |       s dj                  t	        | |t
                    S t	        | |t
              S |t        k(  rt        |       r| S t	        | |t
              S |t        k(  rt	        | |t
              S |t        k(  rt        |       r| S t	        | |t
              S | S )z|Escapes the metric name and puts it in quotes iff the name does not
    conform to the legacy Prometheus character set.
    r   "{}")	lenrI   r
   r'   rG   _is_legacy_metric_runeUNDERSCORESDOTSVALUESr`   r   s     r   rF   rF      s     1v{9+A.==H6L!MNNq($:;;	[	 '*Hq($:;;	T	q($:;;	V	'*Hq($:;;Hr   c                    t        |       dk(  r| S |t        k(  r<t        |       s dj                  t	        | |t
                    S t	        | |t
              S |t        k(  rt        |       r| S t	        | |t
              S |t        k(  rt	        | |t
              S |t        k(  rt        |       r| S t	        | |t
              S | S )z{Escapes the label name and puts it in quotes iff the name does not
    conform to the legacy Prometheus character set.
    r   ro   )	rp   rI   r	   r'   rG   rJ   rr   rs   rt   ru   s     r   rM   rM      s     1v{9)!,==H6O!PQQq($=>>	[	 %a(Hq($=>>	T	q($=>>	V	%a(Hq($=>>Hr   valid_rune_fnc                    |t         k(  r2| j                  dd      j                  dd      j                  dd      S |t        k(  rYt               }t	        |       D ]1  \  }} |||      r|j                  |       !|j                  d       3 |j                         S |t        k(  rt               }t	        |       D ]_  \  }}|dk(  r|j                  d       |d	k(  r|j                  d
       4 |||      r|j                  |       O|j                  d       a |j                         S |t        k(  rt               }|j                  d       t	        |       D ]  \  }}|dk(  r|j                  d        |||      r|j                  |       8t        |      s|j                  d       U|j                  d       |j                  t        t        |      d             |j                  d        |j                         S | S )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)rI   r,   rr   r   	enumeratewritegetvaluers   rt   _is_valid_utf8r'   ord)r`   r   rw   escapedibs         r   rG   rG      s    9yyu%--dE:BB3NN	[	 *aL 	#DAqQ"a c"		#
 !!	T	*aL 	$DAqCxd#cg&q!$a d#	$ !!	V	*eaL 
	#DAqCxd#q!$a #A&h'c"fSVS12c"
	# !!Hr   r   r   c                 (    t        | |      xs | dk(  S )Nr9   )rJ   r   r   s     r   rq   rq     s    $Q*6a3h6r   c                     t        |       dk7  rt        d      d| cxk  xr dk  nc xs0 d| cxk  xr dk  nc xs | dk(  xs d| cxk  xr d	k  nc xr |d
kD  S )Nr:   z%Input 'b' must be a single character.azAZry   09r   )rp   r&   r   s     r   rJ   rJ     s`    
1v{@AA	S 	'1OO	'H	' 1OO%A	r   i   i  c                 v    dt        |       cxk  r	t        k  ry t        t        |       cxk  r	t        k  ry yy)Nr   TF)r   _SURROGATE_MIN_SURROGATE_MAXr   )r`   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_TAGrI   rr   rs   rt   r   r3   rl   r=   rF   rM   intboolrG   rq   rJ   r   r   r   rB   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   