
    Mha                     &   d dl Zd dlZd dlZddlmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ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 Z,dS )    N   )Metric)_last_unquoted_char_next_unquoted_char_parse_value_split_quoted_unquote_unescapeparse_labels)
BucketSpanExemplarNativeHistogramSample	Timestamp)floatToGoString)_is_valid_legacy_metric_name_validate_metric_namec              #   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    d/var/www/html/test/jupyter/venv/lib/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       s1    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-   2   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_helpr6   6   s    FE $ $ 	$t||d####c""""d####dTk***EEt||d#### d776??r   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)	Nr0   _zInvalid timestamp: r   .   	   0)r2   strip
ValueErrorr   intsplitljustr   mathisnanisinf)	timestamppartstss      r   _parse_timestamprH   Q   sU   	""I tIOO%%%%	)9)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   r:   r!   r    )r   charposnum_bslashess      r   _is_character_escapedrM   g   sk    L\!!1|+,44 \!!1|+,44!q  r   c                 N   d}t          | d          }|dk    s|| d |         v rnt          | d          }| d |         }t          |          st          d| z             | |dz   d          }t          |          \  }}}t	          |i |||          S | d |         }t          | d          }	t          | |dz   |	         d          }
|sd	|
vrt          |
d	         }|
d	= nd	|
v rt          d
          | |	dz   d          }t          |          \  }}}t	          ||
|||          S )Nz # { zinvalid metric name:r:   }T__name__z$metric name specified more than oncer   )r   r   r>   _parse_remaining_textr   r
   )r   	separatorlabel_startname_endnameremaining_textvaluerE   exemplar	label_endlabelss              r   _parse_sampler^   o   so   I%dC00KbIl{l);;;&tS11IXI+D11 	<3d:;;;hlmm,%:>%J%J"y(dBy(;;;D#D#..I${Qy894@@F AV##j!:	v		?@@@)a-..)N!6~!F!FE9h$y(;;;r   c                 H   |                      dd          }t          |d                   }t          |          dk    r|d d fS g }g }g }d }d}|d         } t          |           }d}	|D ]i}
|
dk    r|	 }	|	r|dk    r*|
dk    r|sd} |
dk    rd	})|                    |
           ?|d	k    r|
dk    rd}Nt          d
| z             |dk    r|
dk    rd}ot          d
| z             |dk    rV|
dk    r>t          | d          }t          | d          }t          | |dz   |         d          }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}7|                    |
           N|dk    r|                    |
           k|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 )NrQ   r:   r   rE   Fr#   #exemplarspaceexemplarhashInvalid line: exemplarstartoflabelsrO   rR   Texemplarparsedlabelsexemplarvaluespaceexemplarvalueexemplartimestamp)rb   ra   rd   re   c              3   Z   K   | ]&\  }}t          |          t          |          z   V  'd S r*   )len).0kvs      r   	<genexpr>z(_parse_remaining_text.<locals>.<genexpr>   s6      RR$!Qc!ffs1vvoRRRRRRr      zExemplar labels are too long: )r@   r   rj   iterr1   r>   r   r   r
   rH   sumitemsr   )r   
split_textvalrE   exemplar_valueexemplar_timestampexemplar_labelsstateit	in_quotesr5   rV   r\   rG   r[   exemplar_lengths                   r   rT   rT      sv   C##J
z!}
%
%C
:!D$INOEa=D	dBI ., .,3;;%I 	Ks{{9{'&  &&&&n$$s{{' !1D!8999o%%s{{/ !1D!8999---s{{1$<</c::	".tK!OI4M/NPT"U"U. !1D!8999,,,s{{,***s{{' !1D!8999o%%s{{>{ !1D!8999+%%d++++)))%%d+++ I)D0111 ###,>#)D0111 bbb)D0111	)	$	$BH"RR/:O:O:Q:QRRRRRS  =DEEE((/00
 
 Hr   c                 f   t          | d          }d}d}d}t          | d          }|dk    rdS | |         dk    r"d}t          | d|          x}}|dk    rt          t          | d|d	z             }|dk    rdS t          | d
|d	z             }|dk    r||k     rdS t          | d|          }|dk    rt          |r| |d	z   |         }	t          |	d          }
|}| d|         }|                    |          rt          d|          |sd|
vrt          |
d         }|
d= |
sd}
| |d         }t	          |          }t          ||
ddd|          S | |d         }|d	z
  }| d|         }|                    |          rt          d|          t	          |          }t          |dddd|          S )zJDetermines if the line has a native histogram sample, and parses it if so.rO   rP   r   Fz {NTrR   r:   r`   zIthe sample name of a native histogram with labels should have no suffixesrS   z=the sample name of a native histogram should have no suffixes)r   r>   r
   endswith_parse_nh_structr   )r   suffixeslabels_start
labels_endihas_metric_labelsnh_value_startr[   nh_value_end
labelstextr]   rW   rX   nh_valuenat_hist_values                  r   _parse_nh_sampler      s7   &tS11LJ 	
AD$''ABww Aw#~~ ,T3:::
Q )sAE::N #4a!e44H2~~(^33&tS.AALr D,*:56
j$//IXI=="" 	phjnooo 	''  *%Dz" ()(33dFD$nEEE (!A%IXI=="" 	d\^bccc)(33dD$dNCCCr   c                    d}t          j        d          }t          j        d          }t          t          j        ||                     }|                    |           }t          |                    |                     }t	          |d                   }t	          |d                   }t	          |d                   }	t          |d                   }
t	          |d                   }t          |d	          }t          |d
          }t          |d          }t          |d          }t          |||	|
|||||	  	        S )Nz(\w+):\s*([^,}]+)z8(positive_spans|negative_spans):\[(\d+:\d+(,\d+:\d+)*)\]z8(positive_deltas|negative_deltas):\[(-?\d+(?:,-?\d+)*)\]countrq   schemazero_threshold
zero_countpositive_spansnegative_spanspositive_deltasnegative_deltas)	count_value	sum_valuer   r   r   	pos_spans	neg_spans
pos_deltas
neg_deltas)	recompiledictfindallr?   r   _compose_spans_compose_deltasr   )r   patternre_spans	re_deltasrr   span_matchesdeltasr   r   r   r   r   r   r   r   r   s                   r   r~   r~   4  s8   "GzUVVH
VWWIGT**++E##D))L)##D))**FeGn%%KE%L!!Ix!!F5!1233NU<())J|-=>>I|-=>>I ):;;J ):;;J%
 
 
 
r   c                    i }| D ]4}|d         }d |d                              d          D             }|||<   5||vrdS g }||         D ](\  }}|                    t          ||                     )t          |          }	|	S )zTakes a list of span matches (expected to be a list of tuples) and a string 
    (the expected span list name) and processes the list so that the values extracted 
    from the span matches can be used to compose a tuple of BucketSpan objectsr   c           
      x    g | ]7}t          t          t          |                    d                               8S ):)tuplemapr?   r@   )rk   pairs     r   
<listcomp>z"_compose_spans.<locals>.<listcomp>`  s4    RRRds3

30011RRRr   r:   ,N)r@   r1   r   r   )
r   
spans_namespansr'   keyrZ   	out_spansstartendout_spans_tuples
             r   r   r   U  s     E  Ah SReAhnnS>Q>QRRRc

tIJ' 1 1
s 	E3//0000I&&Or   c                     || vrdS |                      |          }|)|                                r|                    d          }t          d |D                       }|S )zTakes a list of deltas matches (a dictionary) and a string (the expected delta list name),
    and processes its elements to compose a tuple of integers representing the deltasNr   c              3   X   K   | ]%}t          |                                          V  &d S r*   )r?   r=   )rk   xs     r   rn   z"_compose_deltas.<locals>.<genexpr>z  s0      ;;S^^;;;;;;r   )getr=   r@   r   )r   deltas_name
out_deltaselemsout_deltas_tuples        r   r   r   p  st     &  tK((J*"2"2"4"4  %% ;;U;;;;;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)rX   r]   copy)samplerX   typds       r   _group_for_sampler   ~  s    
f}}	
iFK4//M  jM
jM  dG
---&+	AQ2Q2QM  dG=r   c                 h  	
 d }d }	
fd}| D ]}|j         t                    d          }t          |d          }t          |          dk    r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   r>   )bucketr   has_gsumhas_negative_bucketshas_negative_gsumhas_sumrX   rZ   s   r   	do_checksz#_check_histogram.<locals>.do_checks  s   U6]]""4t;<<<%@4GHHH 	Su}JTQRRR 	ULtSTTT 	Y8 	Y):PSWWXXX 	PG 	PG$NOOO# 	^(9 	^UX\\]]]	^ 	^ 	^ 	^r   r   r   Fr   r   TzBuckets out of order: zBucket values out of order: )_count_gcount)_sum)_gsum)rX   rj   r   rE   r   r]   r>   rZ   )samplesrX   r&   rE   r   r   suffixgbr   r   r   r   r   r   rZ   s    `       @@@@@@@r   _check_histogramr     s   EI^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^   #) #)D		

#a{33v;;!::	11 	EF#( GH %EK	Yahtn%%A1uu'+$!a6kk !9D!@AAAw !?$!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 ]}|d         dk    r
|dd         }|rt          d|z             |st          d          |dk    rd}G|                    d          rt          |dd          }t	          |          dk     rt          d|z             t          |d                   \  }}	|	st          |          st          |k    r|
rt          d|z             |k    r@ |||||
          V  |d}d}d}d}t                      }d}t                      }g }
|g}|d         dk    r+|t          d|z             t          |d                   }Z|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             |d#k    r9d}t          |t          d#                             }|d}t          |          }nd}t          |          }|j        |vrv|st |||||
          V  t          |j                  \  }}	|	st          |          st          |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    rbd0t'          |j                            d1d                    cxk    rdk    rn nt          |j        d1                   rt          d2|z             |sJt          t)          t+          ||                                                              }|||k    r||v rt          d3|z             |M||k    rG|j        du |du k    rt          d4|z             |#||j        k    r|d5k    rt          d6|z             nt                      }|j        t          t)          |j                                                            f}|j        |k    s||vr|
                    |           |                    |           |}|j        }|                    |           n|
                    |           |d%k    r|j        d7vrt          d8|z             |d5k    r|j        dk    rt          d9|z             |d/k    r(|j        k    r|j        d0k     rt          d:|z             |j        t	                    d         d;v r+t5          j        |j                  rt          d<|z             |j        t	                    d         d=v r|j        d0k     rt          d>|z             |j        rN|d?v r|j                            d'          s0|d@v r|j                            d          st          dA|z              |||||
          V  |st          dB          dS )CzParse 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)r0   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          |            t          | |||          }||_        |S )	Nunknownr0   zClashing name: r8   z!Unit does not match metric name: )r   r   z(Units not allowed for this metric type: r   )	setr   r>   addr}   r   r   r   r   )	rX   documentationr   unitr   r   metric
seen_namestype_suffixess	          r   build_metricz0text_fd_to_metric_families.<locals>.build_metric  s7   ;C-++C44t;<< 	* 	*Ff}
** !2T!9F!BCCCNN4&=)))) M<D 	IcDj11 	I@4GHHH 	PC///G$NOOO111Wd+++d###mS$77 r   rP   r"   zReceived line after # EOF: zReceived blank linez# EOFTr`   rQ         rc   r   z!Received metadata after samples: r:   HELPzMore than one HELP for metric: TYPEzMore than one TYPE for metric: untypedzInvalid TYPE for metric: c                     g | ]}|z   S rJ   rJ   )rk   r/   rX   s     r   r   z.text_fd_to_metric_families.<locals>.<listcomp>+  s     P P Pa P P Pr   r0   UNITzMore than one UNIT for metric: r   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   r:   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   r>   
startswithr   rj   r	   r   r6   r   r   r   r^   rX   r]   r    
isinstancerZ   r?   
is_integerr   sortedr   rr   rE   r1   r   rB   rC   r[   r}   )fdallowed_nameseofr   is_nhr   linerF   candidate_namequotedr   r   r   r&   seen_groupsgroup_timestampgroup_timestamp_samplesr   r   	series_idrX   r   r   s                       @@@r   r   r     s      DM
CJj)555>>>999	 M     . E
C J@ J@8t9D 	C:TABBB 	423337??CC__S!! ~	@!$Q//E5zzA~~ !1D!8999%6uQx%@%@"NF !">~"N"N !  %%'% !Dt!KLLL%%#&,t]CwOOOOO% $!ee"&*-%%'!/ 0Qx6!! ,$%F%MNNN .uQx 8 8qV##?$%F%MNNNAh)##$%@4%GHHH P P P P=3D3DS2$3O3O P P PqV###$%F%MNNNQx !1D!8999k!!)$mK6P0Q0QRR>!E*400F&t,,{-///#&,t]CwOOOOO):6;)G)G& %&B>&R&R %$$% $"&*-%%'!ee!'j  T%>%> !;d!BCCCy FK//**4775@@0t1DEE A !5!<===y FK//'c:: 0CI<CZCZC\C\ 0 !Dt!KLLLFK//4)3Cv{3R3R'c:: 4SCI<CZCZC\C\ 4S !Cd!JKKKy  TV[%8%85):)::r)J)J#K#KPPPPqPPPPP0z1JKK Q !;d!BCCC '&!264!E!E!K!K!M!MNNOO$e[8H8H$%@4%GHHH$e(D0o6MNN()UX\)\]]]&2IY7Y7Y^aek^k^k()UX\)\]]].1ee+#[%v}7J7J7L7L0M0M*N*NO	#66)Kb:b:bNN6***'++I666"("2""""v&&&j  V\%?%? !WZ^!^___f}}!2!2 !ID!PQQQiDFK$7$7FL1<L<L !G$!NOOO{3t99::&*eeejnjtLk" k"e !G$!NOOO{3t99::&*\\\agampqaqaq !Lt!STTT @;;;@T@TU^@_@_;{**v{/C/CH/M/M* !wz~!~l4T7CCCCC 1/0001 1r   )-ior   rB   r   metrics_corer   parserr   r   r   r   r	   r
   r   r   r   r   r   r   utilsr   
validationr   r   r   r   r   r    r%   r(   r   r+   r-   r6   rH   rM   r^   rT   r   r~   r   r   r   r   r   rJ   r   r   <module>r     s*        				 ! ! ! ! ! !                O N N N N N N N N N N N N N # # # # # # L L L L L L L LC C C eEll^ # # #   , , , bj%%8 8 8  6  ,! ! !< < <>Y Y YxGD GD GDT  B  6    &: : :z1 1 1 1 1r   