a MÝ_{Hã@sÎdZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZdgZe e dƒZ!e e dƒZ"e e dƒZ#e $¡Z%ej&Z&e j'e j(e j)e j*e j+e j,e j-e j,e j.e j/iZ0e j1e j2e j3e j4e j5e j6e j7e j8e j9e j:e j;e je j?e j@e jAe jBe jCe jDe jEe jFe jGe jHi ZIeJdddddddd d!ZKed"d#d$gƒZLeLZMed%gd&¢ƒZNed'gd(¢ƒZOd)d*„ZPd+d,„ZQd-d.„ZRd/d0„ZSd1d2„ZTd3d4„ZUd5d6„ZVe jWZWe jXZXdKd8d9„ZYejZZZe"r€e j[Z[dLd;d<„Z\d=d>„Z]d?d@„Z^dAdB„Z_dCdD„Z`dEdF„ZadGdH„ZbGdIdJ„dJecƒZddS)MzAIX platform implementation.éN)Ú namedtupleé)Ú_common)Ú_psposix)Ú _psutil_aix)Ú _psutil_posix)Ú AccessDenied)Úconn_to_ntuple)Úget_procfs_path)Úmemoize_when_activated)ÚNIC_DUPLEX_FULL)ÚNIC_DUPLEX_HALF)ÚNIC_DUPLEX_UNKNOWN)Ú NoSuchProcess)Ú usage_percent)Ú ZombieProcess)ÚFileNotFoundError)ÚPermissionError)ÚProcessLookupError)ÚPY3Z PROCFS_PATHÚ proc_threadsÚnet_io_countersÚproc_io_counterséééééé)ÚppidÚrssÚvmsÚ create_timeÚniceÚ num_threadsÚstatusÚttynrÚpmemr r!Ú scputimes)ÚuserÚsystemZidleZiowaitÚsvmem)ÚtotalZ availableÚpercentÚusedÚfreecCs4t ¡\}}}}}t|||dd}t|||||ƒS)Nr©Zround_)ÚcextZ virtual_memrr+)r,Zavailr/ZpinnedZinuser-©r2ú3/usr/lib64/python3.9/site-packages/psutil/_psaix.pyÚvirtual_memoryjsr4cCs:t ¡\}}}}||}t||dd}t ||||||¡S)z=Swap system memory as a (total, used, free, sin, sout) tuple.rr0)r1Zswap_memrrZsswap)r,r/ZsinZsoutr.r-r2r2r3Ú swap_memorypsr5cCst ¡}tdd„t|ŽDƒŽS)z-Return system-wide CPU times as a named tuplecSsg|] }t|ƒ‘qSr2)Úsum©Ú.0Úxr2r2r3Ú €ózcpu_times..)r1Ú per_cpu_timesr(Úzip©Úretr2r2r3Ú cpu_times}sr@cCst ¡}dd„|DƒS)z5Return system per-CPU times as a list of named tuplescSsg|] }t|Ž‘qSr2)r(r7r2r2r3r:†r;z!per_cpu_times..)r1r<r>r2r2r3r<ƒsr<cCs&z t d¡WSty YdS0dS)z0Return the number of logical CPUs in the system.ÚSC_NPROCESSORS_ONLNN)ÚosÚsysconfÚ ValueErrorr2r2r2r3Úcpu_count_logical‰s  rEcCsrd}tj|dtjtjd}| ¡\}}tr@dd„||fDƒ\}}|jdkrZtd||fƒ‚| ¡ ¡}t |ƒppdS)Nzlsdev -Cc processorT)ÚshellÚstdoutÚstderrcSsg|]}| tjj¡‘qSr2©ÚdecodeÚsysrGÚencodingr7r2r2r3r:˜sÿz&cpu_count_physical..rz%r command error %s) Ú subprocessÚPopenÚPIPEÚ communicaterÚ returncodeÚ RuntimeErrorÚstripÚ splitlinesÚlen)ÚcmdÚprGrHZ processorsr2r2r3Úcpu_count_physical’s ÿ ÿ   rXcCs t ¡\}}}}t ||||¡S)z*Return various CPU stats as a named tuple.)r1Ú cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsoft_interruptsZsyscallsr2r2r3rY sÿrYFc Cshg}t ¡}|D]R}|\}}}}|dkr,d}|s.rbN©Úpid) rZ conn_tmaprDÚjoinr1Únet_connectionsr Ú TCP_STATUSESr])ÚkindÚ_pidZcmapZfamiliesÚtypesÚrawlistr?ÚitemÚfdZfamÚtype_ZladdrZraddrr%reÚntr2r2r3rgÒs&ÿ ÿ rgc CsÜttdœ}tdd„tƒDƒƒ}i}|D]°}t |¡\}}d}d}tjdd|gtjtjd}|  ¡\} } t r€d d„| | fDƒ\} } |j dkr¶t   d | ¡} | d ur¶t|  d ¡ƒ}|  d ¡}| |t¡}t ||||¡||<q&|S)z)Get NIC stats (isup, duplex, speed, mtu).)ZFullZHalfcSsg|] }|d‘qS)rr2r7r2r2r3r:ír;z net_if_stats..rZrz/usr/bin/entstatz-d©rGrHcSsg|]}| tjj¡‘qSr2rIr7r2r2r3r:ûsÿz"Running: (\d+) Mbps.*?(\w+) DuplexNrr)r r ÚsetÚ net_if_addrsr1Ú net_if_statsrMrNrOrPrrQÚreÚsearchÚintÚgroupÚgetrrZ snicstats) Z duplex_mapÚnamesr?ÚnameZisupZmtuZduplexZspeedrWrGrHZ re_resultr2r2r3rtés6ÿ ÿ ÿ  ÿ  rtcCst ¡S)z:The system boot time expressed in seconds since the epoch.)r1Ú boot_timer2r2r2r3r|sr|c Cs\g}t ¡}d}|D]B}|\}}}}}} |s.q||vr:d}t ||||| ¡} | | ¡q|S)z:Return currently connected users as a list of namedtuples.)z:0.0z:0Ú localhost)r1ÚusersrZsuserr]) r_rlr}rmr)ZttyÚhostnameZtstampZ user_processrerpr2r2r3r~s r~cCsdd„t tƒ¡DƒS)z7Returns a list of PIDs currently running on the system.cSsg|]}| ¡rt|ƒ‘qSr2)Úisdigitrwr7r2r2r3r:-r;zpids..)rBÚlistdirr r2r2r2r3Úpids+sr‚cCstj tj tƒt|ƒd¡¡S)z&Check for the existence of a unix pid.Zpsinfo)rBÚpathÚexistsrfr Ústrrdr2r2r3Ú pid_exists0sr†cst ˆ¡‡fdd„ƒ}|S)zƒCall callable into a try/except clause and translate ENOENT, EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. c s~zˆ|g|¢Ri|¤ŽWSttfyZt|jƒsDt|j|jƒ‚nt|j|j|jƒ‚Yn tyxt |j|jƒ‚Yn0dS©N) rrr†rerÚ_namerÚ_ppidrr)ÚselfÚargsÚkwargs©Úfunr2r3Úwrapper9s  z wrap_exceptions..wrapper)Ú functoolsÚwraps)rŽrr2rr3Úwrap_exceptions5s r’c@sreZdZdZgd¢Zdd„Zdd„Zdd„Zee d d „ƒƒZ ee d d „ƒƒZ ed d„ƒZ edd„ƒZ edd„ƒZedd„ƒZedd„ƒZedd„ƒZer¤edd„ƒZed=dd„ƒZedd„ƒZed d!„ƒZed"d#„ƒZed$d%„ƒZed&d'„ƒZed(d)„ƒZed*d+„ƒZed,d-„ƒZed.d/„ƒZeZed0d1„ƒZd2d3„Z ed4d5„ƒZ!ed6d7„ƒZ"ed>d9d:„ƒZ#e$rned;d<„ƒZ%d8S)?ÚProcessz1Wrapper class around underlying C implementation.)rerˆr‰Ú _procfs_pathÚ_cachecCs||_d|_d|_tƒ|_dSr‡)rerˆr‰r r”)rŠrer2r2r3Ú__init__OszProcess.__init__cCs|j |¡|j |¡dSr‡)Ú_proc_basic_infoZcache_activateÚ _proc_cred©rŠr2r2r3Ú oneshot_enterUs zProcess.oneshot_entercCs|j |¡|j |¡dSr‡)r—Zcache_deactivater˜r™r2r2r3Ú oneshot_exitYs zProcess.oneshot_exitcCst |j|j¡Sr‡)r1Zproc_basic_inforer”r™r2r2r3r—]szProcess._proc_basic_infocCst |j|j¡Sr‡)r1Z proc_credrer”r™r2r2r3r˜bszProcess._proc_credcCs$|jdkrdSt |j|j¡ d¡S)NrZswapperú)rer1Z proc_namer”Úrstripr™r2r2r3r{gs z Process.namecCsÒ| ¡}|sdS|d}tjj|vr€tj |¡sJtj tj | ¡|¡¡}tj |¡rttj |¡rtt  |tj ¡rt|Stj  |¡}tj d  d¡D]<}tj tj ||¡¡}tj |¡rt  |tj ¡r|SqdS)NrZrÚPATHú:)ÚcmdlinerBrƒÚsepÚisabsÚabspathrfÚcwdÚisfileÚaccessÚX_OKÚbasenameÚenvironÚsplit)rŠr ÚexerƒZ possible_exer2r2r3r«ns*    ÿ þ   ÿ z Process.execCs t |j¡Sr‡)r1Z proc_argsrer™r2r2r3r ‰szProcess.cmdlinecCs t |j¡Sr‡)r1Z proc_environrer™r2r2r3r©szProcess.environcCs| ¡tdS)Nr"©r—Ú proc_info_mapr™r2r2r3r"‘szProcess.create_timecCs| ¡tdS)Nr$r¬r™r2r2r3r$•szProcess.num_threadscCsVt |j¡}g}|D]"\}}}t |||¡}| |¡q|sRt d|j|jf¡|S)Nú%s/%s) r1rrerZpthreadr]rBÚstatr”)rŠrlr_Z thread_idÚutimeZstimerar2r2r3Úthreadsšs  zProcess.threadsÚinetcCs,t||jd}|s(t d|j|jf¡|S)N)rjr®)rgrerBr¯r”)rŠrir?r2r2r3Ú connections«szProcess.connectionscCs t |j¡Sr‡)Ú cext_posixÚ getpriorityrer™r2r2r3Únice_get¸szProcess.nice_getcCst |j|¡Sr‡)r´Ú setpriorityre)rŠÚvaluer2r2r3Únice_set¼szProcess.nice_setcCs| ¡td|_|jS)Nr)r—r­r‰r™r2r2r3rÀsz Process.ppidcCs"| ¡\}}}}}}t |||¡Sr‡©r˜rZpuids)rŠÚrealÚ effectiveÚsavedÚ_r2r2r3ÚuidsÅsz Process.uidscCs"| ¡\}}}}}}t |||¡Sr‡rº)rŠr¾r»r¼r½r2r2r3ÚgidsÊsz Process.gidscCst |j|j¡}tj|ŽSr‡)r1Zproc_cpu_timesrer”rZ pcputimes)rŠr@r2r2r3r@ÏszProcess.cpu_timescCsP| ¡td}|d@d?|d@B}t d¡D]}t |¡j|kr.|Sq.dS)Nr&lüéiÿÿz /dev/**/*)r—r­ÚglobrBr¯Úst_rdev)rŠZttydevÚdevr2r2r3ÚterminalÔs  zProcess.terminalcCsT|j}z t d||jf¡}| d¡WStyNt d||jf¡YdS0dS)Nz %s/%s/cwdú/r®)r”rBÚreadlinkrerrr¯)rŠZ procfs_pathÚresultr2r2r3r¤ßs  z Process.cwdcCs2| ¡}|tdd}|tdd}t||ƒS)Nr ir!)r—r­r')rŠr?r r!r2r2r3Ú memory_infoészProcess.memory_infocCs| ¡td}t |d¡S)Nr%ú?)r—r­Ú PROC_STATUSESry)rŠÚcoder2r2r3r%òszProcess.statuscCsÄtjddt|jƒgtjtjd}| ¡\}}trFdd„||fDƒ\}}d| ¡vr`t|j|j ƒ‚t   d|¡}g}|D]J\}}|  ¡}|  d¡rš|d d…}| ¡d kr¨qt| t |t|ƒ¡¡qt|S) Nz/usr/bin/procfilesz-nrqcSsg|]}| tjj¡‘qSr2rIr7r2r2r3r:ÿsÿz&Process.open_files..zno such processz (\d+): S_IFREG.*\s*.*name:(.*)\nz//rzcannot be retrieved)rMrNr…rerOrPrÚlowerrrˆruÚfindallrSÚ startswithr]rZ popenfilerw)rŠrWrGrHZ procfilesr_rnrƒr2r2r3Ú open_filesøs(ÿ ÿ       zProcess.open_filescCs(|jdkrdStt d|j|jf¡ƒS)Nrz%s/%s/fd)rerUrBrr”r™r2r2r3Únum_fdss zProcess.num_fdscCstjt |j¡ŽSr‡)rZpctxswr1Zproc_num_ctx_switchesrer™r2r2r3Únum_ctx_switchess ÿzProcess.num_ctx_switchesNcCst |j||j¡Sr‡)rZwait_pidrerˆ)rŠÚtimeoutr2r2r3Úwaitsz Process.waitcCsVzt |j¡\}}}}Wn,tyDt|jƒs>t|j|jƒ‚‚Yn0t ||||¡Sr‡) r1rreÚOSErrorr†rrˆrZpio)rŠÚrcZwcÚrbÚwbr2r2r3Ú io_counterss  zProcess.io_counters)r²)N)&Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__r–ršr›r’r r—r˜r{r«r r©r"r$Ú HAS_THREADSr±r³r¶r¹rr¿rÀr@rÅr¤rÉZmemory_full_infor%rÐrÑrÒrÔÚHAS_PROC_IO_COUNTERSrÙr2r2r2r3r“Jsv                       r“)F)rb)erÝrrÂrBrurMrKÚ collectionsrrZrrrr1rr´rr r r r r rrrrZ_compatrrrrZ__extra__all__ÚhasattrrßZHAS_NET_IO_COUNTERSràZ getpagesizeZ PAGE_SIZEZAF_LINKZSIDLZ STATUS_IDLEZSZOMBZ STATUS_ZOMBIEZSACTIVEZSTATUS_RUNNINGZSSWAPZSSTOPZSTATUS_STOPPEDrËZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZ TCPS_SYN_SENTZ CONN_SYN_SENTZ TCPS_SYN_RCVDZ CONN_SYN_RECVZTCPS_FIN_WAIT_1ZCONN_FIN_WAIT1ZTCPS_FIN_WAIT_2ZCONN_FIN_WAIT2ZTCPS_TIME_WAITZCONN_TIME_WAITZ TCPS_CLOSEDZ CONN_CLOSEZTCPS_CLOSE_WAITZCONN_CLOSE_WAITZ TCPS_LAST_ACKZ CONN_LAST_ACKZ TCPS_LISTENZ CONN_LISTENZ TCPS_CLOSINGZ CONN_CLOSINGZPSUTIL_CONN_NONEZ CONN_NONErhÚdictr­r'Zpfullmemr(r+r4r5r@r<rErXrYZdisk_io_countersr\r[rsrrgrtr|r~r‚r†r’Úobjectr“r2r2r2r3Úsª                      û ôø     %