o
    0 i+                     @   s&  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d Zdd ZedfddZefded	edefddZefded	edefddZded	edeeegef defddZdededefd d!Zdededefd"d#Zd$Zd%Zdedefd&d'Z d(S ))    )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-8Zunderscoresdotsvaluesc                 C   s^   | j dkr|jdrdS | j dv r|jdrdS | j dv r%|jds+|j| jkr-dS dS )NcounterZ_totalTZgaugehistogramZ_bucketZ	histogramF)typenameendswith)metricsample r   t/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/prometheus_client/openmetrics/exposition.py_is_valid_exemplar_metric   s   "r   c                 C   sz   t | |std| j ddddd t|j D }|jdur2d|t	|j
|j}|S d	|t	|j
}|S )
zConstructs an exemplar string.zMetric z8 has exemplars, but is not a histogram bucket or counterz{{{0}}},c              	   S   s4   g | ]\}}d  ||ddddddqS ){}="{}"\\\
\n"\")formatreplace.0kvr   r   r   
<listcomp>(   s
    z,_compose_exemplar_string.<locals>.<listcomp>Nz # {} {} {}z # {} {})r   
ValueErrorr   r   joinsortedlabelsitems	timestampr   value)r   r   exemplarr(   exemplarstrr   r   r   _compose_exemplar_string#   s&   

r.   z1.0.0c                    sN  g }|   D ]}zw|j}|dt| t|jtt |dt|  d|j	 d |j
rB|dt|  d|j
 d |jD ]9} tkr_t|js_t|j }|jr^|d7 }nd}|jryt|j }|d fdd	|D 7 }|rd
| d }|jrt|||j}	nd}	d}
|jdurd|j }
|jrt|dk rqEd}d}d}d}d}|jrCd}|jj|jj|jj|jj|jjg}|jjrddd	 |jjD }ddd |jjD }|d7 }|| |d7 }|| |jjr#ddd	 |jjD }ddd |jjD }|d7 }|| |d7 }|| |d7 }|j| }|jjrC|jjD ]}t|||}|	|7 }	q5d}|jrL|}n|j durWt!|j } tksbt|jrt|dt|j t|||
|	 qE|d|||
|	 qEW q t"y } z|j#pd|f |_# d}~ww |d d|$dS )zHReturns the metrics from the registry in latest text format as a string.z# HELP {} {}
z# TYPE  r   z# UNIT r    c              	      s*   g | ]\}}d  t| t|ttqS )r   )r   escape_label_name_escape	ALLOWUTF8_is_legacy_labelname_runer    r
   r   r   r$   Q   s
    z#generate_latest.<locals>.<listcomp>{}N)r   r   r   z;{{count:{},sum:{},schema:{},zero_threshold:{},zero_count:{}c                 S   "   g | ]}|d   d|d  qS r   :   r   )r!   nsr   r   r   r$   v      " c                 s   s    | ]}t |V  qd S N)str)r!   ndr   r   r   	<genexpr>w   s    z"generate_latest.<locals>.<genexpr>z,negative_spans:[{}]z,negative_deltas:[{}]c                 S   r8   r9   r   )r!   Zpsr   r   r   r$      r=   c                 s   s    | ]}| V  qd S r>   r   )r!   pdr   r   r   rA      s    z,positive_spans:[{}]z,positive_deltas:[{}]z}}z{}{} {}{}{}
z
{} {}{}{}
)r0   z# EOF
zutf-8)%Zcollectr   appendr   escape_metric_namer2   Zdocumentationr3   r4   r   unitZsamplesr	   r(   r'   r)   r&   r,   r.   r*   native_histogramr   Zcount_valueZ	sum_valueZschemaZzero_thresholdZ
zero_countZ	neg_spansZ
neg_deltasZ	pos_spansZ
pos_deltasZnh_exemplarsr+   r   	Exceptionargsencode)registryr
   versionoutputr   ZmnamesZlabelstrr)   r-   r*   rF   Znegative_spansZnegative_deltasZpositive_spansZpositive_deltasZnh_sample_templaterH   Znh_exZnh_exemplarstrr+   	exceptionr   r5   r   generate_latest:   s     

	







`
rO   rM   returnc                 C      t | dkr| S |tkrt| sdt| |tS t| |tS |tkr/t| r)| S t| |tS |tkr9t| |tS |tkrIt| rC| 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   "{}")	lenr3   r	   r   r2   _is_legacy_metric_runeUNDERSCORESDOTSVALUESrM   r
   r   r   r   rD      "   rD   c                 C   rQ   )z{Escapes the label name and puts it in quotes iff the name does not
    conform to the legacy Prometheus character set.
    r   rR   )	rS   r3   r   r   r2   r4   rU   rV   rW   rX   r   r   r   r1      rY   r1   valid_rune_fnc                 C   sx  |t kr| ddddddS |tkr6t }t| D ]\}}|||r,|| q|d q| S |tkrnt }t| D ](\}}|dkrO|d qA|d	krY|d
 qA|||rd|| qA|d qA| S |tkrt }|d t| D ]7\}}|dkr|d q~|||r|| q~t	|s|d q~|d |t
t|d |d q~| 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   ___.Z_dot_ZU__Z_FFFD_x)r3   r   rU   r   	enumeratewritegetvaluerV   rW   _is_valid_utf8r   ord)rM   r
   rZ   escapedibr   r   r   r2      sF   




r2   rf   re   c                 C   s   t | |p| dkS )Nr:   )r4   rf   re   r   r   r   rT     s   rT   c                 C   sl   t | dkr
tdd|   kodkn  p5d|   kodkn  p5| dkp5d|   ko/d	kn  o5|d
kS )Nr;   z%Input 'b' must be a single character.azAZr[   09r   )rS   r%   rg   r   r   r   r4     s   r4   i   i  c                 C   s@   dt |   krtk rdS  tt |   k rtkrdS  dS dS )Nr   TF)rc   _SURROGATE_MIN_SURROGATE_MAXr   )rM   r   r   r   rb     s   rb   N)!ior   sysr   typingr   utilsr   r   Z
validationr   r	   ZCONTENT_TYPE_LATESTZCONTENT_TYPE_LATEST_2_0ZESCAPING_HEADER_TAGr3   rU   rV   rW   r   r.   rO   r?   rD   r1   intboolr2   rT   r4   rn   ro   rb   r   r   r   r   <module>   s2   
s&,