
    d                         d dl Zd dlZddlmZ ddlmZ d Zdddd	Zd
 Z	 ej
        d          Z ej
        d          Zd Zd Zd Zd Zd Zd Zd ZdS )    N   )Metric)Samplec              #   X   K   t          t          j        |                     E d{V  dS )z]Parse Prometheus text format from a unicode string.

    See text_fd_to_metric_families.
    N)text_fd_to_metric_familiesStringIO)texts    8lib/python3.11/site-packages/prometheus_client/parser.pytext_string_to_metric_familiesr      s9      
 *(*;D*A*ABBBBBBBBBBB    \
")z\\z\nz\"c                 B    t           |                     d                   S )Nr   )ESCAPE_SEQUENCESgroup)matchs    r
   replace_escape_sequencer      s    EKKNN++r   z\\[\\n]z\\[\\n"]c                 B    t                               t          |           S N)HELP_ESCAPING_REsubr   ss    r
   _replace_help_escapingr      s     7;;;r   c                 B    t                               t          |           S r   )ESCAPING_REr   r   r   s    r
   _replace_escapingr   #   s    ??2A666r   c                     d}||k    r/| |dz
  |z
           dk    r|dz  }||k    r| |dz
  |z
           dk    |dz  dk    S )Nr   r   r       )r   charposnum_bslashess      r
   _is_character_escapedr$   '   su    L\! 1|+,4 \! 1|+,4 !q  r   c                    i }d| vr|S d}d| v rd}| }	 |r/|                     d          }|d |         }||dz   d                                          }|                     d          dz   }||d          }d}|t          |          k     r?|                     d|          }t          ||          sn|dz  }|t          |          k     ?|dz   }	|||	         }
|rt	          |
          }
|
||                                <   ||	dz   d          }|                    d          dz   }||d                                          }|/|S # t          $ r t          d	| z            w xY w)
N=Fr   Tr   r   r   ,zInvalid labels: %s)indexlstriplenr$   r   stripfind
ValueError)labels_stringlabelsescaping
sub_labelsvalue_start
label_namequote_startvalue_substri	quote_endlabel_value
next_commas               r
   _parse_labelsr:   /   s   F
- H}  J#? 	:$**3//K#L[L1J#K!O$4$45<<>>J$**3//!3K%kll3L Ac,'''  &&sA..,\1== Q	 c,'''  AI$[%:;K =/<<)4F:##%%& $IMNN3J#--1J#JKK07799J9  	:<  ? ? ?-=>>>?s   D3E E%c                 *   |                                  } d}|| vrd}d |                     |          D             }|st          |           d fS t          |d                   }t          |          dk    rt          |d                   dz  nd }||fS )N 	c                 ^    g | ]*}|                                 |                                 +S r!   )r+   ).0values     r
   
<listcomp>z._parse_value_and_timestamp.<locals>.<listcomp>g   s-    MMMu{{}}MekkmmMMMr   r   r   i  )r)   splitfloatr*   )r   	separatorvaluesr@   	timestamps        r
   _parse_value_and_timestamprH   b   s    	

AI 	MM););MMMF Qxx~&)E.1&kkAoGvbz""T))4I)r   c                    	 |                      d          |                     d          }}| d |                                         }| |dz   |         }t          | |dz   d                    \  }}t	          |t          |          ||          S # t          $ rV d}|| vrd}|                      |          }| d |         }t          | |d                    \  }}t	          |i ||          cY S w xY w)N{}r   r    r<   r=   )r(   rindexr+   rH   r   r:   r-   )	r	   label_start	label_endnamelabelr@   rG   rE   name_ends	            r
   _parse_samplerR   o   s   2!%C$++c2B2BYL[L!''))[1_Y./5d9q=>>6JKKydM%00%CCC  	2 	2 	2	D  	I::i((IXI5d899oFFydBy11111	2s   BB AC10C1c              #     	K   d	d}d}g }g }d }| D ]}|                                 }|                    d          r|                    dd          }t          |          dk     rW|d         d	k    rc|d         	k    r+	dk    r |	|||          V  |d         	d}g }|d         g}t          |          d
k    rt	          |d                   }d}|d         dk    rh|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k    rDt          |          }|j        |vr9	dk    r |	|||          V  d	d}d}g }g } ||d         |||g          V  |                    |           	dk    r |	|||          V  dS 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.
     untypedc           	          |dk    rZ|                      d          r| d d         } n:g }|D ]5}|                    t          |d         dz   g|dd          R             |}6t          | ||          }||_        |S )Ncounter_totalir   r   )endswithappendr   r   samples)rO   documentationtypr[   new_samplesr   metrics          r
   build_metricz0text_fd_to_metric_families.<locals>.build_metric   s     ) 	*}}X&& *CRCy   * *A&&vadXo'F!""'F'F'FGGG)GGmS11 r   #N   r    r   HELP   TYPE)_count_sumrT   )rf   rg   _bucket)rW   gaugesummary	histogramc                     g | ]}|z   S r!   r!   )r?   nrO   s     r
   rA   z.text_fd_to_metric_families.<locals>.<listcomp>   s     A A Aa A A Ar   r   )	r+   
startswithrC   r*   r   getrR   rO   rZ   )
fdr\   r]   r[   allowed_namesr`   linepartssamplerO   s
            @r
   r   r      s      DM
CGM    7' 7'zz||??3 4	'JJtQ''E5zzA~ Qx6! 8t# /rz N*l4WMMMMM 8D#C G%*1XJMu::? '$:58$D$DMM$&MMqV# 8t# !rz N*l4WMMMMM 8D$&M GAh "t T555!>!>!>	! !
 #cB4..  !B A A A= A A A RZ 	'"4((F{-/ '2: J&,t]CIIIII " ""l6!9mS6(KKKKKKv&&&&rz >l4W=======> >r   )ior   remetrics_corer   r[   r   r   r   r   compiler   r   r   r   r$   r:   rH   rR   r   r!   r   r
   <module>ry      s       				                  C C C   , , , 2:j)) bj%%< < <7 7 7! ! !/? /? /?f
 
 
2 2 22X> X> X> X> X>r   