o
    ⹏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-8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counter_totalTgaugehistogram_bucket	histogramF)typenameendswith)metricsample r   e/home/ubuntu/veenaModal/venv/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&   

r3   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   r=   r>   r   )r&   psr   r   r   r)      rB   c                 s   s    | ]}| V  qd S rC   r   )r&   pdr   r   r   rF      s    z,positive_spans:[{}]z,positive_deltas:[{}]z}}z{}{} {}{}{}
z
{} {}{}{}
)r5   z# EOF
zutf-8)%collectr   appendr#   escape_metric_namer7   documentationr8   r9   r   unitsamplesr	   r-   r,   r.   r+   r1   r3   r/   native_histogramr   count_value	sum_valueschemazero_threshold
zero_count	neg_spans
neg_deltas	pos_spans
pos_deltasnh_exemplarsr0   r   	Exceptionargsencode)registryr
   versionoutputr   mnameslabelstrr.   r2   r/   rO   negative_spansnegative_deltaspositive_spanspositive_deltasnh_sample_templater[   nh_exnh_exemplarstrr0   	exceptionr   r:   r   generate_latest:   s     

	







`
rk   ra   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   "{}")	lenr8   r	   r#   r7   _is_legacy_metric_runeUNDERSCORESDOTSVALUESra   r
   r   r   r   rK      "   rK   c                 C   rm   )z{Escapes the label name and puts it in quotes iff the name does not
    conform to the legacy Prometheus character set.
    r   rn   )	ro   r8   r   r#   r7   r9   rq   rr   rs   rt   r   r   r   r6      ru   r6   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"   ___._dot_U___FFFD_x)r8   r$   rq   r   	enumeratewritegetvaluerr   rs   _is_valid_utf8r#   ord)ra   r
   rv   escapedibr   r   r   r7      sF   




r7   r   r   c                 C   s   t | |p| dkS )Nr?   )r9   r   r   r   r   r   rp     s   rp   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Zrw   09r   )ro   r*   r   r   r   r   r9     s   r9   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)r   _SURROGATE_MIN_SURROGATE_MAXr   )ra   r   r   r   r     s   r   N)!ior   sysr   typingr   utilsr   r   
validationr   r	   CONTENT_TYPE_LATESTCONTENT_TYPE_LATEST_2_0ESCAPING_HEADER_TAGr8   rq   rr   rs   r   r3   rk   rD   rK   r6   intboolr7   rp   r9   r   r   r   r   r   r   r   <module>   s2   
s&,