g dddlZddlZddlmZmZmZmZmZm Z m Z ddl m Z ddl mZdedee fdZd d d d Zd eedefdZej&dZej&dZdedefdZdedefdZdededefdZdedeeeffdZdede eeeffdZdedefdZde dee fdZy)N)DictIterableListMatchOptionalTextIOTuple)Metric)Sampletextreturnc#\Kttj|Ed{y7w)z]Parse Prometheus text format from a unicode string. See text_fd_to_metric_families. N)text_fd_to_metric_familiesStringIO)r s G/opt/hc_python/lib/python3.12/site-packages/prometheus_client/parser.pytext_string_to_metric_familiesr s! *(*;*;D*ABBBs ",*,\ ")z\\z\nz\"matchc2t|jdS)Nr)ESCAPE_SEQUENCESgroup)rs rreplace_escape_sequencers EKKN ++z\\[\\n]z\\[\\n"]sc6tjt|SN)HELP_ESCAPING_REsubrrs r_replace_help_escapingr# s    7 ;;rc6tjt|Sr) ESCAPING_REr!rr"s r_replace_escapingr&$s ??2A 66rcharposcnd}||kDr'||dz |z dk(r|dz }||kDr||dz |z dk(r|dzdk(S)Nrr r)rr' num_bslashess r_is_character_escapedr,(s_L \ !1|+,4  \ !1|+,4 ! q  r labels_stringc.i}d|vr|Sd}d|vrd}|} |r|jd}|d|}||dzdj}|jddz}||d}d}|t|kr3|jd|}t||sn|dz }|t|kr3|dz} ||| } |r t | } | ||j <|| dzd}|j ddz} || dj}|r|S#t$rtd |zwxYw) N=FrTr rr,zInvalid labels: %s)indexlstriplenr,r&stripfind ValueError) r-labelsescaping sub_labels value_start label_name quote_start value_substri quote_end label_value next_commas r _parse_labelsrB0stF - H }J#?$**3/K#L[1J#K!O$45<<>J$**3/!3K%kl3LAc,'' &&sA.,\1=Q c,''AI$[;K/ < )4F:##% &$IMN3J#-1J#JK0779J9< ?- =>>?sB C<AC<:C<<Dc:|j}d}||vrd}|j|Dcgc]#}|js|j%}}|s t|dfSt|d}t |dkDrt|ddz nd}||fScc}w)N  rr i)r2splitr4floatr3)r separatorvaluevalues timestamps r_parse_value_and_timestamprMcs  AI )*); M);u{{}ekkm);F M Qx~ &) E.1&kAovbz"T)4I )  Ns BBcl |jd|jd}}|d|j}||dz|}t||dzd\}}t |t |||S#t $r@d}||vrd}|j|}|d|}t||d\}}t |i||cYSwxYw)N{}r rDrE)r1rindexr4rMr rBr6) r label_start label_endnamelabelrJrLrIname_ends r _parse_samplerWps2!%C$++c2BY L[!'')[1_Y/5d9q=>6JKydM%0%CC  2 D I::i(IX5d89oFydBy11 2sA'A**AB32B3fdc #\Kd}d}d}g}g}dtdtdtdttdtf d}|D]W}|j }|j d r|j d d }t|d krF|d dk(rI|d |k7r!|dk7r ||||||d }d}g}|d g}t|dk(rt|d }d}|d dk(rY|d |k7r|dk7r ||||||d }d}g}|d }dgdggdgddj|dg}|D cgc]} || z }} |dk(rt|} | j|vr/|dk7r |||||d}d}d}g}g}|| d||| gG|j| Z|dk7r|||||y y cc} ww)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. untypedrT documentationtypsamplesrc |dk(rF|jdr|dd}n/g}|D](}|jt|ddzg|dd|}*t|||}||_|S)Ncounter_totalirr )endswithappendr r r^)rTr\r]r^ new_samplesrmetrics r build_metricz0text_fd_to_metric_families..build_metricsy ) }}X&CRy  A&&vadXo'F!"'FG)G!mS1  r#Nr)r HELPTYPE)_count_sumrZ)rlrm_bucket)r`gaugesummary histogramr) strrr r r4 startswithrGr3r#getrWrTrc) rXrTr\r]r^ allowed_namesrflinepartsnsamples rrrs+ DM CGM 3 s  tF| X^ zz| ??3 JJtQ'E5zA~Qx6!8t#rz*4WMM 8D#C G%*1XJMu:?$:58$DM$&MqV#8t#rz*4WMM 8D$&M GAh "t T5!> ! #cB4.  4A A=a= A RZ "4(F{{-/2:&t]CII "  " "6!9mS6(KKv&or rz4W==-!BsDF,! F'-A?F,) iorretypingrrrrrrr metrics_corer r^r rrrrrcompiler r%r#r&intboolr,rBrHrMrWrr*rrrs- GGG CC&1AC   ,5:,#,2::j)bjj% 6X>hv.>X>r