
    rC
f;                        d Z ddlmZmZmZmZmZ ddlmZm	Z	 ddl
Z
ddl
mZmZmZmZmZmZ  e
j"                  e
j$                  j'                  d            Zdej*                  _        dej*                  _        eej0                  _        eeegej0                  _        eej2                  _        eegej2                  _        eej4                  _        eegej4                  _        eej6                  _        eeeeeegej6                  _        eej8                  _        eeegej8                  _        eej:                  _        eegej:                  _        eej<                  _        egej<                  _        eej>                  _        dej>                  _        eej@                  _        egej@                  _        eejB                  _        egejB                  _        eejD                  _        egejD                  _        eejF                  _        eeeeeegejF                  _        eejH                  _        eeegejH                  _        eejJ                  _        eeegejJ                  _        eejL                  _        eegejL                  _        eejN                  _        eegejN                  _        eejP                  _        eegejP                  _        eejR                  _        eegejR                  _        eejT                  _         ee      gejT                  _        eejV                  _         ee      gejV                  _        eejX                  _        dejX                  _        eejZ                  _        eeeegejZ                  _        eej\                  _        eeeeegej\                  _         G d de/      Z0 G d	 d
e1      Z2y)a  Wrapper module for libpcp_import - Performace Co-Pilot Log Import API
#
# Copyright (C) 2012-2022 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.
#

# Example use of this module for creating a PCP archive:

        import math
        import time
        import pmapi
        from pcp import pmi

        # Create a new archive
        log = pmi.pmiLogImport("loadtest")
        log.pmiSetHostname("www.abc.com")
        log.pmiSetTimezone("EST-10")

        # Add a metric with an instance domain
        domain = 60  # Linux kernel
        pmid = log.pmiID(domain, 2, 0)
        indom = log.pmiInDom(domain, 2)
        units = log.pmiUnits(0, 0, 0, 0, 0, 0)
        log.pmiAddMetric("kernel.all.load", pmid, pmapi.PM_TYPE_FLOAT,
                         indom, pmapi.PM_SEM_INSTANT, units)
        log.pmiAddInstance(indom, "1 minute", 1)
        log.pmiAddInstance(indom, "5 minute", 5)
        log.pmiAddInstance(indom, "15 minute", 15)

        # Create a record with a timestamp
        log.pmiPutValue("kernel.all.load", "1 minute", "%f" % 0.01)
        log.pmiPutValue("kernel.all.load", "5 minute", "%f" % 0.05)
        log.pmiPutValue("kernel.all.load", "15 minute", "%f" % 0.15)
        timetuple = math.modf(time.time())
        useconds = int(timetuple[0] * 1000000)
        seconds = int(timetuple[1])
        log.pmiWrite(seconds, useconds)
        del log
    )pmIDpmInDompmUnitspmHighResResultpmResult)pmiErrSymDictPMI_MAXERRMSGLENN)castc_intc_uint
c_longlongc_char_pPOINTER
pcp_importc                   .     e Zd ZdZ fdZd Zd Z xZS )pmiErrz4
    Encapsulation for PMI interface error code
    c                     t        t        | 
  |  t        |      | _        |rt        |d   t              r|d   | _        y d| _        y )Nr   )superr   __init__listargs
isinstanceintcode)selfr   	__class__s     )/usr/lib/python3/dist-packages/pcp/pmi.pyr   zpmiErr.__init__   s?    fd$d+J	JtAw,QDIDI    c                     	 t         | j                     }t        j                  t              }t
        j                  | j                  |t              }|d|S # t        $ r dx}}Y w xY w)N  )r   r   ctypescreate_string_bufferr	   LIBPCP_IMPORTpmiErrStr_rKeyError)r   error_symbolerror_strings      r   __str__zpmiErr.__str__   sj    	-(3L!667GHL(44TYY5EGL '55  	-*,,L<	-s   AA A*)A*c                     | j                   S )N)r   r   s    r   errnozpmiErr.errno   s    yyr   )__name__
__module____qualname____doc__r   r)   r,   __classcell__)r   s   @r   r   r      s    6r   r   c                      e Zd ZdZd Zd Z eeddd      Z eeddd      ZddZ	d Z
d Zd Zd	 Zed
        Zed        Zed        Zed        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zed        Zd Z y)pmiLogImportzqDefines a PCP Log Import archive context
       This is used to create a PCP archive from an external source
    c                     | j                   S )z Property for archive path )_pathr+   s    r   	read_pathzpmiLogImport.read_path   s    zzr   c                     | j                   S )z! Property for log import context )_ctxr+   s    r   read_ctxzpmiLogImport.read_ctx   s    yyr   Nc                     t        |t              s|j                  d      }|| _        t        j                  t        |      |      | _        | j                  dk  rt        | j                        y )Nutf-8r   )	r   bytesencoder5   r$   pmiStartr   r8   r   )r   pathinherits      r   r   zpmiLogImport.__init__   sX    $&;;w'D
!**8D>7C	99q=## r   c                     t         r3t         j                  | j                         t         j                          d| _        y )N)r$   pmiUseContextr8   pmiEndr+   s    r   __del__zpmiLogImport.__del__   s*    ''		2  "	r   c                    t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }t         j                  t        |            }|dk  rt        |      |S )z8PMI - set the source host name for a Log Import archive r   r;   )	r$   rC   r8   r   r   r<   r=   pmiSetHostnamer   )r   hostnamestatuss      r   rG   zpmiLogImport.pmiSetHostname   sj    ,,TYY7A:. (E*w/H--hx.@AA:. r   c                    t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }t         j                  t        |            }|dk  rt        |      |S )z?PMI - set the source timezone for a Log Import archive
        r   r;   )	r$   rC   r8   r   r   r<   r=   pmiSetTimezoner   )r   timezonerI   s      r   rK   zpmiLogImport.pmiSetTimezone   sl     ,,TYY7A:. (E*w/H--hx.@AA:. r   c                     t         j                  | j                        }|dk  rt        |      t	        |t
              sd}t         j                  |      }|dk  rt        |      |S )z6PMI - set the output archive version (2 or 3)
        r      )r$   rC   r8   r   r   r   pmiSetVersion)r   versionrI   s      r   rO   zpmiLogImport.pmiSetVersion   s^     ,,TYY7A:. '3'G,,W5A:. r   c                 0    t         j                  | ||      S z7PMI - construct a pmID data structure (helper routine) )r$   pmiID)domainclusteritems      r   rS   zpmiLogImport.pmiID   s     ""67D99r   c                 .    t         j                  | |      S rR   )r$   
pmiCluster)rT   rU   s     r   rX   zpmiLogImport.pmiCluster  s     ''88r   c                 .    t         j                  | |      S )z:PMI - construct a pmInDom data structure (helper routine) )r$   pmiInDom)rT   serials     r   rZ   zpmiLogImport.pmiInDom	  s     %%ff55r   c                 6    t         j                  | |||||      S )z;PMI - construct a pmiUnits data structure (helper routine) )r$   pmiUnits)	dim_spacedim_time	dim_countscale_space
scale_timescale_counts         r   r]   zpmiLogImport.pmiUnits  s&    
 %%i9&1:{L 	Lr   c                    t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }t         j                  t        |      |||||      }|dk  rt        |      |S )z:PMI - add a new metric definition to a Log Import context r   r;   )	r$   rC   r8   r   r   r<   r=   pmiAddMetricr   )r   namepmidtypedindomsemunitsrI   s           r   re   zpmiLogImport.pmiAddMetric  sy     ,,TYY7A:. $&;;w'D++HTN,0%ULA:. r   c                    t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }t         j                  |t        |      |      }|dk  rt        |      |S )z@PMI - add element to an instance domain in a Log Import context r   r;   )	r$   rC   r8   r   r   r<   r=   pmiAddInstancer   )r   ri   instanceinstidrI   s        r   rm   zpmiLogImport.pmiAddInstance$  sn    ,,TYY7A:. (E*w/H--eXh5GPA:. r   c                    t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }d}|,t	        |t
              s|j                  d      }t        |      }t	        |t
              s|j                  d      }t         j                  t        |      |t        |            }|dk  rt        |      |S )z-PMI - add a value for a metric-instance pair r   r;   N)	r$   rC   r8   r   r   r<   r=   r   pmiPutValue)r   rf   instvaluerI   rn   s         r   rq   zpmiLogImport.pmiPutValue0  s    ,,TYY7A:. $&;;w'DdE*{{7+~H%'LL)E**8D>+3Xe_FA:. r   c                 d   t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }d}|,t	        |t
              s|j                  d      }t        |      }t         j                  t        |      |      }|dk  rt        |      |S )z1PMI - define a handle for a metric-instance pair r   r;   N)	r$   rC   r8   r   r   r<   r=   r   pmiGetHandle)r   rf   rr   rI   rn   s        r   ru   zpmiLogImport.pmiGetHandleD  s    ,,TYY7A:. $&;;w'DdE*{{7+~H++HTNHEA:. r   c                    t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }t         j                  |t        |            }|dk  rt        |      |S )z:PMI - add a value for a metric-instance pair via a handle r   r;   )	r$   rC   r8   r   r   r<   r=   pmiPutValueHandler   )r   handlers   rI   s       r   rw   zpmiLogImport.pmiPutValueHandleU  sk    ,,TYY7A:. %'LL)E00%IA:. r   c                     t         j                  | j                        }|dk  rt        |      t         j	                  ||      }|dk  rt        |      |S z)PMI - flush data to a Log Import archive r   )r$   rC   r8   r   pmiHighResWrite)r   secnsecrI   s       r   r{   zpmiLogImport.pmiHighResWritea  sO    ,,TYY7A:. ..sD9A:. r   c                     t         j                  | j                        }|dk  rt        |      t         j	                  ||      }|dk  rt        |      |S rz   )r$   rC   r8   r   	pmiWrite2)r   r|   usecrI   s       r   pmiWritezpmiLogImport.pmiWritek  sO    ,,TYY7A:. ((d3A:. r   c                     t         j                  | j                        }|dk  rt        |      t         j	                         }|dk  rt        |      |S )z4PMI - write a <mark> record to a Log Import archive r   )r$   rC   r8   r   
pmiPutMarkr   rI   s     r   r   zpmiLogImport.pmiPutMarku  sK    ,,TYY7A:. ))+A:. r   c                     t         j                  | j                        }|dk  rt        |      t         j	                  t        |t        t                          }|dk  rt        |      |S z0PMI - add a data record to a Log Import archive r   )r$   rC   r8   r   pmiPutResultr
   r   r   r   resultrI   s      r   
put_resultzpmiLogImport.put_result  sY    ,,TYY7A:. ++D9J,KLA:. r   c                     t         j                  | j                        }|dk  rt        |      t         j	                  t        |t        t                          }|dk  rt        |      |S r   )r$   rC   r8   r   pmiPutHighResResultr
   r   r   r   s      r   put_highres_resultzpmiLogImport.put_highres_result  sY    ,,TYY7A:. 224@X3YZA:. r   c                    t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }t         j                  |||t        |            }|dk  rt        |      |S )z0PMI - add a text record to a Log Import archive r   r;   )	r$   rC   r8   r   r   r<   r=   
pmiPutTextr   )r   typclsidentcontentrI   s         r   r   zpmiLogImport.pmiPutText  sp    ,,TYY7A:. '5)nnW-G))#sE8G;LMA:. r   c           	      ^   t         j                  | j                        }|dk  rt        |      t	        |t
              s|j                  d      }t	        |t
              s|j                  d      }t         j                  |||t        |      t        |            }|dk  rt        |      |S )z1PMI - add a label record to a Log Import archive r   r;   )	r$   rC   r8   r   r   r<   r=   pmiPutLabelr   )r   r   r   rr   rf   r   rI   s          r   r   zpmiLogImport.pmiPutLabel  s     ,,TYY7A:. $&;;w'D'5)nnW-G**3tXd^XV]M^_A:. r   c                  ,    t         j                          y)z8PMI - dump the current Log Import contexts (diagnostic) N)r$   pmiDump r   r   r   zpmiLogImport.pmiDump  s     	r   c                     t         j                  | j                        }|dk  rt        |      t         j	                         }d| _        |dk  rt        |      |S )z<PMI - close current context and finish a Log Import archive r   rB   )r$   rC   r8   r   rD   r   s     r   rD   zpmiLogImport.pmiEnd  sR    ,,TYY7A:. %%'	A:. r   )r   )!r-   r.   r/   r0   r6   r9   propertyr?   ctxr   rE   rG   rK   rO   staticmethodrS   rX   rZ   r]   re   rm   rq   ru   rw   r{   r   r   r   r   r   r   r   rD   r   r   r   r3   r3      s     ItT40D
8T4
.C
$
 : : 9 9 6 6 L L
("

    	r   r3   )3r0   	pcp.pmapir   r   r   r   r   cpmir   r	   r"   r
   r   r   r   r   r   CDLLutilfind_libraryr$   r   restypeargtypesrS   rX   rZ   r]   r%   r>   rC   rD   rG   rK   rO   re   rm   rq   ru   rw   r   r{   r   r   r   r   r   	Exceptionr   objectr3   r   r   r   <module>r      s  2h H G 0  E E FKK44\BC
 !%   !%   "    %ue4   #'    %*EN   !!(   #(%.   !(   ueue#    %-   !&+Xu%=   "!&   #+U"3   &+   #(-w   $$    $   ',   $)1
   %',   $)1
   %&+   #(-w   $%*   "$ww'8   # (-   $)0(E(B   %$)   !&.(%C   "%*   "'/&:   #*/   ',18+<   ("'   $.#6    (-   %*4e)<   &,1 ! ! ).5o.F-G ! ! *%*   "'.x'8&9   ##(    $(   !#(    %+VVX$F   !$)   !&,ffh%Q   "Y @L6 Lr   