
    diV                         d dl Zd dlZd dlZddlmZmZ ddlmZm	Z	m
Z
 ddlmZ d Z ed          hZd Zd	d
ddZd Z ej        d          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z dS )    N   )MetricMETRIC_LABEL_NAME_RE)ExemplarSample	Timestamp)floatToGoStringc              #   X   K   t          t          j        |                     E d{V  dS )z^Parse Openmetrics text format from a unicode string.

    See text_fd_to_metric_families.
    N)text_fd_to_metric_familiesStringIO)texts    Dlib/python3.11/site-packages/prometheus_client/openmetrics/parser.pytext_string_to_metric_familiesr      s9      
 *(*;D*A*ABBBBBBBBBBB    infc                 \    t          |           }|t          vrdS | t          |          k    S )NF)float_CANONICAL_NUMBERSr	   )sfs     r   _isUncanonicalNumberr      s3    aA"" u""""r   \
")z\\z\nz\"c                 B    t           |                     d                   S )Nr   )ESCAPE_SEQUENCESgroup)matchs    r   _replace_escape_sequencer   &   s    EKKNN++r   z\\[\\n"]c                 B    t                               t          |           S N)ESCAPING_REsubr   )r   s    r   _replace_escapingr$   -   s    ??3Q777r   c                    g }d}| D ]}|ro|dk    r|                     d           nP|dk    r|                     d           n4|dk    r|                     d           n|                     d|z              d}s|dk    rd}||                     |           |r|                     d           d                    |          S )NFr   r   nr   T )appendjoin)r   resultslashchars       r   _unescape_helpr-   1   s    FE $ $ 	$t| +d#### +c"""" +d####dTk***EEt| $d#### d776??r   c                     d                     |           } | |                                 k    sd| v rt          d|           	 t          |           S # t          $ r t	          |           cY S w xY w)Nr'   _zInvalid value: )r)   strip
ValueErrorintr   )values    r   _parse_valuer4   L   s    GGENNE 6 645445555zz   U||s   A A0/A0c           
      x   d                     |           } | sd S | |                                 k    sd| v rt          d|           	 t          t	          |           d          S # t          $ r 	 |                     dd          }t          t	          |d                   t	          |d         d d                             dd                              cY S # t          $ rP t          |           }t          j	        |          st          j
        |          rt          d|           |cY cY S w xY ww xY w)	Nr'   r/   zInvalid timestamp: r   .   	   0)r)   r0   r1   r   r2   splitljustr   mathisnanisinf)	timestamppartstss      r   _parse_timestamprB   V   sY   	""I tIOO%%% >	)9 ><y<<===Y+++ 
 
 
		OOC++ESq]]Ca!0B0B1c0J0J,K,KLLLLL 	 	 	y!!Bz"~~ FB F !Dy!D!DEEEIIIII	
s2   	A& &
D91A'CD9AD50D94D55D9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   r7   r   r    )r   charposnum_bslashess      r   _is_character_escapedrG   l   su    L\! 1|+,4 \! 1|+,4 !q  r   c                    d}g }g }i }d}| D ]}|dk    r#|dk    rd}nd}|                     |           n|dk    r!|dk    rd}n|                     |           n}|dk    r|dk    rd	}nmt          d
| z             |d	k    r|dk    rd}nK|dk    rpd                    |          }t          j        |          st          d| z             ||v rt          d| z             d                    |          ||<   g }g }d}n|                     |           n|dk    r$|dk    rd}n|dk    rd}nt          d
| z             |dk    rod	}|dk    r|                     d           nq|dk    r|                     d           nU|dk    r|                     d           n9|                     d|z              n |dk    r|dk    r nt          d
| z             |dz  }||fS )Nstartoflabelnamer   }endoflabels	labelname=labelvaluequoter   
labelvalueInvalid line: r   labelvalueslashr'   zInvalid line, bad label name: z$Invalid line, duplicate label name: endoflabelvalue,r&   r    r7   )r(   r1   r)   r   r   )r   staterL   rO   labels
labels_lenr,   lns           r    _parse_labels_with_state_machinerY   t   s   EIJFJ 6 6&& 4	:s{ '%#  &&&&k! .	:s{ ')  &&&&'' )	:s{ :$ !1D!8999l" $	:t| () (WWY''+1"55 N$%E%LMMM< T$%Kd%RSSSWWZ00r
	
)!!$'''''' 	:s{ :# :% !1D!8999'' 	: Et| /!!$'''' /!!$'''' /!!#&&&&!!$+....m# 	:s{ : !1D!8999a

:r   c                 ^   i }| rd| vrt           | }	 |rw|                    d          }|d |         }||dz   d          }|r|d         dk    rt           |dd          }|r|d         dk    rt           |r|d         dk    rt           d}|t          |          k     rG|                    d|          }t          |d |         |          sn|dz  }|t          |          k     G|dz   }|d|         }d|v rt	          |          }t          j        |          st          d| z             ||v rt          d	| z             |||<   ||dz   d          }|                    d          rd}	nd}	||	d          }|r|	dk    rt           |w|S # t           $ r t          d
| z             w xY w)NrM   r7   r   r   rS   r   zinvalid line, bad label name: z$invalid line, duplicate label name: zInvalid labels: )r1   indexlenrG   r$   r   r   
startswith)
r   rV   
sub_labelsvalue_start
label_namevalue_substri	quote_endlabel_value
next_commas
             r   _parse_labelsrg      sp   F  4  J84 1	!$**3//K#L[L1J#K!O$4$45J  !A#!5 !   &abb>L  !A#!5 !   !<#3s#: !   Ac,'''  &&sA..,\"1"-=qAA Q	 c,'''  AI$Qy[1K{" =/<<'-j99 J !AD!HIIIV# P !G$!NOOO!,F: $IMNN3J$$S)) 


#JKK0J  !jAo !  c  1	!f  4 4 4+d23334s   E;F F,c                 <   d}|                      d          }|dk    s|| d |         v rR|                     d          }| d |         }| |dz   d          }t          |          \  }}}t          |i |||          S | d |         }|| vr2|                     d          }	| |dz   |	         }
t          |
          }n/t          | |dz   d                    \  }}|t          |          z   }	| |	dz   d          }t          |          \  }}}t          |||||          S )Nz # {r[   rT   r7   rJ   r   )findr\   _parse_remaining_textr   rindexrg   rY   r]   )r   	separatorlabel_startname_endnameremaining_textr3   r?   exemplar	label_endlabelrV   rW   s                r   _parse_sampleru      sP   I))C..Kb <Il{l);; <::c??IXIhlmm,%:>%J%J"y(dBy(;;;D 
+ KK$$	[1_Y./u%% >d;QR?CSCS>TUU
T*	)a-..)N!6~!F!FE9h$y(;;;r   c                 >   |                      dd          }t          |d                   }t          |          dk    r|d d fS g }g }g }d }d}|d         } t          |           }|D ]f}	|dk    r*|	dk    r|sd}|	dk    rd}|                    |	           3|dk    r|	dk    rd}Bt          d| z             |dk    r|	dk    rd	}ct          d| z             |d	k    r_|	d
k    rG|                     d
          |                     d          }}
t          | |
dz   |                   }d}t          d| z             |dk    r	|	dk    rd}|dk    r|	dk    rd}t          d| z             |dk    r;|	dk    r|st          d| z             |	dk    rd}4|                    |	           K|dk    r|                    |	           h|dk    r|st          d| z             |dk    r|st          d| z             |dv rt          d| z             t          |          }d }|nt          d |                                D                       }|dk    rt          d| z             t          |t          |          t          |                    }|||fS )NrT   r7   r   r?   #exemplarspaceexemplarhashrP   exemplarstartoflabelsri   rJ   exemplarparsedlabelsexemplarvaluespaceexemplarvalueexemplartimestamp)ry   rx   rz   r{   c              3   Z   K   | ]&\  }}t          |          t          |          z   V  'd S r!   )r]   ).0kvs      r   	<genexpr>z(_parse_remaining_text.<locals>.<genexpr>c  s6      RR$!Qc!ffs1vvoRRRRRRr      zExemplar labels are too long: )r:   r4   r]   iterr(   r1   r\   rl   rg   rB   sumitemsr   )r   
split_textvalr?   exemplar_valueexemplar_timestampexemplar_labelsrU   itr,   rn   rs   rA   rr   exemplar_lengths                  r   rk   rk     s   C##J
z!}
%
%C
:! D$INOEa=D	dB ), ),K (	,s{ '9 '' '&  &&&&n$ !	,s{ :' !1D!8999o% 	,s{ :/ !1D!8999-- 	,s{ :)-C$++c:J:JY"/[1_Y5N0O"P"P. !1D!8999,, 	,s{ -,** 	,s{ :' !1D!8999o% 	,s{ ,> , !1D!8999 ,+%%d++++)) 	,%%d+++  2I 2)D0111 ## 2,> 2)D0111 bb 2)D0111	)	$	$BH 
RR/:O:O:Q:QRRRRRS  	F=DEEE((/00
 
 Hr   c                 &   |dk    ri S |dk    r)| j         |k    r| j                                        }|d= |S |dk    r| j                                        }||= |S |dv r,| j         |dz   k    r| j                                        }|d= |S | j        S )Ninfosummaryquantilestateset	histogramgaugehistogram_bucketle)rp   rV   copy)samplerp   typds       r   _group_for_sampler   o  s    
f} 	
i FK4/ M  jM
j M  dG
-- &+	AQ2Q M  dG=r   c                 <  	
 d }d }	
fd}| D ]}|j         t                    d          }t          |d          }||k    s|j        |k    r|
 |             d 
d 	ddddd|}|j        }|dk    rct	          |j        d                   }|dk     rd	|	k    rt          dz             |j        k     rt          d	z             |	|j        |d
v r|j        
|dv rd|dv rd|j        dk     rd| |             d S d S )Nc                  j    t          d          k    rt          dz             k    rt          dz             rt          dz             rt          dz             sst          dz             rrt          dz             srt          dz             d S d S )	Nz+Infz+Inf bucket missing: z!Count does not match +Inf value: z+_count must be present if _sum is present: z-_gcount must be present if _gsum is present: z1_sum/_gsum must be present if _count is present: z(Cannot have _sum with negative buckets: z6Cannot have negative _gsum with non-negative buckets: )r   r1   )bucketcounthas_gsumhas_negative_bucketshas_negative_gsumhas_sumrp   r3   s   r   	do_checksz#_check_histogram.<locals>.do_checks  s/   U6]]" 	=4t;<<< 	I% 	I@4GHHH 	Su 	SJTQRRR 	U 	ULtSTTT 	Y8 	Y 	YPSWWXXX 	PG 	PG$NOOO# 	^(9 	^UX\\]]]	^ 	^ 	^ 	^r   r   Fr   r   r   TzBuckets out of order: zBucket values out of order: )_count_gcount)_sum)_gsum)rp   r]   r   r?   r   rV   r1   r3   )samplesrp   r   r?   r   r   suffixgbr   r   r   r   r   r   r3   s    `       @@@@@@@r   _check_histogramr     s   EI^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^   !) !)D		

#a{33: 			1 		 	EF#( GH %EK	Y 	)ahtn%%A1u ,'+$ Ba6k B !9D!@AAAw H !?$!FGGGFGEE,, 	)GEEx 	)GGy  	)Hw{ )$(! 	 r   c           
   #     K   dg }d}t                      ddgg dg dg ddgd	fd
}| D ]}|d         dk    r
|dd         }|rt          d|z             |st          d          |dk    rd}G|                    d          r|                    dd          }t	          |          dk     rt          d|z             |d         k    r|rt          d|z             |d         k    rL ||||	|          V  |d         d}	d}d}d}
t                      }d}t                      }g }|d         g}|d         dk    r+|t          d|z             t          |d                   }G|d         dk    rY|t          d|z             |d         }|dk    rt          d|z             fd                    |d g          D             }|d         d!k    r|	t          d"|z             |d         }	t          d|z             t          |          }|j        |vrJ ||||	|          V  |j        d}d}	d#}g }d}
d}t                      }t                      }|j        g}|d$k    r|j	        vrt          d%|z             d&z   |j        k    rK|j	                            d'd(          d(k    st          |j	        d'                   rt          d)|z             d&z   |j        k    rEt          |j        t                    s+|j                                        st          d*|z             d+z   |j        k    sd,z   |j        k    rEt          |j        t                    s+|j                                        st          d-|z             |d.k    rm|j        k    rbd/t          |j	                            d0d                    cxk    rdk    rn nt          |j	        d0                   rt          d1|z             t!          t#          t%          ||                                                              }|
||
k    r||v rt          d2|z             |
M||
k    rG|j        du |du k    rt          d3|z             |#||j        k    r|d4k    rt          d5|z             nt                      }|j        t!          t#          |j	                                                            f}|j        |k    s||vr|                    |           |                    |           |}
|j        }|                    |           |d$k    r|j        d6vrt          d7|z             |d4k    r|j        dk    rt          d8|z             |d.k    r(|j        k    r|j        d/k     rt          d9|z             |j        t	                    d         d:v r+t/          j        |j                  rt          d;|z             |j        t	                    d         d<v r|j        d/k     rt          d=|z             |j        rN|d>v r|j                            d&          s0|d?v r|j                            d          st          d@|z              ||||	|          V  |st          dA          dS )BzParse 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.
    NF_total_created)r'   r   r   r   )r   r   r   r   )r   r   r   _info)counterr   r   r   r   c                    |d}t                              |g           dgz             D ]6}| |z   v rt          d| z   |z                                 | |z              7|d}|d}|r*|                     d|z             st          d| z             |r|dv rt          d| z             |dv rt          ||            t          | |||          }||_        |S )	Nunknownr'   zClashing name: r/   z!Unit does not match metric name: )r   r   z(Units not allowed for this metric type: r   )setgetr1   addendswithr   r   r   )	rp   documentationr   unitr   r   metric
seen_namestype_suffixess	          r   build_metricz0text_fd_to_metric_families.<locals>.build_metric  s9    	C-++C44t;<< 	* 	*Ff}
* D !2T!9F!BCCCNN4&=)))) 	M 	D 	IcDj11 	I@4GHHH 	PC// 	PG$NOOO11 	,Wd+++mS$77 r   r[   r   zReceived line after # EOF: zReceived blank linez# EOFTrw   rT         rP   r   z!Received metadata after samples: r7   HELPzMore than one HELP for metric: TYPEzMore than one TYPE for metric: untypedzInvalid TYPE for metric: c                     g | ]}|z   S rD   rD   )r   r&   rp   s     r   
<listcomp>z.text_fd_to_metric_families.<locals>.<listcomp>  s     P P Pa P P Pr   r'   UNITzMore than one UNIT for metric: r   r   zStateset missing label: r   r   NaNzInvalid le label: z!Bucket value must be an integer: r   r   z Count value must be an integer: r   r   r   zInvalid quantile label: zInvalid metric grouping: z*Mix of timestamp presence within a group: r   z*Timestamps went backwards within a group: )r   r7   z4Stateset samples can only have values zero and one: z&Info samples can only have value one: z$Quantile values cannot be negative: )r   r   r   r   r   r   z$Counter-like samples cannot be NaN: )r   r   r   r   r   z)Counter-like samples cannot be negative: r   )r   zTInvalid line only histogram/gaugehistogram buckets and counters can have exemplars: zMissing # EOF at end)r   r1   r^   r:   r]   r-   r   ru   rp   rV   r   
isinstancer3   r2   
is_integerr   tuplesortedr   r   r?   r(   r   r<   r=   rr   r   )fdallowed_nameseofr   liner@   r   r   r   r   r   seen_groupsgroup_timestampgroup_timestamp_samplesr   r   	series_idrp   r   r   s                    @@@r   r   r     s      DM
CJj)555>>>999	 M     ,  w@ w@8t 	9D 	C:TABBB 	423337? m	@CC__S!! k	@JJsA&&E5zzA~ : !1D!8999Qx4 MG M !Dt!KLLLQx4 + P&,t]CwOOOOOQx $!ee"&*-%%'!&q
Qx6! :  O$%F%MNNN .uQx 8 8qV# : O$%F%MNNNAh)# I$%@4%GHHH P P P P=3D3DS2$3O3O P P PqV# : O$%F%MNNNQx !1D!8999"4((F{-/ . P&,t]CwOOOOO{ $"&*-%%'!ee!'j  DT%> D !;d!BCCCy FK/ >**4775@>0t1DEE> !!5!<===y FK/ M'c::MCI<CZCZC\C\M !Dt!KLLLFK/ L4)3Cv{3R L'c::LCI<CZCZC\C\L !Cd!JKKKy  DTV[%8 D5):)::r)J)J#K#KD D D DOPD D D D D0z1JKKD !!;d!BCCCf.vtSAAGGIIJJKKA EQ%Z EA4D E !<t!CDDD 0Q%Z 0$,/T2IJ Z$%QTX%XYYY" Z?VEU3U ZZ]agZg Z$%QTX%XYYY*-%%'eF6=3F3F3H3H,I,I&J&JKI?2 'iG^6^ 'v&&&#''	222E$.OOOAj  `V\%? ` !WZ^!^___f} R!2 R !ID!PQQQi PDFK$7 PFL1<L P !G$!NOOO{3t99::&*ee PjnjtLk" k" P !G$!NOOO{3t99::&*\\ Uagampqaq U !Lt!STTT @;;@@F@T@TU^@_@_@{*@/5{/C/CH/M/M@ !!wz~!~ Dl4T7CCCCC 1/0001 1r   )!ior   r<   remetrics_corer   r   r   r   r   r   utilsr	   r   r   r   r   r   r   compiler"   r$   r-   r4   rB   rG   rY   rg   ru   rk   r   r   r   rD   r   r   <module>r      s        				 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 # # # # # #C C C eEll^ # # #   , , , bj%%8 8 8  6    ,! ! !? ? ?DA4 A4 A4H< < <>S S Sl  &8 8 8vi1 i1 i1 i1 i1r   