grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a úº†j=ã@s¦dZddlmZmZmZmZmZddlmZm Z ddl m Z m Z m Z mZddl mZmZmZmZddlmZddlmZddlmZeed ƒƒZd ej_d ej_eej_e e e gej_eej_e e gej_eej_e e gej_eej_e e e e e e gej_eej _e ee gej _e ej!_ee gej!_e ej"_e gej"_e ej#_d ej#_e ej$_egej$_e ej%_egej%_e ej&_e gej&_e ej'_eee ee egej'_e ej(_eee gej(_e ej)_eeegej)_e ej*_eegej*_e ej+_e egej+_e ej,_e e gej,_e ej-_e e gej-_e ej._eeƒgej._e ej/_eeƒgej/_e ej0_d ej0_e ej1_e e e egej1_e ej2_e e e eegej2_Gd d „d e3ƒZ4Gd d„de5ƒZ6d S)aBWrapper 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 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) log.pmiWrite(time.time()) # sec since epoch, or datetime, or #log.pmiWrite(seconds, useconds) del log é)ÚpmIDÚpmInDomÚpmUnitsÚpmHighResResultÚpmResult)Ú pmiErrSymDictÚPMI_MAXERRMSGLEN)Úc_intÚc_uintÚ c_longlongÚc_char_p)ÚcastÚcreate_string_bufferÚPOINTERÚCDLL)Ú find_library)Údatetime)ÚmodfZ pcp_importNcs0eZdZdZ‡fdd„Zdd„Zdd„Z‡ZS)ÚpmiErrz4 Encapsulation for PMI interface error code csBtt|ƒj|Žt|ƒ|_|r8t|dtƒr8|d|_nd|_dS)Nr)ÚsuperrÚ__init__ÚlistÚargsÚ isinstanceÚintÚcode)Úselfr©Ú __class__©ú-/usr/lib64/python3.9/site-packages/pcp/pmi.pyr•s   zpmiErr.__init__cCsNz&t|j}ttƒ}t |j|t¡}Wnty@d}}Yn0d||fS)NÚz%s %s)rrrrÚ LIBPCP_IMPORTÚ pmiErrStr_rÚKeyError)rZ error_symbolZ error_stringrrr Ú__str__�s  ÿ zpmiErr.__str__cCs|jS)N)r©rrrr Úerrno§sz pmiErr.errno)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr%r'Ú __classcell__rrrr r‘s  rc@s eZdZdZdd„Zdd„ZeedddƒZeedddƒZd6dd „Z d d „Z d d „Z dd„Z dd„Z edd„ƒZedd„ƒZedd„ƒZedd„ƒZdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd7d&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zed2d3„ƒZd4d5„Z dS)8Ú pmiLogImportzqDefines a PCP Log Import archive context This is used to create a PCP archive from an external source cCs|jS)z Property for archive path )Ú_pathr&rrr Ú read_path¹szpmiLogImport.read_pathcCs|jS)z! Property for log import context )Ú_ctxr&rrr Úread_ctx¼szpmiLogImport.read_ctxNrcCsPt|tƒs| d¡}||_t d¡|_t t |ƒ|¡|_ |j dkrLt |j ƒ‚dS)Núutf-8r) rÚbytesÚencoder.rZutcfromtimestampÚ_epochr"ÚpmiStartr r0r)rÚpathZinheritrrr rÉs    zpmiLogImport.__init__cCs"trt |j¡t ¡d|_dS)Néÿÿÿÿ)r"Ú pmiUseContextr0ÚpmiEndr&rrr Ú__del__Òs zpmiLogImport.__del__cCsRt |j¡}|dkrt|ƒ‚t|tƒs0| d¡}t t|ƒ¡}|dkrNt|ƒ‚|S)z8PMI - set the source host name for a Log Import archive rr2) r"r9r0rrr3r4ÚpmiSetHostnamer )rÚhostnameÚstatusrrr r<Ûs   zpmiLogImport.pmiSetHostnamecCsRt |j¡}|dkrt|ƒ‚t|tƒs0| d¡}t t|ƒ¡}|dkrNt|ƒ‚|S)z?PMI - set the source timezone for a Log Import archive rr2) r"r9r0rrr3r4ÚpmiSetTimezoner )rÚtimezoner>rrr r?çs   zpmiLogImport.pmiSetTimezonecCsHt |j¡}|dkrt|ƒ‚t|tƒs*d}t |¡}|dkrDt|ƒ‚|S)z6PMI - set the output archive version (2 or 3) ré)r"r9r0rrrÚ pmiSetVersion)rÚversionr>rrr rBôs   zpmiLogImport.pmiSetVersioncCst |||¡S©z7PMI - construct a pmID data structure (helper routine) )r"ÚpmiID)ÚdomainÚclusterÚitemrrr rEszpmiLogImport.pmiIDcCs t ||¡SrD)r"Ú pmiCluster)rFrGrrr rIszpmiLogImport.pmiClustercCs t ||¡S)z:PMI - construct a pmInDom data structure (helper routine) )r"ÚpmiInDom)rFÚserialrrr rJ szpmiLogImport.pmiInDomcCst ||||||¡S)z;PMI - construct a pmiUnits data structure (helper routine) )r"ÚpmiUnits)Z dim_spaceZdim_timeZ dim_countZ scale_spaceZ scale_timeZ scale_countrrr rLs ÿzpmiLogImport.pmiUnitscCs\t |j¡}|dkrt|ƒ‚t|tƒs0| d¡}t t|ƒ|||||¡}|dkrXt|ƒ‚|S)z:PMI - add a new metric definition to a Log Import context rr2) r"r9r0rrr3r4Ú pmiAddMetricr )rÚnameZpmidÚtypedÚindomZsemZunitsr>rrr rMs     ÿzpmiLogImport.pmiAddMetriccCsVt |j¡}|dkrt|ƒ‚t|tƒs0| d¡}t |t|ƒ|¡}|dkrRt|ƒ‚|S)z@PMI - add element to an instance domain in a Log Import context rr2) r"r9r0rrr3r4ÚpmiAddInstancer )rrPÚinstanceZinstidr>rrr rQ$s   zpmiLogImport.pmiAddInstancecCs–t |j¡}|dkrt|ƒ‚t|tƒs0| d¡}d}|durXt|tƒsP| d¡}t|ƒ}t|tƒsl| d¡}t t|ƒ|t|ƒ¡}|dkr’t|ƒ‚|S)z-PMI - add a value for a metric-instance pair rr2N) r"r9r0rrr3r4r Ú pmiPutValue)rrNÚinstÚvaluer>rRrrr rS0s$        ÿzpmiLogImport.pmiPutValuecCs|t |j¡}|dkrt|ƒ‚t|tƒs0| d¡}d}|durXt|tƒsP| d¡}t|ƒ}t t|ƒ|¡}|dkrxt|ƒ‚|S)z1PMI - define a handle for a metric-instance pair rr2N) r"r9r0rrr3r4r Ú pmiGetHandle)rrNrTr>rRrrr rVDs     zpmiLogImport.pmiGetHandlecCsTt |j¡}|dkrt|ƒ‚t|tƒs0| d¡}t |t|ƒ¡}|dkrPt|ƒ‚|S)z:PMI - add a value for a metric-instance pair via a handle rr2) r"r9r0rrr3r4ÚpmiPutValueHandler )rZhandlerUr>rrr rWUs   zpmiLogImport.pmiPutValueHandlecCs<t |j¡}|dkrt|ƒ‚t ||¡}|dkr8t|ƒ‚|S)ú)PMI - flush data to a Log Import archive r)r"r9r0rÚpmiHighResWrite)rÚsecZnsecr>rrr rYas  zpmiLogImport.pmiHighResWritecCs”t |j¡}|dkrt|ƒ‚|rt|stt|tƒr@t||j ¡ƒ}t|tƒrpt |ƒ}t |dƒ}t |ddƒ}nd}t  ||¡}|dkr�t|ƒ‚|S)rXréi@B) r"r9r0rrrÚfloatr5Z total_secondsrrÚ pmiWrite2)rrZZusecr>Útsrrr ÚpmiWriteks     zpmiLogImport.pmiWritecCs8t |j¡}|dkrt|ƒ‚t ¡}|dkr4t|ƒ‚|S)z4PMI - write a record to a Log Import archive r)r"r9r0rÚ pmiPutMark©rr>rrr r`~s zpmiLogImport.pmiPutMarkcCsDt |j¡}|dkrt|ƒ‚t t|ttƒƒ¡}|dkr@t|ƒ‚|S©z0PMI - add a data record to a Log Import archive r)r"r9r0rÚ pmiPutResultr rr©rÚresultr>rrr Ú put_resultˆs zpmiLogImport.put_resultcCsDt |j¡}|dkrt|ƒ‚t t|ttƒƒ¡}|dkr@t|ƒ‚|Srb)r"r9r0rÚpmiPutHighResResultr rrrdrrr Úput_highres_result’s zpmiLogImport.put_highres_resultcCsXt |j¡}|dkrt|ƒ‚t|tƒs0| d¡}t |||t|ƒ¡}|dkrTt|ƒ‚|S)z0PMI - add a text record to a Log Import archive rr2) r"r9r0rrr3r4Ú pmiPutTextr )rÚtypÚclsÚidentÚcontentr>rrr riœs   zpmiLogImport.pmiPutTextcCsrt |j¡}|dkrt|ƒ‚t|tƒs0| d¡}t|tƒsD| d¡}t |||t|ƒt|ƒ¡}|dkrnt|ƒ‚|S)z1PMI - add a label record to a Log Import archive rr2) r"r9r0rrr3r4Ú pmiPutLabelr )rrjrlrTrNrmr>rrr rn¨s     zpmiLogImport.pmiPutLabelcCs t ¡dS)z8PMI - dump the current Log Import contexts (diagnostic) N)r"ÚpmiDumprrrr ro¶szpmiLogImport.pmiDumpcCs>t |j¡}|dkrt|ƒ‚t ¡}d|_|dkr:t|ƒ‚|S)zsz3      þ      ÿ