a
    ܌xd                     @   s   d dl Zd dlZddlmZ ddlmZ dd Zddd	d
Zdd Z	e
dZe
dZdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N   )Metric)Samplec                 c   s   t t| E dH  dS )z]Parse Prometheus text format from a unicode string.

    See text_fd_to_metric_families.
    N)text_fd_to_metric_familiesStringIO)text r   P/var/www/html/Ranjet/env/lib/python3.9/site-packages/prometheus_client/parser.pytext_string_to_metric_families   s    r
   \
")z\\z\nz\"c                 C   s   t | d S )Nr   )ESCAPE_SEQUENCESgroup)matchr   r   r	   replace_escape_sequence   s    r   z\\[\\n]z\\[\\n"]c                 C   s   t t| S N)HELP_ESCAPING_REsubr   sr   r   r	   _replace_help_escaping   s    r   c                 C   s   t t| S r   )ESCAPING_REr   r   r   r   r   r	   _replace_escaping#   s    r   c                 C   s6   d}||kr*| |d |  dkr*|d7 }q|d dkS )Nr   r   r      r   )r   ZcharposZnum_bslashesr   r   r	   _is_character_escaped'   s    
r   c                 C   s&  i }d| vr|S d}d| v r d}| }z|r| d}|d | }||d d   }| dd }||d  }d}|t|k r| d|}t||sq|d7 }qr|d }	|||	 }
|rt|
}
|
|| < ||	d d  }|dd }||d   }q&|W S  ty    td	|  Y n0 d S )
N=Fr   Tr   r   r   ,zInvalid labels: %s)indexlstriplenr   r   stripfind
ValueError)Zlabels_stringlabelsZescapingZ
sub_labelsZvalue_startZ
label_nameZquote_startZvalue_substriZ	quote_endZlabel_valueZ
next_commar   r   r	   _parse_labels/   s>    


r&   c                 C   sp   |   } d}|| vrd}dd | |D }|s<t| d fS t|d }t|dkrdt|d d nd }||fS )	N 	c                 S   s   g | ]}|  r|  qS r   )r!   ).0valuer   r   r	   
<listcomp>g       z._parse_value_and_timestamp.<locals>.<listcomp>r   r   i  )r   splitfloatr    )r   	separatorvaluesr*   	timestampr   r   r	   _parse_value_and_timestampb   s     r3   c           	      C   s   zb|  d| d }}| d |  }| |d | }t| |d d  \}}t|t|||W S  ty   d}|| vrd}|  |}| d | }t| |d  \}}t|i || Y S 0 d S )N{}r   r'   r(   )r   rindexr!   r3   r   r&   r#   )	r   Zlabel_startZ	label_endnamelabelr*   r2   r0   Zname_endr   r   r	   _parse_sampleo   s    
r9   c           	      #   s  d d}d}g }g }dd }| D ]}|  }|drD|dd}t|dk rTq |d	 d
kr|d  kr dkr| |||V  |d  d}g }|d g}t|dkrt|d }nd}n|d	 dkr|d  kr dkr| |||V  |d  d}g }|d }dgdgg dg dd|dg} fdd|D }n q |dkrPq t|}|j|vr dkr~| |||V  d d}d}g }g }||d |||gV  q || q  dkr| |||V  dS )zParse Prometheus text format from a file descriptor.

    This is a laxer parser than the main Go parser,
    so successful parsing does not imply that the parsed
    text meets the specification.

    Yields Metric's.
     Zuntypedc                 S   sn   |dkrX|  dr | d d } n8g }|D ].}|t|d d g|dd  R   |}q(t| ||}||_|S )NcounterZ_totalir   r   )endswithappendr   r   samples)r7   documentationtypr>   Znew_samplesr   Zmetricr   r   r	   build_metric   s    
&z0text_fd_to_metric_families.<locals>.build_metric#N   r   r   ZHELP   ZTYPE)_count_sumr:   )rE   rF   Z_bucket)r;   ZgaugesummaryZ	histogramc                    s   g | ]} | qS r   r   )r)   nr7   r   r	   r+      r,   z.text_fd_to_metric_families.<locals>.<listcomp>r   )	r!   
startswithr.   r    r   getr9   r7   r=   )	fdr?   r@   r>   Zallowed_namesrA   linepartssampler   rI   r	   r      sn    	




r   )ior   reZmetrics_corer   r>   r   r
   r   r   compiler   r   r   r   r   r&   r3   r9   r   r   r   r   r	   <module>   s$   	

3