grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a ùº†jpåã@s¨dZddlmZddlmZz ddlZWneyBddlZYn0ddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZdZdZdZGd d „d eƒZdS) z" PCP Python Utils Config Routines é)Údeepcopy)Ú OrderedDictN)ÚpmapiZxxxéFc@sŠeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd\dd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd]d+d,„Zd-d.„Zd/d0„Zd1d2„Zd*gfd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„ZGd=d>„d>e ƒZ!d?d@„Z"dAdB„Z#e$dCfdDdE„Z%dFdG„Z&dHdI„Z'e$dCfdJdK„Z(dLdM„Z)dNdO„Z*dPdQ„Z+dRdS„Z,dTdU„Z-dVdW„Z.d^dXdY„Z/d_dZd[„Z0d)S)`ÚpmConfigz Config reader and validator cCshd|_d|_||_g|_g|_g|_g|_g|_tƒ|_ d|_ d|_ g|_ i|_ g|_tƒ|_g|_dS)N)z-?z--helpz-Vz --version)ÚlabelÚ instancesÚunitÚtypeÚwidthÚ precisionÚlimitÚformular)ÚarghelpÚ metricspecÚutilÚpmidsÚdescsÚinstsÚtextsÚlabelsrÚ res_labelsÚ_roundÚ_init_tsÚ _pred_indomÚ _re_cacheÚ_tmpÚ _conf_metricsÚ _prev_insts)Úselfr©r ú2/usr/lib64/python3.9/site-packages/pcp/pmconfig.pyÚ__init__.s zpmConfig.__init__c sH‡fdd„}dD]2}ztt|ƒ}t ||¡Wqty@Yq0qdS)z Set default signal handler csˆj ¡t d¡dS)z Default signal handler rN)rÚfinalizeÚsysÚexit)Z_signumZ_frame©rr r!ÚhandlerVs z,pmConfig.set_signal_handler..handler)ÚSIGHUPÚSIGTERMN)ÚgetattrÚsignalÚ Exception)rr'ZsigZsignumr r&r!Úset_signal_handlerTs   zpmConfig.set_signal_handlercCs | |¡S)z Set default config file )Úset_config_path)rÚdefault_configr r r!Úset_config_filebszpmConfig.set_config_filec CsXd}tj d¡}tj d¡}|D]J}| d|¡}| d|¡}t |tj¡r tj  |¡sbtj  |¡r |}qlq t t j dd…ƒ}|D]Ð}||jvr–dS|dvs¨| d¡r‚zŒ|dvr¼t|ƒ}n| dd d¡}t |tj¡rôtj  |¡�s2tj  |¡�s2tj |¡�sd }nt |tj¡�sd }nd }td ||fƒ‚Wq‚t�yPY�qTYq‚0q‚|S)z Set default config path Nú~ZPCP_SYSCONF_DIRz$HOMEz$PCP_SYSCONF_DIRr)ú-cz--configr2ÚzNo such file or directoryzPermission deniedzNot a regular filez+Failed to read configuration from '%s': %s.)ÚosÚpathÚ expanduserrZ pmContextZ pmGetConfigÚreplaceÚaccessÚR_OKÚisfileÚisdirÚiterr$ÚargvrÚ startswithÚnextÚexistsÚIOErrorÚ StopIteration) rr/ÚconfigZusrdirZsysdirÚconfÚargsÚargÚerrr r r!r.fsH     ÿ ÿ   ÿ ÿzpmConfig.set_config_pathcCsˆg}|jjr„tj |jj¡r,| |jj¡nXtt |jj¡ƒD]D}tj |jj|¡}|  d¡r>t  |tj ¡r>tj |¡r>| |¡q>|S)z' Helper to get individual config files z.conf) rrCr4r5r:ÚappendÚsortedÚlistdirÚjoinÚendswithr8r9)rZ conf_filesÚfÚfnr r r!Ú_get_conf_files�s$ zpmConfig._get_conf_filescCsÈt|ƒ}|dkr<| d¡r0| d¡r0|dd…}||j_dS|dvrHd}|dvrTd}|d krh||j_�n\|d kr¨t|ƒ d ¡dkr�t|ƒ|j_nt|ƒ d d ¡|j_�n|d krÐ|jj   |¡|jj   ¡|j_ nô|dkrø|jj   |¡|jj  ¡|j_nÌ|dk�r |dk�rd|j_nd|j_n¤|dk�rH|dk�r>d|j_nd|j_n||dk�rft|ƒ d ¡|j_n^zt|j|t|ƒƒWnFt�yÂ| d¡�r°| d¡�r°|dd…}t|j||ƒYn0dS)z Set options read from file Úcolxrowú"réÿÿÿÿN)ÚtrueÚTrueÚyZyesZYes)ZfalseÚFalseÚnÚnoZNorÚ speclocalÚderivedú;ú,ÚsamplesÚintervalr ÚrawÚ type_preferr)Ústrr>rLrrPrYÚfindrZr7ÚoptsZpmSetOptionSamplesÚpmGetOptionSamplesr]ÚpmSetOptionIntervalÚpmGetOptionIntervalr^r r`ÚsplitrÚsetattrÚintÚ ValueError)rÚnameÚvaluer r r!Úset_attršsL            zpmConfig.set_attrcCs„| |¡sdS| |¡D]f}||jjvrD| ||¡sDtd||fƒ‚||jjvrf| || ||¡¡q|dkrtd||fƒ‚qdS)z0 Read options from a configuration file section Nz"No value set for option %s in [%s]ÚoptionszUnknown option %s in [%s])Ú has_sectionrnrÚkeysÚgetrjrm)rrCÚsectionÚoptr r r!Úread_section_optionsÉs  zpmConfig.read_section_optionsc Cshtjddkr&tjddkr&t ¡}nt ¡}t|_| ¡D�]$}zl| |¡d}| ||¡t tj dd…ƒD]:}|  d¡rp|dd…|  ¡vrp|dd…}| ||¡qpWq<tj �y}zTt|dƒrÖt|jƒn |jdd}tj d ||t|jƒf¡t d¡WYd}~qÚsectionsÚErrorÚhasattrrxÚerrorsÚstderrÚwriteÚmessager%rj)rrCrDrrrFÚerrorrxr r r!Ú read_optionsÕs,    "ÿzpmConfig.read_optionscCs0tj tjj¡tj tj¡r&t ¡‚tj ¡S)z Read command line options ) rÚc_apiZpmSetOptionFlagsZPM_OPTFLAG_DONEZpmGetOptionsFromListr$r=Ú pmUsageErrÚ pmGetOperandsr&r r r!Ú read_cmd_lineïszpmConfig.read_cmd_linecCspg}t |g¡}t|ƒdD]N}| d¡s4| d¡r@|dd…}| d¡sT| d¡r`|dd…}| |¡q|S)z& Parse user-supplied instances string rrQú'rNrR)ÚcsvÚreaderÚlistr>rLrH)rrrrŽÚinstr r r!Úparse_instancesös    zpmConfig.parse_instancescCsþg}| d¡dkr|d|fSd}| d¡d}|r\t|ƒdkr\|ddksX|ddkr\d}| d¡sp| d¡rÖ| d¡d d¡d}|d}|d| |¡d…}|r¾| |dd …¡}n | |¡}| |d ¡}n |rà|g}| d¡dkrö|d7}||fS) z" Parse instances from metric spec r\rvz,,rrŒrQrNrRr3)ÚcountrgÚlenÚ partitionÚrfindr‘r7)rÚspecrZquotedÚsZinststrÚqr r r!Úparse_metric_spec_instancess( ( z$pmConfig.parse_metric_spec_instancescCsZ|g||<tdt|jƒƒD]:}t||ƒ|kr|dkrF|| g¡q|| d¡qdS)z Parse new verbose metric rrvN)Úranger“rrH)rÚmetricsÚkeyrlÚindexr r r!Úparse_new_verbose_metrics  z!pmConfig.parse_new_verbose_metriccCsÀ| d¡r | d¡r |dd…}|dkrx|jjdurRd||dd||j_q¼|jjd||dd|7_nD|j |¡dkr¤|g|||j |¡d<n||||j |¡d<dS) z& Parse additional verbose metric info rQrrRrNr[rú=)r>rLrrZrr�)rr›rœr–rlr r r!Úparse_verbose_metric_info(s  &z"pmConfig.parse_verbose_metric_infocCsêd}d|vs(d|vr,| d¡d|jvr,d}d|vrRd|vrR| d¡ddkrRd}|rˆ| |d|¡\}}| d¡||<|||d<n^d|vs¤| d¡d|jvr´| |||¡n2| d¡\}}||vrÖtd|ƒ‚| ||||¡d S) z Parse metric information Fr\Ú.rTrrvzUndeclared metric key %sN)Úrsplitrr™rgržrjr )rr›rœrlZcompactr–rr r r!Úparse_metric_info7s$" zpmConfig.parse_metric_infoFc sLˆjj ¡‰ˆs(|s(tj d¡t ¡‚ˆs>|r>ˆjj  d¡‰‡‡fdd„}t ƒ}t ƒ}|ƒ}t ƒ}tj ddkr’tj ddkr’t   ¡}t   ¡}nt   ¡}t   ¡}t|_t|_ˆ ¡D�]B} z| | ¡Wnpt j�y:} zTt| d ƒròt| jƒn | jdd} tj d | | t| jƒf¡t d¡WYd } ~ n d } ~ 00ˆjjdk�r‚| d ¡�r‚t ƒ} | d ¡D]æ} | ˆjjv�ržtj d ¡tj d| ¡t d¡| d | ¡�sÖtj d ¡tj d| | f¡t d¡zˆ | | | d | ¡¡WnXt�yH} z>tj d ¡tj dt| ƒ| d¡t d¡WYd } ~ n d } ~ 00�qf| D].}| |d d…d}| |dd …||<�qR| ¡D]n}| |¡�r¤|  |¡| !|¡| ||<| "|¡D] \} }| #|| | $dd¡¡�qÀ|dv�rŠ|  |¡�qŠq¶|D�]`}||d u�r| |¡�rt ƒ} | |¡D]ò} | || ¡�sv||} tj d ¡tj d| | |f¡t d¡| ˆjjv�s0tˆjdƒ�r¤| ˆjj%v�r¤�q0zˆ | | | || ¡¡Wn`t�y} zF||} tj d ¡tj d| t| ƒd¡t d¡WYd } ~ n d } ~ 00�q0| D].}| |d d…d}| |dd …||<�q(|||<�q|D].}||d u�rhtj d|¡t d¡�qhˆjjdk�rÂ|D]}||ˆjj&|<�qª|D]R}t'||t(ƒ�rì||ˆjj&|<n*||�rÆ||D]}||ˆjj&|<�qþ�qƈjj&�s:tj d¡t d¡t)ˆjj&ƒˆ_*d S)z! Construct and prepare metricset zNo metrics specified. r3csdtƒ}ˆD]T}| d¡r*d||dd…<q ˆ |¡\}}| d¡}||d<|dd…||d<q |S)z# Helper to read command line items rwNrr\rvr)rr>r™rg)ZtempmetÚmetricr–rÚm©r›rr r!Úread_cmd_line_itemsZs  z5pmConfig.prepare_metrics..read_cmd_line_itemsrrurrvrxryNÚglobalz"Failed to read configuration file z)'%s': Section [global] contains options. z''%s': No value set for %s in [global]. z'%s': z. ú%z%%)rnr¨z#'%s': No value set for %s in [%s]. Ú keys_ignorez&Metricset definition ':%s' not found. )+rrcrŠr$rƒr„rr‰ÚcontextZ pmGetChildrenrrzr{r|rar}rOr~r€r�rxr‚r…r%Úglobalsrornrprqr£rjrZremove_sectionZ add_sectionÚitemsÚsetr7rªr›Ú isinstancer�rr)rZpmnsr§ZglobmetZconfmetZcmdlmetZsourcesrCZall_setsrDr†rxZparsemetrœr¤rkrrrlr–r¥r r¦r!Úprepare_metricsQsÊ   "ÿ       $          ÿ ÿ $      zpmConfig.prepare_metricscCst|jdƒr|jjrdSdS)z Check if help texts requested Ú include_textsTF)r�rr±r&r r r!Ú provide_textsÔszpmConfig.provide_textscCst|jdƒr|jjrdSdS)z Check if labels needed Úinclude_labelsTF)r�rr³r&r r r!Úprovide_labelsÚszpmConfig.provide_labelscCsDg}| ¡D]2\}}t|tƒr0| | |¡¡q | ||f¡q |S)z Helper to flatten dict to list )r­r¯ÚdictÚextendÚ_dict_to_flat_listrH)rÚdr­ÚkÚvr r r!r·às  zpmConfig._dict_to_flat_listcCs| ¡}| |¡|S)z Helper to merge label dicts )ÚcopyÚupdate)rZd1Zd2Zd3r r r!Ú merge_labelsês zpmConfig.merge_labelsNTc CsÈ|r|j|}n|jt|jj ¡ƒ |¡}|dtjj fvrF|d}n`|rh||dvrZin |d|}n|dstin |d|}|s’|}|s¦dSn|d}|  ||¡}dd  dd„|  |¡Dƒ¡d S) z Return labels as string Nrrz{}ú{r\css|]\}}d||fVqdS)z '%s':'%s'Nr )Ú.0r¹rºr r r!Ú óz*pmConfig.get_labels_str..ú}) rrr�rr›rpr�rrˆÚ PM_IN_NULLr½rKr·) rr¤r�ÚcurrZcombineÚrefrÚ inst_labelsÚ metric_labelsr r r!Úget_labels_strðs   zpmConfig.get_labels_strcCst|jdƒr|jjrdSdS)z Check if doing live filtering Ú live_filterTF)r�rrÉr&r r r!Údo_live_filteringszpmConfig.do_live_filteringcCst|jdƒr|jjrdSdS)z! Check if doing invert filtering Ú invert_filterTF)r�rrËr&r r r!Údo_invert_filtering szpmConfig.do_invert_filteringcCs.|jjjtjjkr |jj |¡S|jj |¡S)z Get instance domain for metric )rr«r rrˆZPM_CONTEXT_ARCHIVEZpmGetInDomArchiveZ pmGetInDom)rÚdescr r r!Úget_metric_indomszpmConfig.get_metric_indomcCsd|tjjkr|riSgS|r*|jj |¡Sg}|jj |¡}|D]}| ||vrX||ni¡q@|S)z Get instance labels )rrˆÚ PM_INDOM_NULLrr«ZpmGetInstancesLabelsrH)rÚindomrÄrrÆZ indom_labelsÚir r r!Úget_inst_labelss  zpmConfig.get_inst_labelscCsT| d¡r|dd…}n8| d¡r.|dd…}| d¡rD|dd…}tj |¡}|S)z Get process basename ú(rrRú-Nrw)r>rLr4r5Úbasename)rÚprocr r r!Úget_proc_basename$s      zpmConfig.get_proc_basenamec CsH�zÐ|jj |¡d}||jvr&WdS|jj |¡d}|jjtjj krZtjj gdgf}n"|  |¡}|ds|tjj gdgf}|jj tjj tjjtjjtjjtjjtjjtjjfvrÀt tjj¡‚|jsÎ|jjn|j}t|jdƒrú|jjrú|ddsúWdS|�r\|dd�r\| ¡�s\ggg}|D�]}d}d} �zÄ| ¡�rÔd} |dd ¡d ¡�rÔt|dƒD]h\} } |  ¡d} |  ¡�rjt|ƒt| ƒk�rj|d |d| ¡|d |d| ¡d}�qÔ�qj|  d d¡  d d¡  d d¡ !¡�r†d } d |ddv�r†|dd ¡d ¡�r†t|dƒD]R\} } || "|  ¡d¡k�r2|d |d| ¡|d |d| ¡d}�q2|�söd} t# $d|d¡} t|dƒD]D\} } t# %| | ¡�r®|d |d| ¡|d |d| ¡�q®~ WnFt&�y>}z,t'j( )d| ||f¡t' *d¡WYd}~n d}~00�q$|d�sTWdSt+|ƒ}|j |¡|j, |¡|j- |¡| .¡�rPd\}}}}zf|jj /|tjj0¡}|jj /|tjj1¡}|jjtjj k�rú|jj 2|tjj0¡}|jj 2|tjj1¡}Wn>tj�y:}z"|j3dtjj4k�r&‚WYd}~n d}~00|j5 ||||g¡i}g}i}| 6¡�r²z6|jj 7|¡}| 8|jjd|d¡}| 8|jj¡}Wnt&�y°Yn0|j9 ||g¡||g|j:|<Wnptj�yB}zTt|jdƒ�r |jj;�r WYd}~dSt'j( )d|t<|ƒf¡t' *d¡WYd}~n d}~00dS)z0 Validate individual metric and get its details rNÚ omit_flatrFr3zInvalid instanceTr¡Ú_rÔzInvalid processú z Invalid regexú\Aú\Zz %s '%s': %s. )NNNNÚignore_incompatúInvalid metric %s (%s). )=rr«Ú pmLookupNamerZ pmLookupDescsÚcontentsrÐrrˆrÏrÃrÎr Z PM_TYPE_32Z PM_TYPE_U32Z PM_TYPE_64Z PM_TYPE_U64Z PM_TYPE_FLOATÚPM_TYPE_DOUBLEÚPM_TYPE_STRINGÚpmErrZ PM_ERR_TYPErrr�rØrÊÚisdigitrgÚ enumeraterirHr7Úisalnumr×ÚreÚcompileÚmatchr,r$rƒr„r%Útuplerrr²Z pmLookupTextZPM_TEXT_ONELINEZ PM_TEXT_HELPZpmLookupInDomTextrEZ PM_ERR_TEXTrr´ÚpmLookupLabelsrÒrrrÝra)rr¤ZpmidrÍr�rÚfoundÚrZhitÚmsgrÑr—ÚspÚcrr†ÚlineZfullZdomlZdomhrÇrÆÚ ri_labelsr r r!Ú check_metric2s¸   ú     ",$       zpmConfig.check_metriccCst|jdƒr|jjrdSdS)z& Check if unknown metrics are ignored Úignore_unknownTF)r�rrôr&r r r!Úignore_unknown_metrics“szpmConfig.ignore_unknown_metricscCsTd|vrP| dd¡ dd¡}| dd¡ dd ¡}| d d ¡ d d ¡}| dd ¡}|S)z Format a metric text label z / ZnanosecÚnsZmicrosecÚusZmillisecÚmsZsecr—ÚminZhourÚhú/)r7)rrr r r!Úformat_metric_label™s  zpmConfig.format_metric_labelc@s eZdZdZdd„Zdd„ZdS)zpmConfig.pmfg_items_to_indomzC Helper to provide consistent interface with pmfg items and indoms cCs ||_dS)z# Initialize an instance with items N©Z_items)rr­r r r!r"¥sz%pmConfig.pmfg_items_to_indom.__init__cCs|jS)z Retrieve the items rýr&r r r!Ú__call__©sz%pmConfig.pmfg_items_to_indom.__call__N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r"rþr r r r!Úpmfg_items_to_indom£srcCstt |t|ƒ¡ƒ|S)z8 Round an integer value up to the nearest upper integer )riÚmathZceilÚfloat)rrlÚupperr r r!Úinteger_roundup­szpmConfig.integer_roundupcCsd}d}�zÒt|jdƒr4|jjr4d}t|jjƒ|j_t|jdƒr\|jjr\d}t|jjƒ|j_t|jdƒr„|jjr„d}t|jjƒ|j_d}t|jdƒrÄ|jjrÄd}t|jjƒ|j_|jjdkrÄt|ƒ‚t|jd ƒ�r|jj�rd }t|jjƒ|j_|jjdk�rt|ƒ‚t|jd ƒ�rH|jj �rHd }t|jj ƒ|j_ |jj dk�rHt|ƒ‚t|jd ƒ�rŠ|jj �rŠd }t|jj ƒ|j_ |jj dk�rŠt|ƒ‚t|jd ƒ�rÚ|jj �rÚd }|jj d k�rÚt|jj ƒ|j_ |jj dk�rÚt|ƒ‚Wn2t�yt j  d||f¡t  d¡Yn0dS)z! Validate common utility options zInteger expectedÚunknownÚrankÚ limit_filterÚlimit_filter_forcezNon-negative integer expectedr rÚ width_forcer Úprecision_forceÚ repeat_headerÚautoz#Error while reading option %s: %s. rN)r�rr rir r r rjr r r rr$rƒr„r%)rrGÚattrr r r!Úvalidate_common_options±sT  z pmConfig.validate_common_optionsrc#stˆjdƒstˆjƒˆj_tˆjdƒr^ˆjjr^ˆjj d¡D] }|ˆjjvr}t|ƒtˆj0|j1j2ƒk� rˆˆj0|j1j.}ˆjj| dd k� r¾ˆj0|j1j;t jj}ˆj0|j1j.t jj:k� räˆj0|j1j.}ˆjj| d1� rfz>t?ˆjj| d1ƒˆjj| d1<ˆjj| d1d k� r2t‚Wn.t� ybtj d2| ¡t d ¡Yn0n4tˆjd3ƒ� rŠˆjj@ˆjj| d1<nd ˆjj| d1<tˆjd4ƒ� rʈjjAdu� rʈjjAˆjj| d1<ˆjj| d1� süt"ˆjj| d ƒˆjj| d1<ˆjj| d1t"tBƒk� r*t"tBƒˆjj| d1<ˆjj| d5� r’z$t?ˆjj| d5ƒˆjj| d6<Wn.t� yŽtj d2| ¡t d ¡Yn0n4tˆjd7ƒ� r¶ˆjjCˆjj| d6<ndˆjj| d6<tˆjd8ƒ� röˆjjDdu� röˆjjDˆjj| d6<dˆjj| d5<ˆjj| d9� rnz$t?ˆjj| d9ƒˆjj| d9<Wn.t� yjtj d:| ¡t d ¡Yn0n"tˆjd;ƒ� r�ˆjjEˆjj| d9<tˆjd<ƒ� r¼ˆjjF� r¼ˆjjFˆjj| d9<ˆj0|j1j.t jj:k� rädˆjj| d9<�z*g}tGd |ƒ}ˆjj| d)d }|�rZˆjj| d �rZd }g}t)d t"ˆj%|d ƒƒD]ª}zZˆjjH I| ||ˆj%|d |¡} | *ˆj%|d |ˆj%|d || f¡|d 7}WnHt j �yè}z,|jd t jjJk�rÊ‚| *|¡WYd}~n d}~00�qB|d k�rBtK|ƒD]@}!ˆj%|d |!=ˆj%|d |!=ˆ L¡�rˆjM|d |!=�qˆ N|¡ˆjj| d5<n ˆjjH O| |||¡ˆjj| d5<ˆ P¡�rzDgˆjQ| <ˆjj| d D]$}"ˆjQ|  *tR Sd=|"d>¡¡�q WnDt�y }z*tj d?|"|f¡t d ¡WYd}~n d}~00Wn8t�yHtˆjd@ƒ�rBˆjjT�rB||| <n‚Yn0�qÜtK|ƒD]`} ˆj#|| =ˆj0|| =ˆj%|| =ˆ U¡�r”ˆjV|| =ˆ L¡�rªˆjM|| =ˆjj| =�qV~ˆjj�sòˆ !¡�sÜtj dA¡n tj dB¡t d ¡tˆjdƒ�rˆjj�rˆ W¡dS)Cz Validate the metricset Ú leaf_onlyÚ predicater\r3Nr[rûr¡z*Failed to load derived metric definitions zfrom file '%s': %s. rrŸrz'Failed to register derived metric: %s. z+Invalid syntax (expected metric=expression)zUnidentified errorcsF|ˆjkr.|ˆjjvrBtˆˆjƒˆjj|<ntˆ|ƒˆjj|<dS)z( Helper to support non-leaf metricspecs N)rrr›r)r¤r¦r r!Úmetric_base_checks  z4pmConfig.validate_metrics..metric_base_checkFTrÞzNo matching instances found. z Requested global instances:ééþÿÿÿrRièr`rur_r ÚoutputÚarchivecSs&|jdkr"|jdkr"|jdkr"dSdS)z Test count dimension rrTF)ÚdimCountÚdimSpaceÚdimTime©r r r r!Úis_countvs ÿþz+pmConfig.validate_metrics..is_countcSs&|jdkr"|jdkr"|jdkr"dSdS)z Test space dimension rrTF)rrrrr r r!Úis_space~s ÿþz+pmConfig.validate_metrics..is_spacecSs&|jdkr"|jdkr"|jdkr"dSdS)z Test time dimension rrTF)rrrrr r r!Úis_time†s ÿþz*pmConfig.validate_metrics..is_timeÚcount_scale_forcervÚ count_scaleÚspace_scale_forceÚ space_scaleÚtime_scale_forceÚ time_scalez / sz%s: %s. éz"Non-negative integer expected: %s r r éér r ézInteger expected: %s r r rÛrÜzInvalid regex '%s': %s. rÝzNo compatible metrics found. zNot one known metric found. )Xr�rrrr›rrgrZÚfilterr>r«ZpmLoadDerivedConfigrrãr$rƒr„rar%rßÚstriprErˆZ PM_ERR_NAMEr…ZpmRegisterDerivedrjr,rrr�rZpmTraversePMNSrõr“rrórrÚprintråršrHrÃrr`r rrràZunitsr r!r"r#r$r%ZpmParseUnitsStrrâZsemZPM_SEM_COUNTERrürárir r ÚTRUNCr r r r ÚmaxÚpmfgZ extend_itemZ PM_ERR_CONVÚreversedr´rrZ extend_indomrÊrrçrèrÝr²rÚvalidate_predicate)#rÚ curr_instsÚ max_instsrrZr†rGÚexprrkZerror2rr¤ÚignoreÚlZ dynamic_instsZincompat_metricsrÑr�r¥rrrr rZpmunitZmultZmtyper­ZscaleZmitemsZvanishedÚjÚitemrºrír r¦r!Úvalidate_metricsÞs    "  ö2 þ  .  $     & ÿ þ þ  ÿ ÿ ÿÿþý $ ÿ  $$ ", $   ÿ  &$              zpmConfig.validate_metricscCsl|jj ¡�r |jj ¡dur$d}nt|jj ¡ƒ}t|jj ¡ƒ||j_|jj ¡r¾|jj ¡|j_t d|jjƒ|j_t|jjƒ|jjd|j_ |jj  t |jj ƒ¡|jj  ¡|j_ n`|jj  ¡|j_ |jj sät d¡|j_ z$t|jjt|jj ƒdƒ|j_Wnt�yYn0n |jj ¡|j_|jj  ¡|j_ t|jj ƒdk�rhtj d¡t d¡dS)z Finalize util options Nrrvrz$Interval must be greater than zero. )rrcZpmGetOptionFinishOptargZpmGetOptionOriginrÚpmGetOptionFinishZruntimerdr]r.r^rerarfrZtimevalrir,r$rƒr„r%)rÚoriginr r r!Úfinalize_optionsAs. $ zpmConfig.finalize_optionscCsHtƒ|j_g|_g|_g|_g|_g|_tƒ|_|jj   ¡d|j_ dS)z Clear metricset N) rrr›rrrrrrr/ÚclearÚpmfg_tsr&r r r!Ú clear_metrics`s  zpmConfig.clear_metricscCs(| ¡|jj ¡|j_| ||¡dS)z Update metricset N)r?rr/Zextend_timestampr>r9)rr2r3r r r!Úupdate_metricslszpmConfig.update_metricscCst|jdƒr|jjSdS)zV Action to take when namespace change occurs: ignore=0, abort=1, update=2 Ú names_changer)r�rrAr&r r r!Únames_change_actionrs zpmConfig.names_change_actionc Csæz|jj ¡}Wnltjy|}zR|jdtjjkrBWYd}~dS|jdtjjkrdt tjjd¡‚|‚WYd}~n d}~00|jj s¶|j  ¡  d¡}|jj   ¡}t|ƒt|ƒkr¶dS|tjj@râ| ¡}|dkrÖdS|d krâdSdS) z2 Sample using fetchgroup and handle special cases rNrRz+ No metrics or instances to report present.z%srréýÿÿÿrv)rr/ÚfetchrrãrErˆZ PM_ERR_EOLZPM_ERR_TOOSMALLZinterpolr>Ústrftimercr:rZPMCD_NAMES_CHANGErB)rÚstater†ZsampleZfinishÚactionr r r!rDys, ÿ  zpmConfig.fetchcCsd|jd7_|js*t|j ¡ d¡ƒ|_|jt|jjƒ|j}|t ¡}|dkr`t |¡dS)z Pause before next sampling rz%s.%frN) rrrrr>rEr^ÚtimeÚsleep)rÚwakeuprIr r r!Úpause—s zpmConfig.pausecCsž|j|sdS|jj|dD]X}| dd¡ dd¡ dd¡ ¡rd|vr| ¡d ¡r|| | ¡d¡krdSq|j|D]}t  ||¡r‚dSq‚d S) z/ Filter instance name against metric instances Trr¡r3rÙrÔrÚrF) rrr›r7rærgrär×rçré)rr¤rkrírðr r r!Úfilter_instance¥s   zpmConfig.filter_instancecCsB|jjs |St|jjƒ}t|jjdkƒ}t|dd„|d�d|…S)z Rank instances rcSs|dS)Nrvr )rlr r r!Ú¼rÁzpmConfig.rank..)rœÚreverseN)rr ÚabsÚboolrI)rrr Zrevsr r r!r ¶s  z pmConfig.rankcCsÆ|jj d¡D]²}||jjvr8tj d|¡t d¡t|jj  ¡ƒ  |¡}|j   |j |jj¡|j|ddtjjkr”tj d¡t d¡|j |jjtjjkrtj d¡t d¡qdS)z- Validate predicate filter reference metrics r\z"Predicate metric %s filtered out. rrz&Predicate metric must have instances. z)Predicate metric values must be numeric. N)rrrgr›r$rƒr„r%r�rpr�rrHrràrÐrrrˆrÃr râ)rrrÑr r r!r1¾s     zpmConfig.validate_predicatecCs | |¡S)z. Deprecated, use get_ranked_results() instead )Úget_ranked_results)rÚ valid_onlyr r r!Úget_sorted_resultsÑszpmConfig.get_sorted_resultsc sbtƒ‰tˆjdƒr*ˆjjr*ˆjj d¡}nd}ˆ ¡o>ˆ ¡ }tˆjjƒD�] \}‰gˆˆ<zèˆjjˆdƒD]Ð\}}}z°|t j j kr’|s’Wqr|r²|t j j kr²ˆ  ˆ|¡s²Wqr|ƒ}ˆjjˆd�rˆ|v�rˆjjˆd‰ˆdkrú|ˆkrúWqrnˆdk�r|t ˆƒk�rWqrˆˆ |||f¡Wqrt�y@Yqr0qrWnt�yZYn0|rLˆˆsLˆˆ=qLˆ ¡�r€‡fdd„ˆDƒ} ˆj| k�r€ˆj} tƒˆ_| ˆ_ˆD]Ήd } ˆ| v�r&| ˆd} | ˆd  ¡‰ˆˆ�rüttˆˆŽƒdni} t‡fd d „| Dƒƒ�rP| ˆd } n*tˆjj ¡ƒ ˆ¡}ˆjj ˆj|¡} | d u�rnˆ ˆj|jj¡} | | gˆjˆ<�q°ˆ�sŠˆS|�rìi‰t|ƒD]Z\}}ˆ ˆ|¡ˆ|<ˆj |‰ˆˆv�rÒgˆˆ<ˆˆ !‡‡fd d „ˆ|Dƒ¡�qœˆD]쉈|v�rzˆjjˆd�rüˆjjˆd‰ˆdk�rR‡fdd„ˆˆDƒˆˆ<n$ˆdk�rü‡fdd„ˆˆDƒˆˆ<�qütˆjj ¡ƒ ˆ¡}ˆj|jjˆj v�r¼ˆ ˆˆ¡ˆˆ<�qüˆj|jj‰‡‡fdd„ˆˆDƒˆˆ<�qün6tˆjdƒ�r"ˆjj�r"ˆD]‰ˆ ˆˆ¡ˆˆ<�qˆ ¡�r^ˆ ¡�r^ˆD]"‰‡‡fdd„ˆˆDƒˆˆ<�q:ˆS)z! Get filtered and ranked results rr\r r'r)rcs,g|]$}ˆ|r|ttˆ|Žƒdf‘qS©r)r�Úzip)r¿r¤)Úresultsr r!Ú úrÁz/pmConfig.get_ranked_results..Nrc3s|]}|ˆvVqdS)Nr )r¿r�)Ú prev_instsr r!rÀrÁz.pmConfig.get_ranked_results..c3s&|]}|dˆˆvr|dVqdS)rNr ©r¿Úx)ÚpÚ pred_instsr r!rÀrÁcsg|]}|dˆkr|‘qS©rvr rY©r r r!rW!rÁcs g|]}|dtˆƒkr|‘qSr])rOrYr^r r!rW#rÁcs g|]}|dˆˆvr|‘qSrTr rY)Ú inst_indexr\r r!rW*rÁr cs g|]}ˆ ˆ|d¡r|‘qS)r)rLrY)r¤rr r!rW2rÁ)"rr�rrrgrÊrÌrår›rrˆrÃrLrOrHr,r´rrrpr�rUÚallr�r«rërrÒrràrÐr rr¶)rrRZ predicatesZearly_live_filterrÑr�rkÚvalrlrZ prev_labelsròrÇr2rr )r_r r¤r[r\rXrVrr!rQÕs¤ ÿ       "   &   " zpmConfig.get_ranked_results)F)NTT)F)F)1rÿrrrr"r-r0r.rOrmrtr‡r‹r‘r™ržr r£r°r²r´r·r½rÈrÊrÌrÎrÒr×rórõrüÚobjectrrrÚ CURR_INSTSr9r<r?r@rBrDrKrLr r1rSrQr r r r!r,s^&' /       a  -e  r)rr»rÚ collectionsrZ configparserr{Ú ImportErrorr+rHrr�r$r4rçZpcprr-ZVERSIONrcrbrr r r r!Ús$