ó
    ioøg•R  ã            	       ó  • S r SSKrSSKrSSKrSSKrSSKJr  SSKJrJ	r	J
r
JrJr  SSKJr  SSKJrJrJrJrJr  SSKJrJrJrJr  \" \" S5      5      r\\R4                  l        \\\\/\R4                  l        \\R:                  l        \\\\\/\R:                  l        \\R<                  l        \\\" \5      \" \5      /\R<                  l        \\R>                  l        \\\" \5      \" \5      /\R>                  l        \\R@                  l        \\\\\" \5      \" \5      \" \5      /\R@                  l        \\RB                  l        \\/\RB                  l        \\RD                  l        \\/\RD                  l        \\RF                  l        \" \" \5      5      \/\RF                  l        \\RH                  l        \" \5      \/\RH                  l        \\RJ                  l        \" \" \5      5      \/\RJ                  l        \\RL                  l        / \RL                  l        S	 r#S
 r$S r%S r& " S S\5      r' " S S\5      r( " S S\5      r) " S S\
5      r* " S S\+5      r, " S S\,5      r-g)a  Wrapper module for libpcp_pmda - Performace Co-Pilot Domain Agent API
#
# Copyright (C) 2013-2015,2017-2021 Red Hat.
#
# This file is part of the "pcp" module, the python interfaces for the
# Performance Co-Pilot toolkit.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# See pmdasimple.py for an example use of this module.
é    N)Ú	pmContext)ÚpmInDomÚpmDescÚpmUnitsÚpmErrÚ
pmLabelSet)Úfind_library)ÚCDLLÚc_intÚc_longÚc_char_pÚc_void_p)Ú	addressofÚbyrefÚPOINTERÚ	StructureÚpcp_pmdac                 óŽ   • [        [        5      " 5       n[        R                  [	        U5      U 5      nUS:  a  [        U5      eU$ ©Nr   )r   r   ÚLIBPCP_PMDAÚpmdaAddLabelsr   r   ©ÚlabelÚresult_pÚstatuss      Ú*/usr/lib/python3/dist-packages/pcp/pmda.pyr   r   H   s;   € Ü”zÔ"Ó$€HÜ×&Ñ&¤u¨X£¸Ó>€FØ�ƒzÜ�F‹mÐØ€Oó    c                 óR   • [         R                  X5      nUS:  a  [        U5      eU$ r   )r   ÚpmdaAddLabelFlagsr   )ÚlabelsÚflagsr   s      r   r   r   O   s(   € Ü×*Ñ*¨6Ó9€FØ�ƒzÜ�F‹mÐØ€Mr   c                 óŽ   • [        [        5      " 5       n[        R                  [	        U5      U 5      nUS:  a  [        U5      eU$ r   )r   r   r   ÚpmdaAddNotesr   r   r   s      r   r#   r#   U   s;   € Ü”zÔ"Ó$€HÜ×%Ñ%¤e¨H£o°uÓ=€FØ�ƒzÜ�F‹mÐØ€Or   c                  óP   • [         R                  5       n U S:  a  [        U 5      eU $ r   )r   ÚpmdaGetContextr   )r   s    r   r%   r%   \   s&   € Ü×'Ñ'Ó)€FØ�ƒzÜ�F‹mÐØ€Mr   c                   ó4   • \ rS rSrSrS\4S\4/rS rS r	Sr
g)	Ú
pmdaMetricéf   z4Structure describing a metric definition for a PMDA Úm_userÚm_descc                 óÞ   • [         R                  " U 5        S U l        XR                  l        X R                  l        X0R                  l        X@R                  l        XPR                  l        g ©N)	r   Ú__init__r)   r*   ÚpmidÚtypeÚindomÚsemÚunits)Úselfr.   Útypeofr0   r1   r2   s         r   r-   ÚpmdaMetric.__init__k   sH   € Ü×Ò˜4Ô ØˆŒØ�‰ÔØ!�‰ÔØ!�‰ÔØ�‰ŒØ!�‰Õr   c                 ót   • S[        U 5      U R                  R                  U R                  R                  4-  $ )Nz!pmdaMetric@%#lx pmid=%#lx type=%d)r   r*   r.   r/   ©r3   s    r   Ú__str__ÚpmdaMetric.__str__t   s/   € Ø2´iÀ³oÀtÇ{Á{×GWÑGWÐY]×YdÑYd×YiÑYiÐ5jÑjÐjr   )r)   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú_fields_r-   r8   Ú__static_attributes__© r   r   r'   r'   f   s'   † Ù?Ø˜8Ð$Ø˜6Ð"ð$€Hò"õkr   r'   c                   ó4   • \ rS rSrSrS\4S\4/rS rS r	Sr
g)	Ú
pmdaInstidéw   z5Structure describing an instance (index/name) a PMDA Úi_instÚi_namec                 óh   • [         R                  " U 5        Xl        UR                  S5      U l        g )Núutf-8)r   r-   rE   ÚencoderF   )r3   ÚinstidÚnames      r   r-   ÚpmdaInstid.__init__|   s%   € Ü×Ò˜4Ô ØŒØ—k‘k 'Ó*ˆ�r   c                 óL   • S[        U 5      U R                  U R                  4-  $ )Nz pmdaInstid@%#lx index=%d name=%s)r   rE   rF   r7   s    r   r8   ÚpmdaInstid.__str__�   s#   € Ø1´Y¸t³_ÀdÇkÁkÐSW×S^ÑS^Ð4_Ñ_Ð_r   )rE   rF   N)r:   r;   r<   r=   r>   r   r   r?   r-   r8   r@   rA   r   r   rC   rC   w   s'   † Ù@Ø˜5Ð!Ø˜8Ð$ð&€Hò+õ
`r   rC   c                   óˆ   • \ rS rSrSrS\4S\4S\" \5      4/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g)Ú	pmdaIndomé„   z6Structure describing an instance domain within a PMDA Úit_indomÚ
it_numinstÚit_setc                 óœ   • [         R                  " U 5        SU l        S U l        Xl        U R                  X5        U R                  X5        g r   )r   r-   rS   rT   rR   Ú
load_indomÚset_instances©r3   r0   Úinstss      r   r-   ÚpmdaIndom.__init__Š   s=   € Ü×Ò˜4Ô ØˆŒØˆŒØŒØ�‰˜Ô%Ø×Ñ˜5Õ(r   c              #   óÚ  #   • U R                   S::  aƒ  [        R                  U R                  [        R
                  5         [        R                  U R                  [        R                  5      nUS:  a  g U R                  U5      nU(       a  X4v •  MT  [        U R                   5       H;  nU R                  U   R                  nU R                  U5      nU(       d  M6  X4v •  M=     g 7fr   )rS   r   ÚpmdaCacheOprR   ÚcpmdaÚPMDA_CACHE_WALK_REWINDÚPMDA_CACHE_WALK_NEXTÚinst_name_lookupÚrangerT   rE   )r3   ÚinstrK   Úis       r   Ú__iter__ÚpmdaIndom.__iter__’   sÁ   é € à�?‰?˜aÓÜ×#Ñ# D§M¡MÜ$)×$@Ñ$@ôBàÜ"×.Ñ.¨t¯}©}Ü/4×/IÑ/IóK�à˜!“8ØØ×,Ñ,¨TÓ2�ÞØ˜,Ò&ñ ô ˜4Ÿ?™?Ö+�Ø—{‘{ 1‘~×,Ñ,�Ø×,Ñ,¨TÓ2�ß�4Ø˜,Ô&ò	 ,ùs   ‚CC+Ã!
C+c                 ó°  • U R                   S::  an  [        5       n[        R                  U R                  U[        U5      S 5      nU[        R                  :X  a#  [        UR                  R                  5       5      $  g U R                   S:”  aH  U R                   H8  nUR                  U:X  d  M  [        UR                  R                  5       5      s  $    g r   )rS   r   r   ÚpmdaCacheLookuprR   r   r]   ÚPMDA_CACHE_ACTIVEÚstrÚvalueÚdecoderT   rE   rF   )r3   ÚinstancerK   Ústsrb   s        r   r`   ÚpmdaIndom.inst_name_lookup¦   s¬   € Ø�?‰?˜aÓÜ“<ˆDÜ×-Ñ-¨d¯m©m¸XÜ.3°D«k¸4óAˆCà”e×-Ñ-Ó-Ü˜4Ÿ:™:×,Ñ,Ó.Ó/Ð/ð .ð ð	 �_‰_˜qÓ ØŸœ�Ø—;‘; (Õ*Ü˜tŸ{™{×1Ñ1Ó3Ó4Ò4ñ $ð r   c                 óx   • [        U[        5      (       a%  [        R                  U[        R
                  5        g g r,   )Ú
isinstanceÚdictr   r\   r]   ÚPMDA_CACHE_LOADrX   s      r   rV   ÚpmdaIndom.load_indom³   s*   € Ü�eœT×"Ñ"Ü×#Ñ# E¬5×+@Ñ+@ÕAð #r   c                 ó‚   • U R                   S:X  a/  [        R                  U R                  [        R
                  5        g g )Néÿÿÿÿ)rS   r   r\   rR   r]   rr   r7   s    r   ÚloadÚpmdaIndom.load·   s-   € Ø�?‰?˜bÓ Ü×#Ñ# D§M¡M´5×3HÑ3HÕIð !r   c                 óð   • [        U5      n[        U-  " 5       n[        U5       H-  nX   R                  X4   l        X   R                  X4   l        M/     X0l        X l        [        R                  " 5         g r,   )	ÚlenrC   ra   rE   rF   rT   rS   r]   Úset_need_refresh)r3   rY   Úinstance_countÚinstance_arrayrc   s        r   Úset_list_instancesÚpmdaIndom.set_list_instances»   sa   € Ü˜U›ˆÜ$ ~Ò5Ó8ˆÜ�~Ö&ˆAØ',¡x§¡ˆNÑÔ$Ø',¡x§¡ˆNÑÖ$ñ 'ð %ŒØ(ŒÜ×ÒÕ r   c           
      óT  • [         R                  U[        R                  5        UR	                  5        HE  nUR                  S5      n[         R                  U[        R                  U[        X#   5      5        MG     [         R                  U[        R                  5        SU l
        g )NrH   ru   )r   r\   r]   ÚPMDA_CACHE_INACTIVEÚkeysrI   ÚpmdaCacheStoreÚPMDA_CACHE_ADDr   ÚPMDA_CACHE_SAVErS   )r3   r0   rY   ÚkeyÚkey8s        r   Úset_dict_instancesÚpmdaIndom.set_dict_instancesÅ   sx   € Ü×Ñ ¤u×'@Ñ'@ÔAØ—:‘:–<ˆCØ—:‘:˜gÓ&ˆDÜ×&Ñ& u¬e×.BÑ.BÀDÌ%ÐPUÑPZÓJ[Ö\ñ  ô 	×Ñ ¤u×'<Ñ'<Ô=Øˆ�r   c                 ó¸   • Uc  SU l         g [        U[        5      (       a  SU l         U R                  X5        g [	        U5      U l         U R                  U5        g )Nr   ru   )rS   rp   rq   r‡   ry   r}   rX   s      r   rW   ÚpmdaIndom.set_instancesÍ   sI   € Ø‰=ØˆD�OÜ˜œt×$Ñ$Ø ˆDŒOØ×#Ñ# EÕ1ä! %›jˆDŒOØ×#Ñ# EÕ*r   c                 óL   • S[        U 5      U R                  U R                  4-  $ )Nz pmdaIndom@%#lx indom=%#lx num=%d)r   rR   rS   r7   s    r   r8   ÚpmdaIndom.__str__×   s#   € Ø1´Y¸t³_ÀdÇmÁmÐUY×UdÑUdÐ4eÑeÐer   c                 óÔ   • U R                   S::  a@  [        R                  U R                  [        R
                  5      nUS:  a  [        U5      eg [        [        R                  5      er   )	rS   r   r\   rR   r]   rr   r   ÚcpmapiÚ
PM_ERR_NYI)r3   rm   s     r   Ú
cache_loadÚpmdaIndom.cache_loadÚ   sS   € Ø�?‰?˜aÓÜ×)Ñ)¨$¯-©-¼×9NÑ9NÓOˆCØ�Q‹wÜ˜C“jÐ ð ô œ×)Ñ)Ó*Ð*r   c                 ó²   • U R                   S::  a/  [        R                  U R                  [        R
                  5        g [        [        R                  5      er   )	rS   r   r\   rR   r]   rh   r   rŽ   r�   r7   s    r   Úcache_mark_activeÚpmdaIndom.cache_mark_activeâ   s9   € Ø�?‰?˜aÓÜ×#Ñ# D§M¡M´5×3JÑ3JÕKäœ×)Ñ)Ó*Ð*r   c                 ó²   • U R                   S::  a/  [        R                  U R                  [        R
                  5        g [        [        R                  5      er   )	rS   r   r\   rR   r]   r€   r   rŽ   r�   r7   s    r   Úcache_mark_inactiveÚpmdaIndom.cache_mark_inactiveè   s9   € Ø�?‰?˜aÓÜ×#Ñ# D§M¡M´5×3LÑ3LÕMäœ×)Ñ)Ó*Ð*r   c                 ó¸   • U R                   S::  a2  [        R                  U R                  U5      nUS:  a  [	        U5      eg [	        [
        R                  5      er   )rS   r   ÚpmdaCacheResizerR   r   rŽ   r�   )r3   Úmaximumrm   s      r   Úcache_resizeÚpmdaIndom.cache_resizeî   sM   € Ø�?‰?˜aÓÜ×-Ñ-¨d¯m©m¸WÓEˆCØ�Q‹wÜ˜C“jÐ ð ô œ×)Ñ)Ó*Ð*r   )rR   rS   rT   N)r:   r;   r<   r=   r>   r   r   r   rC   r?   r-   rd   r`   rV   rv   r}   r‡   rW   r8   r�   r“   r–   r›   r@   rA   r   r   rP   rP   „   sm   † ÙAØ˜WÐ%Ø˜uÐ%Ø™7 :Ó.Ð/ð1€Hò)ò'ò(òBòJò!òò+òfò+ò+ò+õ+r   rP   c                   ó   • \ rS rSrSrS rSrg)Ú	pmdaUnitséö   zEWrapper class for PMDAs defining their metrics (avoids pmapi import) c           	      ó6   • [         R                  " XX#XEU5        g r,   )r   r-   )r3   ÚdimSÚdimTÚdimCÚscaleSÚscaleTÚscaleCs          r   r-   ÚpmdaUnits.__init__ø   s   € Ü×Ò˜ T°ÀÕHr   rA   N)r:   r;   r<   r=   r>   r-   r@   rA   r   r   rž   rž   ö   s   † ÙPõIr   rž   c                   ón   • \ rS rSrSrS rS rS rS rS r	S r
SS	 jrS
 rSS jrS rS rS rS rSrg)ÚMetricDispatché   a™  Helper for PMDA class which manages metric dispatch
table, metric namespace, descriptors and help text.

Overall strategy is to interface to the C code in
python/pmda.c here, using a void* handle to the PMDA
dispatch structure (allocated and managed in C code).

In addition, several dictionaries for metric related
strings are managed here (names, help text) - cached
for quick lookups in callback routines.
c                 ó¾   • / U l         0 U l        0 U l        0 U l        / U l        0 U l        0 U l        0 U l        0 U l        0 U l	        [        R                  " XX45        g r,   )Ú_indomtableÚ_indomsÚ_indom_onelineÚ_indom_helptextÚ_metrictableÚ_metricsÚ_metric_namesÚ_metric_names_mapÚ_metric_onelineÚ_metric_helptextr]   Úinit_dispatch)r3   ÚdomainrK   ÚlogfileÚhelpfiles        r   r-   ÚMetricDispatch.__init__  s`   € ØˆÔØˆŒØ ˆÔØ!ˆÔØˆÔØˆŒØˆÔØ!#ˆÔØ!ˆÔØ "ˆÔÜ×Ò˜F¨'Õ<r   c                 ó¾   • U R                   S S 2	 U R                  R                  5         U R                  R                  5         U R                  R                  5         g r,   )r¬   r­   Úclearr®   r¯   r7   s    r   Úclear_indomsÚMetricDispatch.clear_indoms  sF   € ð  ×ÑšQÐØ�‰×ÑÔØ×Ñ×!Ñ!Ô#Ø×Ñ×"Ñ"Õ$r   c                 ó&  • U R                   S S 2	 U R                  R                  5         U R                  R                  5         U R                  R                  5         U R
                  R                  5         U R                  R                  5         g r,   )r°   r±   r¼   r²   r³   r´   rµ   r7   s    r   Úclear_metricsÚMetricDispatch.clear_metrics2  sj   € ð ×ÑšaÐ Ø�‰×ÑÔØ×Ñ× Ñ Ô"Ø×Ñ×$Ñ$Ô&Ø×Ñ×"Ñ"Ô$Ø×Ñ×#Ñ#Õ%r   c                 óN   • U R                  5         [        R                  " 5         g r,   )rÀ   r]   rz   r7   s    r   Úreset_metricsÚMetricDispatch.reset_metrics<  s   € Ø×ÑÔÜ×ÒÕ r   c                 óD   • [         R                  " U R                  5        g r,   )r]   Úpmns_refreshr²   r7   s    r   rÆ   ÚMetricDispatch.pmns_refreshC  s   € Ü×Ò˜4×-Ñ-Õ.r   c                 ó.   • [         R                  " 5         g r,   )r]   Úconnect_pmcdr7   s    r   rÉ   ÚMetricDispatch.connect_pmcdF  s   € Ü×ÒÕr   c                 óŠ  • UR                   R                  nXR                  ;   a  [        SU-  5      eXPR                  ;   a  [        S5      eU R
                  R                  U5        X R                  U'   XR                  U'   XPR                  U'   X0R                  U'   X@R                  U'   [        R                  " 5         g )Nz.attempt to add_metric with an existing name=%sz+attempt to add_metric with an existing PMID)r*   r.   r³   ÚKeyErrorr±   r°   Úappendr²   r´   rµ   r]   rz   )r3   rK   ÚmetricÚonelineÚtextr.   s         r   Ú
add_metricÚMetricDispatch.add_metricI  s¨   € Ø�}‰}×!Ñ!ˆØ×)Ñ)Ó)ÜÐKÈtÑTÓUÐUØ—=‘=Ó ÜÐHÓIÐIà×Ñ× Ñ  Ô(Ø$�‰�dÑØ#'×Ñ˜4Ñ Ø'+×Ñ˜tÑ$Ø%,×Ñ˜TÑ"Ø&*×Ñ˜dÑ#Ü×ÒÕ r   c                 ó  • UR                   R                  nXR                  ;  a  [        SU-  5      eX0R                  ;  a  [        S5      eU R
                  R                  U5        U R                  R                  U5        U R                  R                  U5        U R                  R                  U5        U R                  R                  U5        U R                  R                  U5        [        R                  " 5         g )Nz-attempt to remove non-existant metric name=%sz/attempt to remove_metric with non-existant PMID)r*   r.   r³   rÌ   r±   r°   ÚremoveÚpopr²   r´   rµ   r]   rz   )r3   rK   rÎ   r.   s       r   Úremove_metricÚMetricDispatch.remove_metricX  sÆ   € Ø�}‰}×!Ñ!ˆØ×-Ñ-Ó-ÜÐJÈdÑSÓTÐTØ—}‘}Ó$ÜÐLÓMÐMà×Ñ× Ñ  Ô(Ø�‰×Ñ˜$ÔØ×Ñ×Ñ˜tÔ$Ø×Ñ×"Ñ" 4Ô(Ø×Ñ× Ñ  Ô&Ø×Ñ×!Ñ! $Ô'Ü×ÒÕ r   c                 ó  • UR                   nU R                   H  nUR                   U:X  d  M  [        S5      e   U R                  R                  U5        XR                  U'   X R
                  U'   X0R                  U'   g )Nz(attempt to add_indom with an existing ID)rR   r¬   rÌ   rÍ   r­   r®   r¯   )r3   r0   rÏ   rÐ   ÚindomidÚentrys         r   Ú	add_indomÚMetricDispatch.add_indomg  sq   € Ø—.‘.ˆØ×%Ô%ˆEØ�~‰~ Õ(ÜÐIÓJÐJñ &ð 	×Ñ×Ñ Ô&Ø %�‰�WÑØ'.×Ñ˜GÑ$Ø(,×Ñ˜WÒ%r   c                 ó(  • [        U[        5      (       a  UR                  nUnOUn[        X25      n[        U[        5      (       a>  [	        U R
                  5       H%  u  pVUR                  U:X  d  M  X@R
                  U'     O   X@R                  U'   g r,   )rp   rP   rR   ÚlistÚ	enumerater¬   r­   )r3   r0   rY   rR   Úreplacementrc   rÚ   s          r   Úreplace_indomÚMetricDispatch.replace_indomq  s}   € ô �eœY×'Ñ'Ø—~‘~ˆHØ‰KàˆHÜ# HÓ4ˆKä�eœT×"Ñ"ä% d×&6Ñ&6Ö7‘�Ø—>‘> XÕ-Ø*5×$Ñ$ QÑ'Ùñ 8ð "-�‰�XÒr   c                 óÂ   • U R                   U   nUR                  S:  a@  [        5       n[        R	                  XS[        U5      5      nU[        R                  :X  a  U$ g)z¬
Lookup the value associated with an (internal) instance ID
within a specific instance domain (only valid with indoms
of cache type - array indom will always return None).
r   N)r­   rS   r   r   rg   r   r]   rh   )r3   r0   rl   rÚ   rj   rm   s         r   Úinst_lookupÚMetricDispatch.inst_lookupƒ  sU   € ð —‘˜UÑ#ˆØ×Ñ˜aÓÜ“LˆEÜ×-Ñ-¨e¸tÄUÈ5Ã\ÓRˆCØ”e×-Ñ-Ó-Ø�Ør   c                 óB   • U R                   U   nUR                  U5      $ )z^
Lookup the name associated with an (internal) instance ID within
a specific instance domain.
)r­   r`   )r3   r0   rl   rÚ   s       r   r`   ÚMetricDispatch.inst_name_lookup‘  s#   € ð
 —‘˜UÑ#ˆØ×%Ñ% hÓ/Ð/r   c                 ót   •  U R                   [        R                  " X5         nU$ ! [         a    Sn U$ f = f)zB
Lookup the name associated with a performance metric identifier.
N)r²   r]   Ú	pmda_pmidrÌ   )r3   ÚclusterÚitemrK   s       r   Úpmid_name_lookupÚMetricDispatch.pmid_name_lookup™  sB   € ð	Ø×%Ñ%¤e§o¢o°gÓ&DÑEˆDð ˆøô ó 	Ø‰DØˆð	ús   ‚#' §7¶7)
r¯   r®   r­   r¬   rµ   r²   r³   r´   r±   r°   N)Ú rî   )r:   r;   r<   r=   r>   r-   r½   rÀ   rÃ   rÆ   rÉ   rÑ   rÖ   rÛ   rá   rä   r`   rì   r@   rA   r   r   r©   r©      sH   † ñ
ò=ò%ò*&ò!ò/òô!ò!ô-ò-ò$ò0õr   r©   c                   ó  • \ rS rSrSrS rS r\" \SSS5      r\" \SSS5      r	S(S jr
S rS rS	 rS
 rS rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S 5       r#\S 5       r$\S  5       r%\S! 5       r&\S" 5       r'\S# 5       r(\S$ 5       r)\S% 5       r*\S& 5       r+S'r,g))ÚPMDAi¤  z]Defines a PCP performance metrics domain agent
Used to add new metrics into the PCP toolkit.
c                 ó   • U R                   $ )zProperty for name of this PMDA )Ú_namer7   s    r   Ú	read_nameÚPMDA.read_name¬  s   € à�z‰zÐr   c                 ó   • U R                   $ )z/Property for unique domain number of this PMDA )Ú_domainr7   s    r   Úread_domainÚPMDA.read_domain°  s   € à�|‰|Ðr   Nc                 ó¶   • Xl         X l        U(       d  US-   nSU-   nU(       d  [        R                  " S5      < SU< S3n[        R                  XXSU5        g )Nz.logÚpmdaÚPCP_PMDAS_DIRÚ/z/help)rò   rö   ÚPCPÚpmGetConfigr©   r-   )r3   rK   r·   r¸   r¹   Úpmdanames         r   r-   ÚPMDA.__init__½  sI   € ØŒ
ØŒÞà˜V‘mˆGØ˜D‘=ˆÞÜ'*§¢°Ö'GËÐNˆHÜ×Ñ ¨hÀÕJr   c                 ó   • g)z 
Probe the domain to see if the PMDA could be activated
Used by pmcheck(1) - see man page for meaning of (int)
return codes - as part of PMDA specific scripts.
éc   rA   r7   s    r   Údomain_probeÚPMDA.domain_probeÌ  s   € ð r   c                 óh   • [        SU R                  R                  5       U R                  4-  5        g)z8
Write out the domain.h file (used during installation)
z#define %s %dN)Úprintrò   Úupperrö   r7   s    r   Údomain_writeÚPMDA.domain_writeÔ  s'   € ô 	ˆo §¡×!1Ñ!1Ó!3°T·\±\Ð BÑBÕCr   c                 ó  • U R                   nU Vs1 s H  o2U   R                  S5      S   iM     nnUS:H  nSnU(       a  Sn[        S5        U H  n[        SXgU R                  4-  5        M     U(       a  [        S5        g	g	s  snf )
z9
Write out the namespace file (used during installation)
Ú.r   Úrootrî   Ú	zroot {z%s%s	%d:*:*Ú}N)r²   Úsplitr  rö   )r3   r  Úpmnsr…   ÚprefixesÚindentÚleadÚprefixs           r   Ú
pmns_writeÚPMDA.pmns_writeÚ  s„   € ð ×!Ñ!ˆÙ7;Ó<²t°˜‘I—O‘O CÓ(¨Ô+±tˆÐ<Ø˜‘ˆØˆÞØˆDÜ�(ŒOÛˆFÜ�. D°$·,±,Ð#?Ñ?Ö@ñ æÜ�#�Jð ùò =s   ‘ Bc                 ó.   • [         R                  " 5         g)z6
Tell PMCD the PMDA is not ready to process requests.
N)r]   Úpmda_notreadyr7   s    r   r  ÚPMDA.pmda_notreadyê  s   € ô 	×ÒÕr   c                 ó.   • [         R                  " 5         g)z2
Tell PMCD the PMDA is ready to process requests.
N)r]   Ú
pmda_readyr7   s    r   r  ÚPMDA.pmda_readyð  s   € ô 	×ÒÕr   c                 ó  • S[         R                  ;   a[  U R                  5       n[        U[        5      (       a  [
        R                  " [	        U5      5        [
        R                  " S5        gS[         R                  ;   a  U R                  5         gS[         R                  ;   a#  U R                  [         R                  S   5        gU R                  5         [        R                  " U R                  5        [        R                  " U R                  5        [        R                  " U R                   5        [        R"                  " U R$                  5        [        R&                  " U R(                  U R*                  5        g)aŽ  
All the real work happens herein; we can be called in one of three
situations, determined by environment variables.  First one is for
pmcheck(1), next two are part of the agent Install process (where
the domain.h and namespace files need to be created).  The fourth
case is the real mccoy, where an agent is actually being started
by pmcd/dbpmda and makes use of libpcp_pmda to talk PCP protocol.
ÚPCP_PYTHON_PROBEé   ÚPCP_PYTHON_DOMAINÚPCP_PYTHON_PMNSN)ÚosÚenvironr  rp   ÚintÚsysÚexitr  r  rÆ   r]   Úpmid_oneline_refreshr´   Úpmid_longtext_refreshrµ   Úindom_oneline_refreshr®   Úindom_longtext_refreshr¯   Úpmda_dispatchr¬   r°   )r3   Úresults     r   ÚrunÚPMDA.runö  sø   € ð ¤§¡Ó+Ø×&Ñ&Ó(ˆFÜ˜&¤#×&Ñ&Ü—’œ˜V›Ô%Ü�HŠH�Q�KØ ¤B§J¡JÓ.Ø×ÑÕØ¤"§*¡*Ó,Ø�O‰OœBŸJ™JÐ'8Ñ9Õ:à×ÑÔÜ×&Ò& t×';Ñ';Ô<Ü×'Ò'¨×(=Ñ(=Ô>Ü×'Ò'¨×(;Ñ(;Ô<Ü×(Ò(¨×)=Ñ)=Ô>Ü×Ò × 0Ñ 0°$×2CÑ2CÕDr   c                 ó.   • [         R                  " U 5      $ r,   )r]   Ú	set_fetch)Úfetchs    r   r0  ÚPMDA.set_fetch  ó   € ä�Š˜uÓ%Ð%r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Ú	set_label)r   s    r   r5  ÚPMDA.set_label  r3  r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Ú	set_notes)Únotess    r   r8  ÚPMDA.set_notes  r3  r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_refresh)Úrefreshs    r   r<  ÚPMDA.set_refresh  s   € ä× Ò  Ó)Ð)r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_instance)rl   s    r   r@  ÚPMDA.set_instance   s   € ä×!Ò! (Ó+Ð+r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_fetch_callback)Úfetch_callbacks    r   rC  ÚPMDA.set_fetch_callback$  ó   € ä×'Ò'¨Ó7Ð7r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_label_callback)Úlabel_callbacks    r   rH  ÚPMDA.set_label_callback(  rF  r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_notes_callback)Únotes_callbacks    r   rL  ÚPMDA.set_notes_callback,  rF  r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_attribute_callback)Úattribute_callbacks    r   rP  ÚPMDA.set_attribute_callback0  s   € ä×+Ò+Ð,>Ó?Ð?r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_store_callback)Ústore_callbacks    r   rT  ÚPMDA.set_store_callback4  rF  r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_endcontext_callback)Úendcontext_callbacks    r   rX  ÚPMDA.set_endcontext_callback8  s   € ä×,Ò,Ð-@ÓAÐAr   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_refresh_all)Úrefresh_alls    r   r\  ÚPMDA.set_refresh_all<  s   € ä×$Ò$ [Ó1Ð1r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úset_refresh_metrics)Úrefresh_metricss    r   r`  ÚPMDA.set_refresh_metrics@  s   € ä×(Ò(¨Ó9Ð9r   c                  ó.   • [         R                  " 5         g r,   )r]   Úset_notify_changerA   r   r   rd  ÚPMDA.set_notify_changeD  s   € ä×ÒÕ!r   c                 óv   • S[         R                  ;   a  [        R                  $ [        R                  " U 5      $ )Nr  )r"  r#  rŽ   ÚPM_ERR_NOTCONNÚpmSetProcessIdentity)Úusernames    r   Úset_userÚPMDA.set_userH  s+   € à¤§¡Ó+Ü×(Ñ(Ð(Ü×*Ò*¨8Ó4Ð4r   c                 ó.   • [         R                  " X5      $ r,   )r]   ré   )rê   rë   s     r   r.   Ú	PMDA.pmidN  s   € ä�Š˜wÓ-Ð-r   c                 ó0   • [         R                  " XU5      $ r,   )r]   Ú
pmid_build)r·   rê   rë   s      r   ro  ÚPMDA.pmid_buildR  s   € ä×Ò °Ó6Ð6r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úpmid_cluster)rê   s    r   rr  ÚPMDA.pmid_clusterV  s   € ä×!Ò! 'Ó*Ð*r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Ú
pmda_indom)Úserials    r   r0   Ú
PMDA.indomZ  s   € ä×Ò Ó'Ð'r   c                 ó.   • [         R                  " X5      $ r,   )r]   Úindom_build)r·   rv  s     r   ry  ÚPMDA.indom_build^  s   € ä× Ò  Ó0Ð0r   c                 ó2   • [         R                  " XX#XE5      $ r,   )r]   Ú
pmda_units)Ú	dim_spaceÚdim_timeÚ	dim_countÚscale_spaceÚ
scale_timeÚscale_counts         r   r2   Ú
PMDA.unitsb  s   € ä×Ò 	°YÈZÓeÐer   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úpmda_uptime)Únows    r   ÚuptimeÚPMDA.uptimef  s   € ä× Ò  Ó%Ð%r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úpmda_set_comm_flags)r!   s    r   Úset_comm_flagsÚPMDA.set_comm_flagsj  s   € ä×(Ò(¨Ó/Ð/r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úpmda_log©Úmessages    r   ÚlogÚPMDA.logn  ó   € ä�~Š~˜gÓ&Ð&r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úpmda_dbgr�  s    r   ÚdbgÚPMDA.dbgr  r“  r   c                 ó.   • [         R                  " U 5      $ r,   )r]   Úpmda_errr�  s    r   ÚerrÚPMDA.errv  r“  r   )rö   rò   )NN)-r:   r;   r<   r=   r>   ró   r÷   ÚpropertyrK   r·   r-   r  r  r  r  r  r-  Ústaticmethodr0  r5  r8  r<  r@  rC  rH  rL  rP  rT  rX  r\  r`  rd  rj  r.   ro  rr  r0   ry  r2   r‡  r‹  r‘  r–  rš  r@   rA   r   r   rð   rð   ¤  sg  † ñòòñ �I˜t T¨4Ó0€DÙ�k 4¨¨tÓ4€Fô
	KòòDòò òòEð4 ñ&ó ð&ð ñ&ó ð&ð ñ&ó ð&ð ñ*ó ð*ð ñ,ó ð,ð ñ8ó ð8ð ñ8ó ð8ð ñ8ó ð8ð ñ@ó ð@ð ñ8ó ð8ð ñBó ðBð ñ2ó ð2ð ñ:ó ð:ð ñ"ó ð"ð ñ5ó ð5ð
 ñ.ó ð.ð ñ7ó ð7ð ñ+ó ð+ð ñ(ó ð(ð ñ1ó ð1ð ñfó ðfð ñ&ó ð&ð ñ0ó ð0ð ñ'ó ð'ð ñ'ó ð'ð ñ'ó ó'r   rð   ).r>   r"  r%  rŽ   r]   Ú	pcp.pmapir   rý   r   r   r   r   r   Úctypes.utilr	   Úctypesr
   r   r   r   r   r   r   r   r   r   r‚   ÚrestypeÚargtypesÚpmdaCacheStoreKeyrg   ÚpmdaCacheLookupNameÚpmdaCacheLookupKeyr\   r™   r   r   r#   r%   r'   rC   rP   rž   Úobjectr©   rð   rA   r   r   Ú<module>r§     st  ðñó, 
Û 
ã Û Ý &ß AÕ Aå $ß :Õ :ß 7Ó 7ñ ‘< 
Ó+Ó,€ð &+€× Ñ Ô "Ø'.°°xÀÐ&J€× Ñ Ô #Ø(-€× Ñ Ô %à�˜ %¨ð*3€× Ñ Ô &à&+€× Ñ Ô #à�™ Ó)©7°8Ó+<ð(>€× Ñ Ô $à*/€× Ñ Ô 'à�™7 5›>©7°8Ó+<ð,>€× Ñ Ô (à).€× Ñ Ô &à�˜5 (©G°HÓ,=Ù�‹™ Ó)ð++€× Ñ Ô 'ð #(€× Ñ Ô Ø$+¨VÐ#4€× Ñ Ô  Ø&+€× Ñ Ô #Ø(/°Ð'7€× Ñ Ô $à$)€× Ñ Ô !Ù&-©g°jÓ.AÓ&BÀHÐ%M€× Ñ Ô "Ø(-€× Ñ Ô %Ù*1°*Ó*=¸uÐ)E€× Ñ Ô &Ø#(€× Ñ Ô  Ù%,©W°ZÓ-@Ó%AÀ8Ð$L€× Ñ Ô !à%*€× Ñ Ô "Ø&(€× Ñ Ô #òòòòôk�ô kô"`�ô `ôp+�	ô p+ôdI�ô Iôa�Vô aôHT'ˆ>õ T'r   