
    iogp                         S r SSKJr  SSKJr   SSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKJr  SrSrSr " S	 S
\5      rg! \ a    SSKr N@f = f)z!PCP Python Utils Config Routines     )deepcopy)OrderedDictN)pmapixxx   Fc                   R   \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS3S jrS rS rS rS rS4S jrS rS rS rS/ 4S jrS rS rS rS  r  " S! S"\!5      r"S# r#S$ r$\%S%4S& jr&S' r'S( r(\%S%4S) jr)S* r*S+ r+S, r,S- r-S. r.S/ r/S3S0 jr0S3S1 jr1S2r2g)5pmConfig,   zConfig reader and validator c                    SU l         SU l        Xl        / U l        / U l        / U l        / U l        / U l        [        5       U l	        SU l
        S U l        / U l        0 U l        / U l        [        5       U l        / U l        g )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   s     ./usr/lib/python3/dist-packages/pcp/pmconfig.py__init__pmConfig.__init__.   s    :E 	 



%-    	 )]     c                    ^  U 4S jnS H*  n [        [        U5      n[        R                  " X15        M,     g! [         a     M<  f = f)zSet default signal handler c                 f   > TR                   R                  5         [        R                  " S5        g)zDefault signal handler r   N)r   finalizesysexit)_signum_framer$   s     r%   handler,pmConfig.set_signal_handler.<locals>.handlerV   s    II HHQKr(   )SIGHUPSIGTERMN)getattrsignal	Exception)r$   r0   sigsignums   `   r%   set_signal_handlerpmConfig.set_signal_handlerT   sE    	 'C -f. '  s   &9
AAc                 $    U R                  U5      $ )zSet default config file )set_config_path)r$   default_configs     r%   set_config_filepmConfig.set_config_fileb   s    ##N33r(   c                    Sn[         R                  R                  S5      n[        R                  R                  S5      nU H  nUR                  SU5      nUR                  SU5      n[         R                  " U[         R                  5      (       d  MS  [         R                  R                  U5      (       d&  [         R                  R                  U5      (       d  M  Un  O   [        [        R                  SS 5      nU GH8  nXpR                  ;   a    gUS;   d  UR                  S5      (       d  M3   US;   a  [!        U5      nOUR                  SS	S5      n[         R                  " U[         R                  5      (       aH  [         R                  R                  U5      (       d  [         R                  R                  U5      (       dj  [         R                  R#                  U5      (       d  S
nO/[         R                  " U[         R                  5      (       d  SnOSn[%        SU< SU< S35      eGM8  GM;     U$ ! [&         a       U$ f = f)zSet default config path N~PCP_SYSCONF_DIRz$HOMEz$PCP_SYSCONF_DIRr   )-cz--configrC    zNo such file or directoryzPermission deniedzNot a regular filez#Failed to read configuration from '':
.)ospath
expanduserr   	pmContextpmGetConfigreplaceaccessR_OKisfileisdiriterr,   argvr   
startswithnextexistsIOErrorStopIteration)	r$   r=   configusrdirsysdirconfargsargerrs	            r%   r<   pmConfig.set_config_pathf   s   ##C(,,->?"D<<0D<< 2F;Dyyrww''t$$d(;(; # CHHQRL!Cll"((CNN4,@,@00!%d!$T2q!999VRWW55GGNN622bggmmF6K6K!ww~~f55"=C!#6277!;!;"5C"6C%X^`c&dee 7L2 *  % s   8DI
IIc                    / nU R                   R                  (       GaH  [        R                  R	                  U R                   R                  5      (       a'  UR                  U R                   R                  5        U$ [        [        R                  " U R                   R                  5      5       H  n[        R                  R                  U R                   R                  U5      nUR                  S5      (       d  MO  [        R                  " U[        R                  5      (       d  M{  [        R                  R	                  U5      (       d  M  UR                  U5        M     U$ )z&Helper to get individual config files z.conf)r   rX   rG   rH   rO   appendsortedlistdirjoinendswithrM   rN   )r$   
conf_filesffns       r%   _get_conf_filespmConfig._get_conf_files   s    
99ww~~dii..//!!$))"2"23 	  

499+;+; <=Adii&6&6:B{{7++		"bgg0F0F277>>Z\K]K]"))"- > r(   c                 X   [        U5      nUS:X  aB  UR                  S5      (       a  UR                  S5      (       a  USS nX R                  l        gUS;   a  SnUS;   a  SnUS	:X  a  X R                  l        gUS
:X  ad  [        U5      R                  S5      S:w  a  [        U5      U R                  l        g[        U5      R                  SS5      U R                  l        gUS:X  aY  U R                  R                  R                  U5        U R                  R                  R                  5       U R                  l        gUS:X  aY  U R                  R                  R                  U5        U R                  R                  R                  5       U R                  l        gUS:X  a*  US:X  a  SU R                  l        gSU R                  l        gUS:X  a*  US:X  a  SU R                  l        gSU R                  l        gUS:X  a*  [        U5      R%                  S5      U R                  l        g [)        U R                  U[+        U5      5        g! [,         aJ    UR                  S5      (       a  UR                  S5      (       a  USS n[)        U R                  X5         gf = f)zSet options read from file colxrow"r   N)trueTrueyyesYes)falseFalsennoNor   	speclocalderived;,samplesintervalr   rawtype_preferr   )strrS   re   r   rl   ry   findrz   rL   optspmSetOptionSamplespmGetOptionSamplesr}   pmSetOptionIntervalpmGetOptionIntervalr~   r   r   splitr   setattrint
ValueError)r$   namevalues      r%   set_attrpmConfig.set_attr   s   E
9 $$)<)<a %II77E77E;"'IIY5zs#r)$'J		!$'J$6$6sC$@		!YIINN--e4 $		 A A CDIIZIINN..u5!%!C!C!EDIIV^~!"		!"		]"~()		%()		%[ "%e*"2"23"7DII0		4U4 0##C((U^^C-@-@!!BKE		4/0s   4 I AJ)(J)c                    UR                  U5      (       d  gUR                  U5       H  nX0R                  R                  ;   a*  UR	                  X#5      (       d  [        SU< SU< S35      eX0R                  R                  ;   a"  U R                  X1R	                  X#5      5        M  US:X  d  M  [        SU< SU< S35      e   g)z/Read options from a configuration file section NzNo value set for option  in []optionszUnknown option )has_sectionr   r   keysgetr   r   )r$   rX   sectionopts       r%   read_section_optionspmConfig.read_section_options   s    !!'**>>'*Ciinn$VZZ-E-E g!VWWiinn$c::g#;<I% W!MNN +r(   c                    [         R                  S   S:  a-  [         R                  S   S:  a  [        R                  " 5       nO[        R                  " 5       n[        Ul        U R                  5        H  n UR                  U5        SnU R                  X5        [        [         R                  SS 5       HJ  nUR                  S5      (       d  M  USS UR                  5       ;   d  M4  USS nU R                  X5        ML     M     g! [        R                   a  n[        US5      (       a  [	        UR                  5      OUR                   S   S   n[         R"                  R%                  S	U< S
U< S[	        UR&                  5      < S35        [         R(                  " S5         SnAGM?  SnAf[*         aJ  n[         R"                  R%                  S	U< SU< S35        [         R(                  " S5         SnAGM  SnAff = f)z%Read options from configuration file r      r      r   N:lineno#Failed to read configuration file '', line :

rE   .
)r,   version_infoConfigParserSafeConfigParserr   optionxformri   readr   rQ   rR   rS   sectionsErrorhasattrr   errorsstderrwritemessager-   r   )r$   rX   r[   r   r]   errorr   s          r%   read_optionspmConfig.read_options   s    A!#(8(8(;q(@!..0F!224F ((*DD!#))&:-C~~c**s12w&//:K/K"%ab'11&B . +  %% .5eX.F.FU\\*ELLYZO\]L^

  $(&#emm2D"F G 

  UY[`!abs2   9ADD-DH BF44H>HHc                 :   [         R                  R                  [         R                  R                  5        [         R                  R	                  [
        R                  5      (       a  [         R                  " 5       e[         R                  R                  5       $ )zRead command line options )	r   c_apipmSetOptionFlagsPM_OPTFLAG_DONEpmGetOptionsFromListr,   rR   
pmUsageErrpmGetOperandsr$   s    r%   read_cmd_linepmConfig.read_cmd_line   sY    $$U[[%@%@A;;++CHH55""$${{((**r(   c                 H   / n[         R                  " U/5      n[        U5      S    Hv  nUR                  S5      (       d  UR                  S5      (       a  USS nUR	                  S5      (       d  UR	                  S5      (       a  USS nUR                  U5        Mx     U$ )z%Parse user-supplied instances string r   rm   'r   Nrn   )csvreaderlistrS   re   ra   )r$   r   r   r   insts        r%   parse_instancespmConfig.parse_instances   s    YK(LODs##ts';';ABx}}S!!T]]3%7%7CRyLL $ r(   c                 h   / nUR                  S5      S:  a  US-   U4$ SnUR                  S5      S   nU(       a#  [        U5      S:  a  US   S:X  d	  US   S:X  a  SnUR                  S5      (       d  UR                  S5      (       a  UR                  S5      S   R                  S5      S   nUS   nUSUR	                  U5      S-    nU(       a  U R                  USS	 5      nOU R                  U5      nUR                  US
5      nO
U(       a  U/nUR                  S5      S:  a  US-  nX4$ )z!Parse instances from metric spec r|   r   z,,r   r   rm   r   Nrn   rD   )countr   len	partitionrfindr   rL   )r$   specr   quotedsinststrqs          r%   parse_metric_spec_instances$pmConfig.parse_metric_spec_instances  s)   ::c?Q$;%% JJsOAQ!1!F::c??djjoonnS)!,66s;A>G
A1w}}Q/12G,,WQr];,,W5<<,D::c?QDLD{r(   c                     U/X'   [        S[        U R                  5      5       HD  n[        X   5      U::  d  M  US:X  a  X   R                  / 5        M1  X   R                  S5        MF     g)zParse new verbose metric r   r   N)ranger   r   ra   )r$   metricskeyr   indexs        r%   parse_new_verbose_metric!pmConfig.parse_new_verbose_metric  s[    w1c$//23E7< E)A:L''+L''- 4r(   c                 
   UR                  S5      (       a  UR                  S5      (       a  USS nUS:X  ae  U R                  R                  c   SX   S   -   S-   U-   U R                  l        gU R                  =R                  SX   S   -   S-   U-   -  sl        gU R                  R                  U5      S:X  a%  U/X   U R                  R                  U5      S-   '   gXAU   U R                  R                  U5      S-   '   g)	z%Parse additional verbose metric info rm   r   rn   r   Nr{   r   =)rS   re   r   rz   r   r   )r$   r   r   r   r   s        r%   parse_verbose_metric_info"pmConfig.parse_verbose_metric_info(  s    C  U^^C%8%8!BKE9yy  ($'',q/$9C$?%$G		!		!!S7<?%:S%@5%HH!$$T*a/?DgT__2248:;>CT__2248:;r(   c                    SnSU;   d(  SU;   a$  UR                  S5      S   U R                  ;  a  SnSU;   a   SU;   a  UR                  S5      S   S:X  a  SnU(       a4  U R                  US-   U-   5      u  pVUR                  S5      X'   XaU   S'   g	SU;  d"  UR                  S5      S   U R                  ;  a  U R	                  XU5        g	UR                  S5      u  p%X!;  a  [        SU-  5      eU R                  XXS5        g	)
zParse metric information Fr|   rF   r   Tr   r   zUndeclared metric key %sN)rsplitr   r   r   r   r   r   )r$   r   r   r   compactr   r   s          r%   parse_metric_infopmConfig.parse_metric_info7  s     %<C3J3::c?1+=T__+TG%<SCZCJJsOA,>),KG::39u;LMKD::c?GL#CLO #~C!34??!J--gEB  JJsO	%$%?#%EFF..wTIr(   c                 V  ^ ^ T R                   R                  R                  5       mT(       d;  U(       d4  [        R                  R                  S5        [        R                  " 5       eT(       d,  U(       a%  T R                   R                  R                  S5      mUU 4S jn[        5       n[        5       nU" 5       n[        5       n[        R                  S   S:  aB  [        R                  S   S:  a+  [        R                  " 5       n[        R                  " 5       nO*[        R                  " 5       n[        R                  " 5       n[        Ul        [        Ul        T R!                  5        GH:  n	 UR#                  U	5        T R                   R0                  S:X  Ga_  UR3                  S5      (       GaH  [        5       nUR5                  S5       GH  nUT R                   R6                  ;   aW  [        R                  R                  S5        [        R                  R                  SU	-  5        [        R.                  " S5        UR9                  SU5      (       d]  [        R                  R                  S5        [        R                  R                  SU	< SU< S35        [        R.                  " S5         T R;                  XUR9                  SU5      5        GM     U H  nX   SS S   nX   SS X?'   M     UR?                  5        H  nUR3                  U5      (       a  URA                  U5        URC                  U5        XU'   URE                  U5       H)  u  nnURG                  UUURI                  SS5      5        M+     US;  d  M  URA                  U5        M     GM=     U GHW  nUU   b  M  UR3                  U5      (       d  M$  [        5       nUR5                  U5       H  nUR9                  UU5      (       df  UU   n	[        R                  R                  S5        [        R                  R                  SU	< SU< SU< S35        [        R.                  " S5        UT R                   R6                  ;   d5  ['        T R                   S5      (       a  UT R                   RJ                  ;   a  M   T R;                  XUR9                  UU5      5        M     U H  nX   SS S   nX   SS XO'   M     XEU'   GMZ     U HC  nUU   b  M  [        R                  R                  SU-  5        [        R.                  " S5        ME     T R                   R0                  S:X  a$  U H  nX>   T R                   RL                  U'   M      U Hi  n[O        X^   [P        5      (       a  X^   T R                   RL                  U'   M7  X^   (       d  MB  X^    H  nUU   T R                   RL                  U'   M!     Mk     T R                   RL                  (       d5  [        R                  R                  S5        [        R.                  " S5        [S        T R                   RL                  5      T l*        g! [        R$                   a  n
['        U
S5      (       a  [        U
R(                  5      OU
R*                  S   S   n[        R                  R                  S	U	< S
U< S[        U
R,                  5      < S35        [        R.                  " S5         Sn
A
GNSn
A
ff = f! [<         ar  n
[        R                  R                  S5        [        R                  R                  S[        U
5      U	-  -   S-   5        [        R.                  " S5         Sn
A
GM  Sn
A
ff = f! [<         aw  n
UU   n	[        R                  R                  S5        [        R                  R                  SU	-  [        U
5      -   S-   5        [        R.                  " S5         Sn
A
GM2  Sn
A
ff = f)z Construct and prepare metricset zNo metrics specified.
rD   c                     > [        5       n T HT  nUR                  S5      (       a	  SXSS '   M"  TR                  U5      u  p#UR                  S5      nX4S'   USS XS   '   MV     U $ )z"Helper to read command line items r   Nr   r|   r   r   )r   rS   r   r   )tempmetmetricr   r   mr   r$   s        r%   read_cmd_line_items5pmConfig.prepare_metrics.<locals>.read_cmd_line_itemsZ  sq    !mG!$$S))*.G12J'"&"B"B6"JKD

3A aD$%abEGaDM " Nr(   r   r   r   r   r   r   r   r   r   Nglobalz"Failed to read configuration file z)'%s':
Section [global] contains options.
r   z':
No value set for z in [global].
z'%s':
r   %z%%)r   r   r   z].
keys_ignorez&Metricset definition ':%s' not found.
)+r   r   r   r,   r   r   r   r   contextpmGetChildrenr   r   r   r   r   r   ri   r   r   r   r   r   r   r-   globalsr   r   r   r   r   r   r   remove_sectionadd_sectionitemssetrL   r   r   
isinstancer   r   r"   )r$   pmnsr   globmetconfmetcmdlmetsourcesrX   all_setsr[   r   r   parsemetr   r   r   r   r   r   r   r   s   `                   @r%   prepare_metricspmConfig.prepare_metricsQ  s+   ))....0tJJ67""$$4ii''55b9G	 --%'- A!#(8(8(;q(@!..0F#002H!224F#446H" ((*DD! yy  A%%%h//*}H%~~h7$))..0JJ,,-QRJJ,,-Z]a-abHHQK%zz(C88JJ,,-QRJJ,,\`be-fgHHQK( 228&**XWZB[\  8 #+'/3A6(0(8(< #+
 "??,''00++G4$$W-#' "(,,w"7JCLL#u}}S$/GH #8"77))'2 -C +X Dt}$''--*}H'//5'||D#66#*4=DJJ,,-QRJJ,,X\^acg-hiHHQK$))..0#DII}==#I^I^B^$( 228(,,tUXBYZ  6  #+'/3A6(0(8(< #+ %,DM/ 4 Dt}$

  !JT!QR  99!!,3O		!!&) "F'/400,3O		!!&)??$_/6qz		))!, -  yy  JJ67HHQK%dii&7&78q  %% .5eX.F.FU\\*ELLYZO\]L^

  $(&#emm2D"F G	*  * (JJ,,-QRJJ,,YUd9J-JU-RSHHQKK(F  * (#*4=DJJ,,-QRJJ,,Y-=E
-JU-RSHHQKK	(sK   6Y9>"\("^'9\%B\  \%(
^$2A&^^$'
`(1A+`##`(c                 r    [        U R                  S5      (       a  U R                  R                  (       a  gg)zCheck if help texts requested include_textsTF)r   r   r   r   s    r%   provide_textspmConfig.provide_texts  %    499o..4993J3Jr(   c                 r    [        U R                  S5      (       a  U R                  R                  (       a  gg)zCheck if labels needed include_labelsTF)r   r   r  r   s    r%   provide_labelspmConfig.provide_labels  &    499.//DII4L4Lr(   c                     / nUR                  5        HN  u  p4[        U[        5      (       a"  UR                  U R	                  U5      5        M<  UR                  X445        MP     U$ )zHelper to flatten dict to list )r   r   dictextend_dict_to_flat_listra   )r$   dr   kvs        r%   r
  pmConfig._dict_to_flat_list  sR    GGIDA!T""T44Q78aV$	 
 r(   c                 H    UR                  5       nUR                  U5        U$ )zHelper to merge label dicts )copyupdate)r$   d1d2d3s       r%   merge_labelspmConfig.merge_labels  s    WWY
		"	r(   NTc                    U(       a  U R                   U   nOIU R                  [        U R                  R                  R                  5       5      R                  U5         nUS[        R                  R                  4;   a  US   nOVU(       a  X%S   ;  a  0 OUS   U   nOUS   (       d  0 OUS   U   nU(       d  UnU(       d  gOUS   nU R                  X5      nSSR                  S U R                  U5       5       5      -   S-   $ )	zReturn labels as string Nr   r   z{}{r|   c              3   <   #    U  H  u  pS U< SU< S 3v   M     g7f)r   z':'N ).0r  r  s      r%   	<genexpr>*pmConfig.get_labels_str.<locals>.<genexpr>  s     aA`v1Q2A`s   })r   r   r   r   r   r   r   r   r   
PM_IN_NULLr  rd   r
  )	r$   r   r   currcombinerefr   inst_labelsmetric_labelss	            r%   get_labels_strpmConfig.get_labels_str  s    //&)C++d499#4#4#9#9#;<BB6JKCD%++0011VF$(A$6bCF4L(+AbCF4L$  !$A**=FSXXaAXAXY_A`aaadgggr(   c                 r    [        U R                  S5      (       a  U R                  R                  (       a  gg)zCheck if doing live filtering live_filterTF)r   r   r(  r   s    r%   do_live_filteringpmConfig.do_live_filtering  s%    499m,,1F1Fr(   c                 r    [        U R                  S5      (       a  U R                  R                  (       a  gg)z Check if doing invert filtering invert_filterTF)r   r   r,  r   s    r%   do_invert_filteringpmConfig.do_invert_filtering  r  r(   c                    U R                   R                  R                  [        R                  R
                  :X  a%  U R                   R                  R                  U5      $ U R                   R                  R                  U5      $ )zGet instance domain for metric )r   r   r   r   r   PM_CONTEXT_ARCHIVEpmGetInDomArchive
pmGetInDom)r$   descs     r%   get_metric_indompmConfig.get_metric_indom  sZ    99!!U[[%C%CC99$$66t<<yy  ++D11r(   c                 D   U[         R                  R                  :X  a  U(       a  0 $ / $ U(       a%  U R                  R                  R                  U5      $ / nU R                  R                  R                  U5      nU H  nUR                  Xe;   a  XV   O0 5        M     U$ )zGet instance labels )r   r   PM_INDOM_NULLr   r   pmGetInstancesLabelsra   )r$   indomr   r   r#  indom_labelsis          r%   get_inst_labelspmConfig.get_inst_labels  s    EKK---2%2%99$$99%@@yy((==eDA!2C|L r(   c                     UR                  S5      (       a  USS nU$ UR                  S5      (       a  USS nUR                  S5      (       a  USS n[        R                  R	                  U5      nU$ )zGet process basename (r   rn   -Nr   )rS   re   rG   rH   basename)r$   procs     r%   get_proc_basenamepmConfig.get_proc_basename$  sr    ??3":D  s##ABx}}S!!CRy77##D)Dr(   c           
          U R                   R                  R                  U5      S   nX R                  ;   a  gU R                   R                  R	                  U5      S   nUR
                  R                  [        R                  R                  :X  a  [        R                  R                  /S/4nO9U R                  U5      nUS   (       d  [        R                  R                  /S/4nUR
                  R                  [        R                  R                  [        R                  R                  [        R                  R                  [        R                  R                   [        R                  R"                  [        R                  R$                  [        R                  R&                  4;  a.  [        R(                  " [        R                  R*                  5      eU R,                  (       d  U R                   R.                  OU R,                  n[1        U R                   S5      (       a)  U R                   R2                  (       a  US   S   (       d  gU(       Ga  US   S   (       Ga  U R5                  5       (       Gd  / / /nU GHa  nSnSn	 UR7                  5       (       a  Sn	US   S   R9                  5       S   R7                  5       (       a  [;        US   5       H  u  pUR9                  5       S   nUR7                  5       (       d  M/  [=        U5      [=        U5      :X  d  MI  US   R?                  US   U
   5        US   R?                  US   U
   5        Sn  O   URA                  S	S5      RA                  S
S5      RA                  SS5      RC                  5       (       a  Sn	SUS   S   ;   a  US   S   R9                  5       S   R7                  5       (       at  [;        US   5       Hb  u  pXpRE                  UR9                  5       S   5      :X  d  M,  US   R?                  US   U
   5        US   R?                  US   U
   5        SnMd     U(       d  Sn	[F        RH                  " SU-   S-   5      n[;        US   5       HV  u  p[F        RJ                  " X5      (       d  M"  US   R?                  US   U
   5        US   R?                  US   U
   5        MX     AGMa  GMd     US   (       d  g[W        U5      nU R                  R?                  U5        U RX                  R?                  U5        U RZ                  R?                  U5        U R]                  5       (       GaQ  Su  nnnn U R                   R                  R_                  U[        R                  R`                  5      nU R                   R                  R_                  U[        R                  Rb                  5      nUR
                  R                  [        R                  R                  :w  a|  U R                   R                  Re                  U[        R                  R`                  5      nU R                   R                  Re                  U[        R                  Rb                  5      nU Rj                  R?                  UUUU/5        0 n/ n0 nU Rm                  5       (       au   U R                   R                  Ro                  U5      nU Rq                  UR
                  R                  SUS   5      nU Rq                  UR
                  R                  5      nU Rr                  R?                  UU/5        UU/U Rt                  U'   g! [L         aM  n[N        RP                  RS                  U	< SU< SU< S35        [N        RT                  " S5         SnAGME  SnAff = f! [        R(                   a7  nURf                  S   [        R                  Rh                  :w  a  e  SnAGN~SnAff = f! [L         a     Nf = f! [        R(                   a  n[1        U R                   S5      (       a   U R                   Rv                  (       a   SnAg[N        RP                  RS                  SU< S[y        U5      < S35        [N        RT                  " S5         SnAgSnAff = f)z/Validate individual metric and get its details r   N	omit_flatr   FrD   zInvalid instanceTrF   _r@  zInvalid process zInvalid regex\A\Zz '': r   )NNNNignore_incompatInvalid metric  ().
)=r   r   pmLookupNamer   pmLookupDescscontentsr9  r   r   r7  r  r4  r   
PM_TYPE_32PM_TYPE_U32
PM_TYPE_64PM_TYPE_U64PM_TYPE_FLOATPM_TYPE_DOUBLEPM_TYPE_STRINGpmErrPM_ERR_TYPEr!   r   r   rF  r)  isdigitr   	enumerater   ra   rL   isalnumrC  recompilematchr6   r,   r   r   r-   tupler   r   r   pmLookupTextPM_TEXT_ONELINEPM_TEXT_HELPpmLookupInDomTextr\   PM_ERR_TEXTr   r  pmLookupLabelsr<  r   r   rL  r   )r$   r   pmidr3  r   r   foundrhitmsgr;  r   spcrr   linefulldomldomhr$  r#  	ri_labelss                         r%   check_metricpmConfig.check_metric2  s   ]	99$$11&9!<Dzz!99$$2248;D}}""ekk&?&??//04&9,,T2Aw"[[334tf=D}}!!%++*@*@*/++*A*A*/++*@*@*/++*A*A*/++*C*C*/++*D*D*/++*D*D*F F kk%++"9"9::3799		++$))Ityy+..4993F3FtTUwWXzT!WQZZ0F0F0H0HR"ACC$99;;"4C#Awqz//1!4<<>>,5d1g,>DA)*1B')zz||A#b'8I(-aQ
(C(-aQ
(C.2(- -? 99S"-55c2>FFsBOWWYY"3C"d1gaj0T!WQZ5E5E5G5J5R5R5T5T,5d1g,>DA'(,B,B1779Q<,P'P(-aQ
(C(-aQ
(C.2	 -?
  #"1C!#EAI,=!>B(1$q'(:#%88B??$)!HOODGAJ$?$)!HOODGAJ$? ); !#  #- #B QxU|JJd#JJd#JJd#!!##)?&dD$99,,99$@[@[\D99,,99$@X@XYD}}**ekk.G.GG#yy00BB4IdIde#yy00BB4IaIab 

!!4tT":;MKI""$$$(II$5$5$D$DT$JM"&"6"6t}}7J7JESWXYSZ"[K $ 4 4T]]5H5H II KK{;<'4i&@DOOF#A % $

((S!U)KL$" {{ zz!}(?(?? @ !  {{ 	tyy"3449R9RJJFCJOPHHQKK		s   7`7 H`7 :`7 A<]?]?/C/]?"B]?19]?*`7 =A9`7 7D*_ !:`7 A4`' .`7 ?
_	A_
`7 _`7 `$-,``7 `$$`7 '
`41`7 3`44`7 7c6cAccc                 r    [        U R                  S5      (       a  U R                  R                  (       a  gg)z%Check if unknown metrics are ignored ignore_unknownTF)r   r   rx  r   s    r%   ignore_unknown_metricspmConfig.ignore_unknown_metrics  r  r(   c                    SU;   ax  UR                  SS5      R                  SS5      nUR                  SS5      R                  SS	5      nUR                  S
S
5      R                  SS5      nUR                  SS5      nU$ )zFormat a metric text label z / nanosecnsmicrosecusmillisecmssecr   minhourh/)rL   )r$   r   s     r%   format_metric_labelpmConfig.format_metric_label  sw     E>MM)T2:::tLEMM*d3;;E3GEMM%/77DEMM%-Er(   c                   $    \ rS rSrSrS rS rSrg)pmConfig.pmfg_items_to_indomi  zBHelper to provide consistent interface with pmfg items and indoms c                     Xl         g)z"Initialize an instance with items N_items)r$   r   s     r%   r&   %pmConfig.pmfg_items_to_indom.__init__  s    Kr(   c                     U R                   $ )zRetrieve the items r  r   s    r%   __call__%pmConfig.pmfg_items_to_indom.__call__  s    ;;r(   r  N)__name__
__module____qualname____firstlineno____doc__r&   r  __static_attributes__r  r(   r%   pmfg_items_to_indomr    s    Q	 	r(   r  c                 ^    [        [        R                  " U[        U5      -  5      5      U-  $ )z7Round an integer value up to the nearest upper integer )r   mathceilfloat)r$   r   uppers      r%   integer_rounduppmConfig.integer_roundup  s$    499UU5\123e;;r(   c                    SnSn [        U R                  S5      (       aK  U R                  R                  (       a0  Sn[        U R                  R                  5      U R                  l        [        U R                  S5      (       aK  U R                  R                  (       a0  Sn[        U R                  R                  5      U R                  l        [        U R                  S5      (       aK  U R                  R
                  (       a0  Sn[        U R                  R
                  5      U R                  l        Sn[        U R                  S5      (       ap  U R                  R                  (       aU  Sn[        U R                  R                  5      U R                  l        U R                  R                  S:  a  [        U5      e[        U R                  S	5      (       ap  U R                  R                  (       aU  S	n[        U R                  R                  5      U R                  l        U R                  R                  S:  a  [        U5      e[        U R                  S
5      (       ap  U R                  R                  (       aU  S
n[        U R                  R                  5      U R                  l	        U R                  R                  S:  a  [        U5      e[        U R                  S5      (       ap  U R                  R                  (       aU  Sn[        U R                  R                  5      U R                  l
        U R                  R                  S:  a  [        U5      e[        U R                  S5      (       a  U R                  R                  (       aq  SnU R                  R                  S:w  aT  [        U R                  R                  5      U R                  l        U R                  R                  S:  a  [        U5      egggg! [         aA    [        R                  R                  SU< SU< S35        [        R                  " S5         gf = f)z Validate common utility options zInteger expectedunknownranklimit_filterlimit_filter_forcezNon-negative integer expectedr   r   width_forcer   precision_forcerepeat_headerautozError while reading option : r   r   N)r   r   r  r   r  r  r   r   r  r   r  r  r,   r   r   r-   )r$   r^   attrs      r%   validate_common_options pmConfig.validate_common_options  s    '	tyy&))diinn!$TYY^^!4		tyy.11dii6L6L%),TYY-C-C)D		&tyy"677DII<X<X+/24993O3O/P		,1Ctyy'**tyy"%diioo"6		99??Q&$S/)tyy-00TYY5J5J$(+DII,A,A(B		%99((1,$S/)tyy+..4993F3F"&)$))*=*=&>		#99&&*$S/)tyy"3449R9R(,/		0I0I,J		)99,,q0$S/)tyy/22tyy7N7N&99**f4.1$))2I2I.JDII+yy..2(o- 3 5 8O2  	JJtSQRHHQK	s   PP AQQr   c           
      ;  ^ ^# [        T R                  S5      (       d$  [        T R                  5      T R                  l        [        T R                  S5      (       a~  T R                  R
                  (       ac  T R                  R
                  R                  S5       H:  nUT R                  R                  ;  d  M  S/ /T R                  R                  U'   M<     T R                  R                  (       Ga  [        ST R                  R                  R                  S5      5       H  nUR                  S5      (       d  UR                  S5      (       a(   T R                  R                  R                  U5        MW  SnSn UR                  SS5      u  pT R                  R                  R'                  UR)                  5       5        U(       a:  [        R                  R!                  SU-  5        [        R$                  " S5        M  M     [        T R                  S5      (       a  T R                  R8                  (       du  T R                  R                  m#[;        5       T R                  l        U#U 4S jn
[=        T#5       H0  nUT l         T R                  R                  RA                  X5        M2     T R                  R                  m#[;        5       T R                  l        T# H  n [E        T RF                  5      nT#U   S   T l        T R                  R                  RA                  UT RH                  5        [E        T RF                  5      U:X  a  Mq  T#U   T R                  R                  U'   M     T RJ                  (       d  T RC                  5       (       dz  [        R                  R!                  S5        T R                  RL                  (       a*  [O        S5        [O        T R                  RL                  5        [        R$                  " S5        U(       + n[;        5       n[Q        T R                  R                  5       GH  u  nn[S        SS5       H  n[E        T R                  R                  U   5      U::  d  M+  US:X  a*  T R                  R                  U   RU                  / 5        M[  T R                  R                  U   RU                  S5        M     T R                  R                  U   S   (       dY  SnUR                  S5       H  nUUS   S-   -  nM     USS UR                  S5      S   -   T R                  R                  U   S'   T R                  R                  U   S   (       d|  T R                  RL                  (       aa  T RJ                  U   S   S   [        R,                  RV                  :w  a0  T R                  RL                  T R                  R                  U   S'   T RJ                  U   S   S   [        R,                  RV                  :X  a  / T R                  R                  U   S'   U(       a+  T RY                  [E        T RJ                  U   S   5      S5      n[        T R                  S5      (       aR  T R                  R                  U   S    (       d1  T R                  RZ                  T R                  R                  U   S '   OYT R                  R                  U   S    S!:X  a  ST R                  R                  U   S '   OST R                  R                  U   S '   [        T R                  S"5      (       a  T R                  R\                  S:X  dU  T R                  R                  U   S    S!:X  d5  [        T R                  S#5      (       a6  T R                  R^                  S$:X  a  ST R                  R                  U   S '   S% nS& nS' nT R`                  U   Rb                  Rd                  nU" U5      (       Ga5  [        T R                  S(5      (       aL  T R                  Rf                  (       a1  T R                  Rf                  T R                  R                  U   S)'   O[        T R                  S*5      (       am  T R                  Rh                  (       aR  T R                  R                  U   S)   (       d1  T R                  Rh                  T R                  R                  U   S)'   OFT R                  R                  U   S)   (       d%  [#        U5      T R                  R                  U   S)'   U" U5      (       Ga5  [        T R                  S+5      (       aL  T R                  Rj                  (       a1  T R                  Rj                  T R                  R                  U   S)'   O[        T R                  S,5      (       am  T R                  Rl                  (       aR  T R                  R                  U   S)   (       d1  T R                  Rl                  T R                  R                  U   S)'   OFT R                  R                  U   S)   (       d%  [#        U5      T R                  R                  U   S)'   U" U5      (       Ga5  [        T R                  S-5      (       aL  T R                  Rn                  (       a1  T R                  Rn                  T R                  R                  U   S)'   O[        T R                  S.5      (       am  T R                  Rp                  (       aR  T R                  R                  U   S)   (       d1  T R                  Rp                  T R                  R                  U   S)'   OFT R                  R                  U   S)   (       d%  [#        U5      T R                  R                  U   S)'   T R                  R                  U   S)   (       d%  [#        U5      T R                  R                  U   S)'   [        T R                  S#5      (       a?  T R                  R^                  S$:X  a%  [#        U5      T R                  R                  U   S)'    T R                  R                  U   S)   nT R                  R                  Rs                  T R                  R                  U   S)   5      u  nnT R                  R                  U   S    S:X  a  T R`                  U   Rb                  R\                  [        R,                  Rt                  :w  a@  T R`                  U   Rv                  [        R,                  Rx                  :X  a  SU;  a  US/-  nT R{                  U5      nUUU4T R                  R                  U   S)'   [        R,                  R|                  n[#        W5      [#        T R`                  U   Rb                  Rd                  5      :X  a#  T R`                  U   Rb                  R\                  nT R                  R                  U   S    S:X  aY  T R`                  U   Rb                  Rv                  [        R,                  Rx                  :X  a  [        R,                  R|                  nT R`                  U   Rb                  R\                  [        R,                  Rt                  :X  a#  T R`                  U   Rb                  R\                  nT R                  R                  U   S1   (       ag   [        T R                  R                  U   S1   5      T R                  R                  U   S1'   T R                  R                  U   S1   S:  a  [4        eOh[        T R                  S35      (       a1  T R                  R                  T R                  R                  U   S1'   OST R                  R                  U   S1'   [        T R                  S45      (       aG  T R                  R                  b0  T R                  R                  T R                  R                  U   S1'   T R                  R                  U   S1   (       d?  [E        T R                  R                  U   S   5      T R                  R                  U   S1'   T R                  R                  U   S1   [E        [        5      :  a)  [E        [        5      T R                  R                  U   S1'   T R                  R                  U   S5   (       aA   [        T R                  R                  U   S5   5      T R                  R                  U   S6'   Oh[        T R                  S75      (       a1  T R                  R                  T R                  R                  U   S6'   OS T R                  R                  U   S6'   [        T R                  S85      (       aG  T R                  R                  b0  T R                  R                  T R                  R                  U   S6'   ST R                  R                  U   S5'   T R                  R                  U   S9   (       aA   [        T R                  R                  U   S9   5      T R                  R                  U   S9'   OK[        T R                  S;5      (       a0  T R                  R                  T R                  R                  U   S9'   [        T R                  S<5      (       aK  T R                  R                  (       a0  T R                  R                  T R                  R                  U   S9'   T R`                  U   Rb                  R\                  [        R,                  Rt                  :X  a  ST R                  R                  U   S9'    / n[        SU5      nT R                  R                  U   S)   S   nU(       Gaa  T R                  R                  U   S   (       Ga?  Sn/ n[S        S[E        T RJ                  U   S   5      5       H~  n T R                  R                  R                  UUUT RJ                  U   S   U   5      n URU                  T RJ                  U   S   U   T RJ                  U   S   U   U 45        US-  nM     US:  ab  [        U5       HS  n!T RJ                  U   S   U!	 T RJ                  U   S   U!	 T R                  5       (       d  M@  T R                  U   S   U!	 MU     T R                  U5      T R                  R                  U   S5'   OBT R                  R                  R                  UUUU5      T R                  R                  U   S5'   T R                  5       (       an   / T R                  U'   T R                  R                  U   S    H;  n"T R                  U   RU                  [        R                  " S=U"-   S>-   5      5        M=     GM  GM     [        U5       H  nT RF                  X   	 T R`                  X   	 T RJ                  X   	 T R                  5       (       a  T R                  X   	 T R                  5       (       a  T R                  X   	 T R                  R                  U	 M     AT R                  R                  (       dj  T RC                  5       (       d   [        R                  R!                  SB5        O[        R                  R!                  SC5        [        R$                  " S5        [        T R                  S5      (       a-  T R                  R
                  (       a  T R                  5         ggg! [        R                   ar  n[        R                  R!                  S	5        [        R                  R!                  S
U< S[#        U5      < S35        [        R$                  " S5         SnAGM  SnAff = f! [        R                   Ga  nUR*                  S   [        R,                  R.                  :w  a  UR1                  5       n SnAGN T R                  R                  R3                  WR)                  5       UR)                  5       5         SnAU(       d  GM  [        R                  R!                  SU-  5        [        R$                  " S5        GM  ! [        R                   a  n	U	R1                  5       n Sn	A	 SnAGNWSn	A	ff = fSnAf[4         a  nSn SnAGNtSnAf[6         a  nSn SnAGNSnAff = f! U(       a9  [        R                  R!                  SU-  5        [        R$                  " S5        f f = f! [        R                   Ga  nUR*                  S   [        R,                  R.                  :w  a  e Sn T R                  R                  R'                  U5        Ot! [        R                   a]  n	U	R*                  S   [        R,                  R.                  :w  a  e T RC                  5       (       a  UT R                  ;   a  Sn Sn	A	OSn	A	ff = fU(       d,  [        T#U   5      T R                  R                  U'    SnAGM+   SnAGM2  SnAff = f! [        R                   aS  n[        R                  R!                  SU< S[#        U5      < S35        [        R$                  " S5         SnAGM7  SnAff = f! [        R                   ak  n[        R                  R!                  [#        U5      < S0T R                  R                  U   S)   < S35        [        R$                  " S5         SnAGNSnAff = f! [6         a<    [        R                  R!                  S2U-  5        [        R$                  " S5         GNf = f! [6         a<    [        R                  R!                  S2U-  5        [        R$                  " S5         G
Nlf = f! [6         a<    [        R                  R!                  S:U-  5        [        R$                  " S5         G	Nf = f! [        R                   aI  nUR*                  S   [        R,                  R                  :X  a  e URU                  U5         SnAGM  SnAff = f! [6         aJ  n[        R                  R!                  S?W"< S@U< S35        [        R$                  " S5         SnAGM  SnAff = f! [6         a@    [        T R                  SA5      (       a#  T R                  R                  (       a  UX'    GM:  e f = f)DzValidate the metricset 	leaf_only	predicater|   rD   Nr{   r  rF   z*Failed to load derived metric definitions zfrom file 'rE   r   r   r   r   z'Failed to register derived metric:
%s.
z+Invalid syntax (expected metric=expression)zUnidentified errorc                   > U TR                   :w  aK  U TR                  R                  ;  a0  [        TTR                      5      TR                  R                  U '   gg[        TU    5      TR                  R                  U '   g)z'Helper to support non-leaf metricspecs N)r!   r   r   r   )r   r   r$   s    r%   metric_base_check4pmConfig.validate_metrics.<locals>.metric_base_check  sg    TYY&TYY%6%664<WTYY=O4P		))&1 7 190IDII%%f-r(   FTrM  rN  rO  zNo matching instances found.
z
Requested global instances:   rn   i  r   r   r   r   outputarchivec                 f    U R                   S:X  a!  U R                  S:X  a  U R                  S:X  a  gg)zTest count dimension r   r   TF)dimCountdimSpacedimTimer   s    r%   is_count+pmConfig.validate_metrics.<locals>.is_countv  ,    ==A%==A%<<1$r(   c                 f    U R                   S:X  a!  U R                  S:X  a  U R                  S:X  a  gg)zTest space dimension r   r   TF)r  r  r  r  s    r%   is_space+pmConfig.validate_metrics.<locals>.is_space~  r  r(   c                 f    U R                   S:X  a!  U R                  S:X  a  U R                  S:X  a  gg)zTest time dimension r   r   TF)r  r  r  r  s    r%   is_time*pmConfig.validate_metrics.<locals>.is_time  s,    <<1$==A%==A%r(   count_scale_forcer   count_scalespace_scale_forcespace_scaletime_scale_force
time_scalez / sr     z"Non-negative integer expected: %s
r   r        r   r     zInteger expected: %s
r  r  rI  rJ  zInvalid regex 'rK  rL  zNo compatible metrics found.
zNot one known metric found.
)Xr   r   r   r"   r   r  r   rz   filterrS   r   pmLoadDerivedConfigr   rZ  r,   r   r   r   r-   rP  stripr\   r   PM_ERR_NAMEr   pmRegisterDerivedr   r6   r  r   r   r!   pmTraversePMNSry  r   r   ru  r   r   printr]  r   ra   r  r  r   r   r  r   rR  unitsr  r  r  r  r  r  pmParseUnitsStrrY  semPM_SEM_COUNTERr  rX  r   r   r  TRUNCr   r  r  r  maxpmfgextend_itemPM_ERR_CONVreversedr  r   r  extend_indomr)  r    r_  r`  rL  r   r   validate_predicate)$r$   
curr_insts	max_instsr  rz   r   r^   exprr   error2r  r   ignoreldynamic_instsincompat_metricsr;  r   r   r  r  r  r   r   pmunitmultmtyper   scalemitemsvanishedjitemr  rk  r   s$   `                                  @r%   validate_metricspmConfig.validate_metrics  s    tyy+.. ();); <DII499k**tyy/B/B!YY0066s;	DII$5$55468DII%%i0 < 99!$		(9(9(?(?(DE%%c**g.@.@.E.E$		))==gF CD(%,]]3%:
		))66tzz|D JJ,,-X[^-^_HHQK 9 F@ tyy+..dii6I6Iii''G +DIIJ w-"	NII%%44VO (& ))##'M		F

O#FOA.			!!009J9JKtzz?a'07DII%%f-  zz$"="="?"?JJ=>yy""56dii))*HHQK & '="499#4#45IAvq!tyy((01U:z		))&188<		))&188> % 99$$V,Q/c*AAaD3J&D +/3CRy6<<;LR;P/P		!!&)!, 99$$V,Q/DII4G4G::a=#A&%++*@*@@37993F3FDII%%f-a0zz!}Q"ekk&<&<</1		!!&)!, 00TZZ]15E1FM	 tyy-009J9J69RST9U/3yy/D/D		!!&)!,""6*1-6/0		!!&)!,/0		!!&)!, 		6**tyy~~/Byy  (+u4		8,,1A1AY1N/0		!!&)!, ::a=))//D~~499&9::tyy?Z?Z37993N3NDII%%f-a0TYY66499;P;Pyy((0337993H3HDII%%f-a0**621536t9DII%%f-a0~~499&9::tyy?Z?Z37993N3NDII%%f-a0TYY66499;P;Pyy((0337993H3HDII%%f-a0**621536t9DII%%f-a0t}}499&899dii>X>X37993M3MDII%%f-a0TYY55$)):N:Nyy((0337993G3GDII%%f-a0**621536t9DII%%f-a099$$V,Q//24y		!!&)!, tyy(++		0@0@I0M/24y		!!&)!,		))&1!4!%!2!2!B!B499CTCTU[C\]^C_!`99$$V,Q/14::a=))..%++2L2LL::a=$$(B(BBe#VOE00705vt/D		!!&)!, KK..E6{c$**Q-"8"8">">??

1..33yy  (+q0zz!}%%))U[[-G-GG22zz!}%%**ekk.H.HH

1..33 yy  (+ 36tyy7H7H7PQR7S3TDII%%f-a0yy((03a7(( 8
 G,,/3yy		!!&)!,/0		!!&)!,tyy-00TYY5J5J5V/3yy/D/D		!!&)!,99$$V,Q//24993D3DV3LQ3O/P		!!&)!,yy  (+c%j8/25z		!!&)!, yy  (+ 36tyy7H7H7PQR7S3TDII%%f-a0 K00/3yy/B/B		!!&)!,/0		!!&)!,tyy"3449R9R9^/3yy/H/H		!!&)!,+/DIIf%a( yy  (+ 36tyy7H7H7PQR7S3TDII%%f-a0 N33/3yy/E/E		!!&)!,tyy"677DII<X<X/3yy/K/K		!!&)!,zz!}%%**ekk.H.HH/3		!!&)!,)9-			))&1!4Q7$))"3"3F";A">">F!H"1c$**Q-*:&;</#'99>>#=#=feUTXT^T^_`TabcTdefTg#hD!LL$**Q-*:1*=tzz!}Q?OPQ?RTX)YZ"aKF	 = z!)(!3A $

1a 0 3 $

1a 0 3#2244$(KKN1$5a$8	 "4
 483K3KE3RDII%%f-a0 		33FE5)T II%%f-a0 ))++$13v.!%!2!26!:1!=A NN6299"**UQYQVEV:WX "> ,_ 6~ /0F

+34

+34

+34!!##JJ/78""$$KK 0 89		!!&) 1  yy  ..00

  !AB

  !@AHHQK499k**tyy/B/B##% 0C*_
 !;; $

(()UV

((WcRWj)YZ$ !;; 7 ::a=EKK,C,CC"'--/C7 $		 1 1 C CDJJLRVR\R\R^ _ ( 3JJ,,-X[^-^_HHQK $);; 7&,nn&67% LK$ 323 JJ,,-X[^-^_HHQK , {{ Nzz!}(?(??"F*		))66v> ;; *!;;q>U[[-D-DD!6688VtGYGY=Y%)F	*
 "4<WV_4M		))&11 "N8 ;; 

  E
!STD ;; 

  E
DII<M<Mf<UVW<X!YZ. !  JJ$$%JV%STHHQK & !  JJ$$%JV%STHHQK  !  JJ$$%=%FGHHQK .  %{{ /$zz!}0G0GG %$OOA../* % $

((5)QR$  499&788TYY=V=V/0$,sD  %A^AA`%Af.A+Aj?Aj?=D-Al)A%An+D%?Ao4I-?Ap=N:BAt=P>A:ArR8AAt=TBAt=V(A*As&^A`^A&A``A``Ae`%;Ad(a Aea'AAc2b)Aec2Ad%dAd dAd(dAed Ad%d%Ad(d(Aed5Ad=d7Aed=Aee
AeeAeeAeeAeeAAffAj<f4.Aj7g#%Ah	hAj7h	Ai:hAAi5i0Aj7i5Ai:i:/Aj7j7Aj<j?Al&kAAl!l!Al&l)An(l=A An#n#An(n+AAo1o0Ao1o4AAp:p9Ap:p=AArrArrAs#r=AssAt=sAs#s#At=s&
At:s0>At5t.At=t5At:t:At=t=AAvvAvc                 @   U R                   R                  R                  5       (       Ga  U R                   R                  R                  5       c  SnO-[	        U R                   R                  R                  5       5      n[	        U R                   R                  R                  5       5      U-
  U R                   l        U R                   R                  R                  5       (       Ga!  U R                   R                  R                  5       U R                   l        [        SU R                   R                  5      U R                   l        [	        U R                   R                  5      U R                   R                  S-
  -  U R                   l
        U R                   R                  R                  [        U R                   R                  5      5        U R                   R                  R                  5       U R                   l
        GO,U R                   R                  R                  5       U R                   l
        U R                   R                  (       d%  [        R                  " S5      U R                   l
         [!        U R                   R                  [	        U R                   R                  5      -  S-   5      U R                   l        OfU R                   R                  R                  5       U R                   l        U R                   R                  R                  5       U R                   l
        [	        U R                   R                  5      S::  a6  [$        R&                  R)                  S5        [$        R*                  " S5        gg! ["         a     Nff = f)zFinalize util options Nr   r   r   z$Interval must be greater than zero.
)r   r   pmGetOptionFinishOptargpmGetOptionOriginr  pmGetOptionFinishruntimer   r}   r  r~   r   r   r   r   timevalr   r6   r,   r   r   r-   )r$   origins     r%   finalize_optionspmConfig.finalize_optionsA  s?    99>>1133yy~~//19tyy~~??AB %diinn&F&F&H IF RDIIyy~~0022$(IINN$E$E$G		!$'499+<+<$=		!%*499+<+<%=ARARUVAV%W		"		223tyy7I7I3JK%)YY^^%G%G%I		"%)YY^^%G%G%I		"yy))).q)9DII&(+DII,=,=diiFXFX@Y,Y\],](^DII% !%		 A A CDII!%!C!C!EDII##$)JJDEHHQK * ! s   >AN 
NNc                    [        5       U R                  l        / U l        / U l        / U l        / U l        / U l        [        5       U l        U R                  R                  R                  5         SU R                  l        g)zClear metricset N)r   r   r   r   r   r   r   r   r   r  clearpmfg_tsr   s    r%   clear_metricspmConfig.clear_metrics`  s\    'M		



%-		 		r(   c                     U R                  5         U R                  R                  R                  5       U R                  l        U R                  X5        g)zUpdate metricset N)r   r   r  extend_timestampr  r  )r$   r  r  s      r%   update_metricspmConfig.update_metricsl  s9     IINN;;=		j4r(   c                 f    [        U R                  S5      (       a  U R                  R                  $ g)zIAction to take when namespace change occurs:
ignore=0, abort=1, update=2 names_changer   )r   r   r  r   s    r%   names_change_actionpmConfig.names_change_actionr  s(     499n--99)))r(   c                      U R                   R                  R                  5       nU R                   R                  (       df  U R                   R                  5       R                  S5      nU R                   R                  R                  5       n[        U5      [        U5      :  a  gU[        R                  R                  -  (       a  U R!                  5       nUS:X  a  gUS	:X  a  gg! [        R                   a  nUR
                  S   [        R                  R                  :X  a   SnAgUR
                  S   [        R                  R                  :X  a/  [        R                  " [        R                  R                  S5      eUeSnAff = f)
z1Sample using fetchgroup and handle special cases r   Nrn   z+
No metrics or instances to report present.z%sr  r   r   )r   r  fetchr   rZ  r\   r   
PM_ERR_EOLPM_ERR_TOOSMALLinterpolr  strftimer   r  r  PMCD_NAMES_CHANGEr  )r$   stater   samplefinishactions         r%   r  pmConfig.fetchy  s!   	IINN((*E yy!!YY&&(11$7FYY^^557FV}uV}, 5;;000--/F{1 1 {{ 	zz!} 6 66zz!} ; ;;kk%++"="="PR RK	s   $C( (F<+F,AFFc                    U =R                   S-  sl         U R                  (       d7  [        U R                  R	                  5       R                  S5      5      U l        U R                  [        U R                  R                  5      U R                   -  -   nU[        R                  " 5       -
  nUS:  a  [        R                  " U5        gg)zPause before next sampling r   z%s.%fr   N)	r   r   r  r   r  r  r~   timesleep)r$   wakeupr  s      r%   pausepmConfig.pause  s    q}}!$))"3"3"5">">w"GHDMtyy'9'9!:T[[!HH$19JJu r(   c                    U R                   U   (       d  gU R                  R                  U   S    H  nUR                  SS5      R                  SS5      R                  SS5      R	                  5       (       d  MJ  SU;   d  MR  UR                  5       S   R                  5       (       d  Mz  X0R                  UR                  5       S   5      :X  d  M    g   U R                   U    H   n[        R                  " XB5      (       d  M     g   g	)
z.Filter instance name against metric instances Tr   rF   rD   rG  r@  rH  r   F)
r    r   r   rL   r^  r   r\  rC  r_  ra  )r$   r   r   rk  ro  s        r%   filter_instancepmConfig.filter_instance  s    ~~f%""6*1-Ayyb!))#r2::3CKKMM$;4::<?#:#:#<#<224::<?CC#	 . ..(Bxx!! ) r(   c                     U R                   R                  (       d  U$ [        U R                   R                  5      n[        U R                   R                  S:  5      n[	        US US9SU $ )zRank instances r   c                     U S   $ )Nr   r  )r   s    r%   <lambda>pmConfig.rank.<locals>.<lambda>  s    58r(   )r   reverseN)r   r  absboolrb   )r$   r   r  revss       r%   r  pmConfig.rank  sS    yy~~499>>"DIINNQ&'i%;TJ5DQQr(   c                    U R                   R                  R                  S5       GH  nXR                   R                  ;  a8  [        R
                  R                  SU-  5        [        R                  " S5        [        U R                   R                  R                  5       5      R                  U5      nU R                  R                  U R                  U   R                  R                  5        U R                   U   S   S   ["        R$                  R&                  :X  a5  [        R
                  R                  S5        [        R                  " S5        U R                  U   R                  R(                  ["        R$                  R*                  :X  d  GMu  [        R
                  R                  S5        [        R                  " S5        GM     g)z,Validate predicate filter reference metrics r|   z"Predicate metric %s filtered out.
r   r   z&Predicate metric must have instances.
z)Predicate metric values must be numeric.
N)r   r  r   r   r,   r   r   r-   r   r   r   r   ra   r   rR  r9  r   r   r   r  r   rY  )r$   r  r;  s      r%   r  pmConfig.validate_predicate  s*   ,,2237I		 1 11

  !F!RSTYY&&++-.44Y?A##DJJqM$:$:$@$@Azz!}Q"ekk&<&<<

  !JKzz!}%%**ekk.H.HH

  !MN 8r(   c                 $    U R                  U5      $ )z-Deprecated, use get_ranked_results() instead )get_ranked_results)r$   
valid_onlys     r%   get_sorted_resultspmConfig.get_sorted_results  s    &&z22r(   c           
        ^^^ [        5       n[        U R                  S5      (       aA  U R                  R                  (       a&  U R                  R                  R	                  S5      nOSnU R                  5       =(       a    U R                  5       (       + n[        U R                  R                  5       GH5  u  pV/ X&'    U R                  R                  U   S   " 5        H  u  pxn	 U[        R                  R                  :w  a	  U(       d  M.  U(       a6  U[        R                  R                  :w  a  U R                  Xh5      (       d  Mk  U	" 5       n
U R                  R                  U   S   (       aE  Xc;  a@  U R                  R                  U   S   nUS:  a  X:  a  M  US:  a  U
[        U5      :  a  M  X&   R                  XxU
45        M     U(       d  GM'  X&   (       a  GM3  X&	 GM8     U R!                  5       (       Ga  U Vs/ s H&  obU   (       d  M  U[#        [%        X&   6 5      S   4PM(     nnU R&                  U:w  GaE  U R(                  n[        5       U l        Xl        U GH  nSnXm;   a_  X   S   nX   S   R+                  5       mX&   (       a  [#        [%        X&   6 5      S   O0 n[-        U4S	 jU 5       5      (       a  X   S   nOn[#        U R                  R                  R+                  5       5      R/                  U5      nU R                  R0                  R3                  U R4                  U   5      nUc2  U R7                  U R8                  W   R:                  R<                  5      nX/U R(                  U'   GM      U(       d  U$ U(       Ga  0 m[        U5       HY  u  nnU R?                  UU   5      UU'   U R@                  U   mTT;  a  / TT'   TT   RC                  UU4S
 jUU    5       5        M[     U GHo  nXc;   a  U R                  R                  U   S   (       av  U R                  R                  U   S   nUS:  a#  X&    Vs/ s H  nUS   U:  d  M  UPM     snX&'   O1US:  a+  X&    Vs/ s H  nUS   [        U5      ::  d  M  UPM     snX&'   M  [#        U R                  R                  R+                  5       5      R/                  U5      nU R8                  U   R:                  R<                  U R@                  ;  a  U R?                  X&   5      X&'   GM'  U R8                  U   R:                  R<                  nX&    Vs/ s H  nUS   TU   ;   d  M  UPM     snX&'   GMr     OT[        U R                  S5      (       a9  U R                  R>                  (       a  U H  nU R?                  X&   5      X&'   M     U R                  5       (       aQ  U R                  5       (       a<  U H6  nX&    Vs/ s H!  nU R                  UUS   5      (       d  M  UPM#     snX&'   M8     U$ ! [         a     GMi  f = f! [         a     GNf = fs  snf s  snf s  snf s  snf s  snf )z Get filtered and ranked results r  r|   r  r  r  r   Nr   c              3   ,   >#    U  H	  oT;   v   M     g 7f)Nr  )r  r   
prev_instss     r%   r  .pmConfig.get_ranked_results.<locals>.<genexpr>  s     Ijdz1js   c              3   H   >#    U  H  oS    TT   ;  d  M  US    v   M     g7f)r   Nr  )r  xp
pred_instss     r%   r  r3    s)     $c3Ea1U_`aUbIbTQqT3Es   ""r   r  )"r   r   r   r  r   r)  r-  r]  r   r   r   r  r  r%  ra   r6   r  r   zipr#   r   r   allr   r   rh  r   r<  r   rR  r9  r  r   r	  )r$   r-  results
predicatesearly_live_filterr;  r   r   r   valr   r   r   prev_labelsrt  r$  r  r  r5  
inst_indexr6  r7  r2  s                       @@@r%   r,  pmConfig.get_ranked_results  sy   -499k**tyy/B/B,,2237JJ 224WT=U=U=W9W"499#4#45IA GO'+yy'8'8'@'C'EOD5;;#9#99$$,9O9O1O#33FAA$ #99,,V4Q7%7(,		(9(9&(A!(D#(19$,%*QY53u:3E$,..E/BC! (F, z'//O5 68   LSgG&_eWf=fd3#89!<=GEg5("oo"--#( %F $I,(3(;A(>%0%8%;%@%@%B
GNT#w*?%@%C\^
IjIII(3(;A(>I !2!2!7!7!9:@@H(,		(9(9(H(HTU(W ($($8$8A9O9O9U9U$V	/<.HDOOF+ & NJ )* 59%)YYwy/A%B	"$$Q'J&$&JqM1$$$c793E$cc !6 "' yy((03 $		 1 1& 9! < 19:A/.[/QQqTUZ]q/.[GO"QY:A/.`/QQqTUXY^U_M_q/.`GO**//1288@::a=))//t7G7GG&*ii&@GO!ZZ]3399
.5o"`o1T^I_A_1o"`# "& tyy&))diinn%F&*ii&@GO & !!##(@(@(B(B!.5o"doAUAUV\^_`a^bAc1o"d " G %   hN /\.` #a #es   'Y*%X>Y;X>YAX>"Y$X>9Y;X>YY!Y!Y&0Y&Y+"Y+Y01Y0Y5-Y5>
YYYY
YY)r"   r   r   r#   r    r   r!   r   r   r   r   r   r   r   r   r   )F)NTT)3r  r  r  r  r  r&   r9   r>   r<   ri   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r%  r)  r-  r4  r<  rC  ru  ry  r  objectr  r  r  
CURR_INSTSr  r  r   r  r  r  r  r  r  r  r.  r,  r  r  r(   r%   r	   r	   ,   s   '$L4%N-0^
O4+
8.DJ4A9Fh,2 +/b 
_Bf <+Z +5 a&F>
! )3a 5<"R&3_r(   r	   )r  r  r   collectionsr   configparserr   ImportErrorr5   r  r  r   r,   rG   r_  pcpr   r  VERSIONrB  rA  r	   r  r(   r%   <module>rH     se   * )  #'    
 
 	 	  	

Hv H#  s   A 
AA