
    {tfmV                         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 y)    N   )MetricMETRIC_LABEL_NAME_RE)ExemplarSample	Timestamp)floatToGoStringc              #   \   K   t        t        j                  |             E d{    y7 w)z^Parse Openmetrics text format from a unicode string.

    See text_fd_to_metric_families.
    N)text_fd_to_metric_familiesStringIO)texts    n/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/prometheus_client/openmetrics/parser.pytext_string_to_metric_familiesr      s!     
 *(*;*;D*ABBBs   ",*,infc                 F    t        |       }|t        vry| t        |      k7  S )NF)float_CANONICAL_NUMBERSr	   )sfs     r   _isUncanonicalNumberr      s'    aA"""""    \
")z\\z\nz\"c                 2    t         | j                  d         S )Nr   )ESCAPE_SEQUENCESgroup)matchs    r   _replace_escape_sequencer   &   s    EKKN++r   z\\[\\n"]c                 6    t         j                  t        |       S N)ESCAPING_REsubr   )r   s    r   _replace_escapingr$   -   s    ??3Q77r   c                 N   g }d}| D ]y  }|r\|dk(  r|j                  d       nB|dk(  r|j                  d       n+|dk(  r|j                  d       n|j                  d|z          d}a|dk(  rd}i|j                  |       { |r|j                  d       dj                  |      S )NFr   r   nr   T )appendjoin)r   resultslashchars       r   _unescape_helpr-   1   s    FE $t|d#c"d#dTk*Et|d#$" d776?r   c                     dj                  |       } | | j                         k7  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]    GGENE?5)4555z U|s   
A AAc           
         dj                  |       } | sy | | j                         k7  sd| v rt        d|       	 t        t	        |       d      S # t        $ r 	 | j                  dd      }t        t	        |d         t	        |d   d d j                  dd                  cY S # t        $ rJ 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   s    	"IIOO%%	)9.ym<==Y++ 
		OOC+ESq]Ca!0B0B1c0J,KLL 	y!Bzz"~B #6ym!DEEI	
s1   A 	C<AB%"C<%AC83C<7C88C<c                 n    d}||kD  r'| |dz
  |z
     dk(  r|dz  }||kD  r| |dz
  |z
     dk(  r|dz  dk(  S )Nr   r7   r   r    )r   charposnum_bslashess      r   _is_character_escapedrG   l   s_    L\!1|+,4 \!1|+,4!q  r   c                 H   d}g }g }i }d}| D ]  }|dk(  r|dk(  rd}nyd}|j                  |       nd|dk(  r|dk(  rd}nV|j                  |       nC|dk(  r|dk(  rd	}n5t        d
| z         |d	k(  r|dk(  rd}n|dk(  radj                  |      }t        j                  |      st        d| z         ||v rt        d| z         dj                  |      ||<   g }g }d}n|j                  |       n|dk(  r|dk(  rd}n|dk(  rd}nt        d
| z         |dk(  r\d	}|dk(  r|j                  d       n`|dk(  r|j                  d       nI|dk(  r|j                  d       n2|j                  d|z          n|dk(  r|dk(  r ||fS 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&&s{%#  &k!s{)  &''s{$ !1D!899l"t|)WWY'+11"5$%E%LMM<$%Kd%RSSWWZ0r
	
)!!$'''s{#% !1D!899'' Et|!!$'!!$'!!#&!!$+.m#s{ : !!1D!899a
m6n :r   c                    i }| r
d| vrt         | }	 |r |j                  d      }|d | }||dz   d  }|r|d   dk7  rt         |dd  }|r|d   dk(  rt         |r|d   dk(  rt         d}|t        |      k  r6|j                  d|      }t        |d | |      sn|dz  }|t        |      k  r6|dz   }|d| }d|v rt	        |      }t        j                  |      st        d| z         ||v rt        d	| z         |||<   ||dz   d  }|j                  d      rd}	nd}	||	d  }|r|	dk(  rt         |r |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      s   F 4 J84$**3/K#L[1J#K!O$45J A#!5   &ab>L A#!5  <#3s#:   Ac,'' &&sA.,\"1-=qAQ	 c,'' AI$Qy1K{"/<'--j9 !AD!HIIV# !G$!NOO!,F: $IMN3J$$S)

#JK0J jAo  c f  4+d2334s   BD7 .BD7 5D7 7Ec                    d}| j                  d      }|dk(  s|| d | v r<| j                  d      }| d | }| |dz   d  }t        |      \  }}}t        |i |||      S | d | }|| vr%| j	                  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      s   I))C.KbIl{);;::c?IXhlm,%:>%J"y(dBy(;;D KK$	[1_Y/u% >d;QR?CS>TU
T*	)a-.)N!6~!FE9h$y(;;r   c                 8   | j                  dd      }t        |d         }t        |      dk(  r|d d fS g }g }g }d }d}|d   } t        |       }|D ]&  }	|dk(  r$|	dk(  r|sd}|	dk(  rd}|j	                  |	       -|dk(  r|	dk(  rd}:t        d| z         |dk(  r|	dk(  rd	}Ut        d| z         |d	k(  rI|	d
k(  r6| j                  d
      | j                  d      }}
t        | |
dz   |       }d}t        d| z         |dk(  r	|	dk(  sd}|dk(  r|	dk(  rd}t        d| z         |dk(  r0|	dk(  r|st        d| z         |	dk(  rd}|j	                  |	       |dk(  s|j	                  |	       ) |dk(  r|st        d| z         |dk(  r|st        d| z         |dv rt        d| z         t        |      }d }|Rt        d |j                         D              }|dkD  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   P   K   | ]  \  }}t        |      t        |      z      y wr!   )r]   ).0kvs      r   	<genexpr>z(_parse_remaining_text.<locals>.<genexpr>c  s      R$!Qc!fs1voRs   $&   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o%s{/ !1D!899--s{)-C$++c:JY"/[1_Y0O"P. !1D!899,,s{,**s{' !1D!899o%s{> !1D!899+%%d+))%%d+S),X I)D011 ##,>)D011 bb)D011	)	$BH"R/:O:O:QRRS =DEE(/0
 Hr   c                 @   |dk(  ri S |dk(  r.| j                   |k(  r| j                  j                         }|d= |S |dk(  r| j                  j                         }||= |S |dv r1| j                   |dz   k(  r| j                  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FKK4/MM jM
jMM dG
--&++	AQ2QMM dG==r   c                 >  	
 d }d }	
fd}| D ]  }|j                   t              d  }t        |d      }||k7  s|j                  |k7  r| |        d 
d 	ddddd|}|j                  }|dk(  r`t	        |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 sd|j                  dk  sd | |        y y )Nc                  "    t        d      k7  rt        dz         k7  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         y y )	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;<<%@4GHHu}JTQRRLtSTT8):PSWWXXGG$N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:	1 EF#( GH %EKK	Yahhtn%A1u'+$!a6k !9D!@AAww !?$!FGGFGGE,,GGExGy Hww{$(!C!)F  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}6|j                  d      r2|j                  dd      }t	        |      dk  rt        d|z         |d   |k(  rrt        d|z         |d   |k7  r;| ||	
       |d   }d}
d}	d}d}t               }d}t               }g }|d   g}|d   dk(  rt        d|z         t        |d         }|d   dk(  rM	t        d|z         |d   }	|	dk(  rt        d|z         j                  |	dg      D cg c]  }||z   	 }}M|d   d k(  r
t        d!|z         |d   }
lt        d|z         t        |      }|j                  |vrI| ||	
       |j                  }d}d}
d"}	g }d}d}t               }t               }|j                  g}	d#k(  r||j                  vrt        d$|z         |d%z   |j                  k(  rE|j                  j                  d&d'      d'k(  st        |j                  d&         rt        d(|z         |d%z   |j                  k(  rBt        |j                  t              s(|j                  j                         st        d)|z         |d*z   |j                  k(  s|d+z   |j                  k(  rBt        |j                  t              s(|j                  j                         st        d,|z         |	d-k(  rf||j                  k(  rWd.t        |j                  j                  d/d            cxk  rdk  rn nt        |j                  d/         rt        d0|z         t!        t#        t%        |||	      j'                                     }||k7  r|v rt        d1|z         |J||k(  rE|j(                  du du k7  rt        d2|z         |,||j(                  kD  r|	d3k7  rt        d4|z         t               }|j                  t!        t#        |j                  j'                                     f}|j(                  k7  s|vrj+                  |       j-                  |       |}|j(                  }j-                  |       |	d#k(  r|j                  d5vrt        d6|z         |	d3k(  r|j                  dk7  rt        d7|z         |	d-k(  r,||j                  k(  r|j                  d.k  rt        d8|z         |j                  t	        |      d d9v r-t/        j0                  |j                        rt        d:|z         |j                  t	        |      d d;v r|j                  d.k  rt        d<|z         |j2                  s|	d=v r|j                  j5                  d%      r|	d>v r|j                  j5                  d      rt        d?|z          | ||	
       |st        d@      yc c}w w)AzParse 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                 z   |d}t        j                  |g       dgz         D ].  }| |z   v rt        d| z   |z         j                  | |z          0 |d}|d}|r"| j	                  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  s    ;C-++C4t;< 	*Ff}
* !2T!9F!BCCNN4&=)	*  M<DcDj1@4GHHC//G$NOO11Wd+mS$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: 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   )fdrp   allowed_nameseofr   liner@   r   r   r   r   r   seen_groupsgroup_timestampgroup_timestamp_samplesr&   r   r   	series_idr   r   s                      @@r   r   r     s     DM
CJj)5>9	M,  w@8t9D:TABB2337?C__S!JJsA&E5zA~ !1D!899Qx4G !Dt!KLLQx4#&t]CwOOQx $!e"&*-%'!&q
Qx6! ,$%F%MNN .uQx 8qV#?$%F%MNNAh)#$%@4%GHH3@3D3DS2$3O Pa P PqV##$%F%MNNQx !1D!899"4(F{{-/#&t]CwOO{{ $"&*-%'!e!'j T%> !;d!BCCy FKK/**475@0t1DE !5!<==y FKK/'c:6<<CZCZC\ !Dt!KLLFKK/4)3Cv{{3R'c:6<<CZCZC\ !Cd!JKKy TV[[%85):)::r)J#KPqP0z1JK !;d!BCCf.vtSAGGIJKA Q%ZA4D !<t!CDD Q%Z$$,/T2IJ$%QTX%XYY".?VEUEU3UZ]agZg$%QTX%XYY*-%'eF6==3F3F3H,I&JKI?2iG^6^v&#''	2E$..OOOAj V\\%? !WZ^!^__f}!2 !ID!PQQiDFKK$7FLL1<L !G$!NOO{{3t9:&*eejnjtjtLLk" !G$!NOO{{3t9:&*\\agamampqaq !Lt!STT;;@T@TU^@_{*v{{/C/CH/M !wz~!~ow@r 4T7CC/00 c !Qs%   E'Y+X>7QYY0Y2Y)!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 1 1 #C El^ #  , bjj%86,!?DA4H<>Sl&8vi1r   