o
    ˆ¶¹axH  ã                   @   sÎ  d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddl	mZ ddl	mZ ddl	mZ dd	l
mZ dd
l
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ dgZe edƒZ!e edƒZ"e edƒZ#e $¡ Z%ej&Z&ej'e
j(ej)e
j*ej+e
j,ej-e
j,ej.e
j/iZ0ej1e
j2ej3e
j4ej5e
j6ej7e
j8ej9e
j:ej;e
j<ej=e
j>ej?e
j@ejAe
jBejCe
jDejEe
jFejGe
jHiZIeJdddddddd d!�ZKed"d#d$gƒZLeLZMed%g d&¢ƒZNed'g d(¢ƒZOd)d*„ ZPd+d,„ ZQd-d.„ ZRd/d0„ ZSd1d2„ ZTd3d4„ ZUd5d6„ ZVejWZWejXZXdKd8d9„ZYejZZZe"�r@ej[Z[dLd;d<„Z\d=d>„ Z]d?d@„ Z^dAdB„ Z_dCdD„ Z`dEdF„ ZadGdH„ ZbG dIdJ„ dJecƒZddS )MzAIX platform implementation.é    N)Ú
namedtupleé   )Ú_common)Ú_psposix)Ú_psutil_aix)Ú_psutil_posix)ÚNIC_DUPLEX_FULL)ÚNIC_DUPLEX_HALF)ÚNIC_DUPLEX_UNKNOWN)ÚAccessDenied)ÚNoSuchProcess)ÚZombieProcess)Úconn_to_ntuple)Úget_procfs_path)Úmemoize_when_activated)Úusage_percent)ÚPY3)ÚFileNotFoundError)ÚPermissionError)ÚProcessLookupErrorÚPROCFS_PATHÚproc_threadsÚnet_io_countersÚproc_io_countersé   é   é   é   é   é   )ÚppidÚrssÚvmsÚcreate_timeÚniceÚnum_threadsÚstatusÚttynrÚpmemr!   r"   Ú	scputimes)ÚuserÚsystemÚidleÚiowaitÚsvmem)ÚtotalÚ	availableÚpercentÚusedÚfreec                  C   s4   t  ¡ \} }}}}t| | | dd�}t| ||||ƒS )Nr   ©Úround_)ÚcextÚvirtual_memr   r.   )r/   Úavailr3   ÚpinnedÚinuser1   © r;   ú//usr/lib/python3/dist-packages/psutil/_psaix.pyÚvirtual_memoryj   s   r=   c                  C   s:   t  ¡ \} }}}| | }t|| dd�}t | |||||¡S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r4   )r6   Úswap_memr   r   Ússwap)r/   r3   ÚsinÚsoutr2   r1   r;   r;   r<   Úswap_memoryp   s   rB   c                  C   s   t  ¡ } tdd„ t| Ž D ƒŽ S )z-Return system-wide CPU times as a named tuplec                 S   ó   g | ]}t |ƒ‘qS r;   )Úsum©Ú.0Úxr;   r;   r<   Ú
<listcomp>€   ó    zcpu_times.<locals>.<listcomp>)r6   Úper_cpu_timesr)   Úzip©Úretr;   r;   r<   Ú	cpu_times}   s   rN   c                  C   s   t  ¡ } dd„ | D ƒS )z5Return system per-CPU times as a list of named tuplesc                 S   s   g | ]}t |Ž ‘qS r;   )r)   rE   r;   r;   r<   rH   †   rI   z!per_cpu_times.<locals>.<listcomp>)r6   rJ   rL   r;   r;   r<   rJ   ƒ   s   rJ   c                   C   s"   zt  d¡W S  ty   Y dS w )z0Return the number of logical CPUs in the system.ÚSC_NPROCESSORS_ONLNN)ÚosÚsysconfÚ
ValueErrorr;   r;   r;   r<   Úcpu_count_logical‰   s
   þrS   c                  C   sr   d} t j| dt jt jd�}| ¡ \}}tr dd„ ||fD ƒ\}}|jdkr-td| |f ƒ‚| ¡  ¡ }t	|ƒp8d S )Nzlsdev -Cc processorT)ÚshellÚstdoutÚstderrc                 S   ó   g | ]	}|  tjj¡‘qS r;   ©ÚdecodeÚsysrU   ÚencodingrE   r;   r;   r<   rH   ˜   ó    ÿz#cpu_count_cores.<locals>.<listcomp>r   z%r command error
%s)
Ú
subprocessÚPopenÚPIPEÚcommunicater   Ú
returncodeÚRuntimeErrorÚstripÚ
splitlinesÚlen)ÚcmdÚprU   rV   Ú
processorsr;   r;   r<   Úcpu_count_cores’   s   ÿ
ÿ
ri   c                  C   s    t  ¡ \} }}}t | |||¡S )z*Return various CPU stats as a named tuple.)r6   Ú	cpu_statsr   Ú	scpustats)Úctx_switchesÚ
interruptsÚsoft_interruptsÚsyscallsr;   r;   r<   rj       s   ÿrj   Fc              	   C   sh   g }t  ¡ }|D ])}|\}}}}|dkrd}| st|ƒjsqd }}	t ||||||	¡}
| |
¡ q|S )zReturn system disk partitions.ÚnoneÚ N)r6   Údisk_partitionsÚ
disk_usager/   r   Ú	sdiskpartÚappend)ÚallÚretlistÚ
partitionsÚ	partitionÚdeviceÚ
mountpointÚfstypeÚoptsÚmaxfileÚmaxpathÚntupler;   r;   r<   rr   °   s   
ÿrr   éÿÿÿÿc                 C   s¬   t j}| |vrtd| d dd„ |D ƒ¡f ƒ‚t j|  \}}t |¡}g }|D ],}|\}}	}
}}}}|	|vr7q'|
|vr<q't||	|
|||t|dkrJ|ndd�}| |¡ q'|S )zˆReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    z+invalid %r kind argument; choose between %sz, c                 S   rC   r;   )ÚreprrE   r;   r;   r<   rH   Ù   rI   z#net_connections.<locals>.<listcomp>r�   N©Úpid)	r   Ú	conn_tmaprR   Újoinr6   Únet_connectionsr   ÚTCP_STATUSESru   )ÚkindÚ_pidÚcmapÚfamiliesÚtypesÚrawlistrM   ÚitemÚfdÚfamÚtype_ÚladdrÚraddrr&   r„   Úntr;   r;   r<   r‡   Ò   s&   ÿ
ÿr‡   c                  C   sÜ   t tdœ} tdd„ tƒ D ƒƒ}i }|D ]X}t |¡\}}d}d}tjdd|gtjtjd�}| 	¡ \}	}
t
r@d	d„ |	|
fD ƒ\}	}
|jdkr[t d
|	¡}|dur[t| d¡ƒ}| d¡}|  |t¡}t ||||¡||< q|S )z)Get NIC stats (isup, duplex, speed, mtu).)ÚFullÚHalfc                 S   s   g | ]}|d  ‘qS )r   r;   rE   r;   r;   r<   rH   í   rI   z net_if_stats.<locals>.<listcomp>rq   r   z/usr/bin/entstatz-d©rU   rV   c                 S   rW   r;   rX   rE   r;   r;   r<   rH   û   r\   z"Running: (\d+) Mbps.*?(\w+) DuplexNr   r   )r   r	   ÚsetÚnet_if_addrsr6   Únet_if_statsr]   r^   r_   r`   r   ra   ÚreÚsearchÚintÚgroupÚgetr
   r   Ú	snicstats)Ú
duplex_mapÚnamesrM   ÚnameÚisupÚmtuÚduplexÚspeedrg   rU   rV   Ú	re_resultr;   r;   r<   r›   é   s6   ÿÿ
ÿ
ÿ
r›   c                   C   s   t  ¡ S )z:The system boot time expressed in seconds since the epoch.)r6   Ú	boot_timer;   r;   r;   r<   rª     s   rª   c                  C   s\   g } t  ¡ }d}|D ]!}|\}}}}}}	|sq
||v rd}t |||||	¡}
|  |
¡ q
| S )z:Return currently connected users as a list of namedtuples.)z:0.0z:0Ú	localhost)r6   Úusersr   Úsuserru   )rw   rŽ   r«   r�   r*   ÚttyÚhostnameÚtstampÚuser_processr„   r•   r;   r;   r<   r¬     s   r¬   c                   C   s   dd„ t  tƒ ¡D ƒS )z7Returns a list of PIDs currently running on the system.c                 S   s   g | ]
}|  ¡ rt|ƒ‘qS r;   )Úisdigitrž   rE   r;   r;   r<   rH   -  s    zpids.<locals>.<listcomp>)rP   Úlistdirr   r;   r;   r;   r<   Úpids+  s   r´   c                 C   s   t j t j tƒ t| ƒd¡¡S )z&Check for the existence of a unix pid.Úpsinfo)rP   ÚpathÚexistsr†   r   Ústrrƒ   r;   r;   r<   Ú
pid_exists0  s   r¹   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )zƒCall callable into a try/except clause and translate ENOENT,
    EACCES and EPERM in NoSuchProcess or AccessDenied exceptions.
    c              	      sp   zˆ | g|¢R i |¤ŽW S  t tfy*   t| jƒs!t| j| jƒ‚t| j| j| jƒ‚ ty7   t	| j| jƒ‚w ©N)
r   r   r¹   r„   r   Ú_namer   Ú_ppidr   r   )ÚselfÚargsÚkwargs©Úfunr;   r<   Úwrapper9  s   
ÿz wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)rÁ   rÂ   r;   rÀ   r<   Úwrap_exceptions5  s   rÅ   c                   @   st  e Zd ZdZg d¢Zdd„ Zdd„ Zdd„ Zee	d	d
„ ƒƒZ
ee	dd„ ƒƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZerRedd„ ƒZed=dd„ƒZedd„ ƒZed d!„ ƒZed"d#„ ƒZed$d%„ ƒZed&d'„ ƒZed(d)„ ƒZed*d+„ ƒZed,d-„ ƒZed.d/„ ƒZeZed0d1„ ƒZd2d3„ Z ed4d5„ ƒZ!ed6d7„ ƒZ"ed>d9d:„ƒZ#e$r¸ed;d<„ ƒZ%d8S d8S )?ÚProcessz1Wrapper class around underlying C implementation.)r„   r»   r¼   Ú_procfs_pathÚ_cachec                 C   s   || _ d | _d | _tƒ | _d S rº   )r„   r»   r¼   r   rÇ   )r½   r„   r;   r;   r<   Ú__init__O  s   zProcess.__init__c                 C   ó   | j  | ¡ | j | ¡ d S rº   )Ú_proc_basic_infoÚcache_activateÚ
_proc_cred©r½   r;   r;   r<   Úoneshot_enterU  ó   zProcess.oneshot_enterc                 C   rÊ   rº   )rË   Úcache_deactivaterÍ   rÎ   r;   r;   r<   Úoneshot_exitY  rÐ   zProcess.oneshot_exitc                 C   ó   t  | j| j¡S rº   )r6   Úproc_basic_infor„   rÇ   rÎ   r;   r;   r<   rË   ]  ó   zProcess._proc_basic_infoc                 C   rÓ   rº   )r6   Ú	proc_credr„   rÇ   rÎ   r;   r;   r<   rÍ   b  rÕ   zProcess._proc_credc                 C   s$   | j dkrdS t | j | j¡ d¡S )Nr   Úswapperú )r„   r6   Ú	proc_namerÇ   ÚrstriprÎ   r;   r;   r<   r¤   g  s   
zProcess.namec                 C   sÒ   |   ¡ }|sdS |d }tjj|v r@tj |¡s%tj tj |  ¡ |¡¡}tj |¡r:tj |¡r:t 	|tj
¡r:|S tj |¡}tjd  d¡D ]}tj tj ||¡¡}tj |¡rft 	|tj
¡rf|  S qHdS )Nrq   r   ÚPATHú:)ÚcmdlinerP   r¶   ÚsepÚisabsÚabspathr†   ÚcwdÚisfileÚaccessÚX_OKÚbasenameÚenvironÚsplit)r½   rÝ   Úexer¶   Úpossible_exer;   r;   r<   rè   n  s,   
ÿþÿ€zProcess.exec                 C   ó   t  | j¡S rº   )r6   Ú	proc_argsr„   rÎ   r;   r;   r<   rÝ   ‰  ó   zProcess.cmdlinec                 C   rê   rº   )r6   Úproc_environr„   rÎ   r;   r;   r<   ræ   �  rì   zProcess.environc                 C   ó   |   ¡ td  S )Nr#   ©rË   Úproc_info_maprÎ   r;   r;   r<   r#   ‘  ó   zProcess.create_timec                 C   rî   )Nr%   rï   rÎ   r;   r;   r<   r%   •  rñ   zProcess.num_threadsc                 C   sV   t  | j¡}g }|D ]\}}}t |||¡}| |¡ q
|s)t d| j| jf ¡ |S )Nú%s/%s)	r6   r   r„   r   Úpthreadru   rP   ÚstatrÇ   )r½   rŽ   rw   Ú	thread_idÚutimeÚstimer€   r;   r;   r<   Úthreadsš  s   zProcess.threadsÚinetc                 C   s,   t || jd�}|st d| j| jf ¡ |S )N)rŠ   rò   )r‡   r„   rP   rô   rÇ   )r½   r‰   rM   r;   r;   r<   Úconnections«  s   zProcess.connectionsc                 C   rê   rº   )Ú
cext_posixÚgetpriorityr„   rÎ   r;   r;   r<   Únice_get¸  rì   zProcess.nice_getc                 C   s   t  | j|¡S rº   )rû   Úsetpriorityr„   )r½   Úvaluer;   r;   r<   Únice_set¼  s   zProcess.nice_setc                 C   s   |   ¡ td  | _| jS )Nr    )rË   rð   r¼   rÎ   r;   r;   r<   r    À  s   zProcess.ppidc                 C   s"   |   ¡ \}}}}}}t |||¡S rº   ©rÍ   r   Úpuids)r½   ÚrealÚ	effectiveÚsavedÚ_r;   r;   r<   ÚuidsÅ  ó   zProcess.uidsc                 C   s"   |   ¡ \}}}}}}t |||¡S rº   r  )r½   r  r  r  r  r;   r;   r<   ÚgidsÊ  r  zProcess.gidsc                 C   s   t  | j| j¡}tj|Ž S rº   )r6   Úproc_cpu_timesr„   rÇ   r   Ú	pcputimes)r½   rN   r;   r;   r<   rN   Ï  s   
zProcess.cpu_timesc                 C   sP   |   ¡ td  }|d@ d? |d@ B }t d¡D ]}t |¡j|kr%|  S qd S )Nr'   l       ü é   iÿÿ  z	/dev/**/*)rË   rð   ÚglobrP   rô   Úst_rdev)r½   ÚttydevÚdevr;   r;   r<   ÚterminalÔ  s   ÿzProcess.terminalc                 C   sP   | j }zt d|| jf ¡}| d¡W S  ty'   t d|| jf ¡ Y d S w )Nz	%s/%s/cwdú/rò   )rÇ   rP   Úreadlinkr„   rÚ   r   rô   )r½   Úprocfs_pathÚresultr;   r;   r<   rá   ß  s   þzProcess.cwdc                 C   s2   |   ¡ }|td  d }|td  d }t||ƒS )Nr!   i   r"   )rË   rð   r(   )r½   rM   r!   r"   r;   r;   r<   Úmemory_infoé  s   
zProcess.memory_infoc                 C   s   |   ¡ td  }t |d¡S )Nr&   ú?)rË   rð   ÚPROC_STATUSESr    )r½   Úcoder;   r;   r<   r&   ò  s   zProcess.statusc                 C   sÄ   t jddt| jƒgt jt jd�}| ¡ \}}tr#dd„ ||fD ƒ\}}d| ¡ v r0t| j| j	ƒ‚t
 d|¡}g }|D ]%\}}| ¡ }| d¡rM|d	d … }| ¡ d
krTq:| t |t|ƒ¡¡ q:|S )Nz/usr/bin/procfilesz-nr˜   c                 S   rW   r;   rX   rE   r;   r;   r<   rH   ÿ  r\   z&Process.open_files.<locals>.<listcomp>zno such processz (\d+): S_IFREG.*\s*.*name:(.*)\nz//r   zcannot be retrieved)r]   r^   r¸   r„   r_   r`   r   Úlowerr   r»   rœ   Úfindallrc   Ú
startswithru   r   Ú	popenfilerž   )r½   rg   rU   rV   Ú	procfilesrw   r�   r¶   r;   r;   r<   Ú
open_filesø  s(   ÿ
ÿ
zProcess.open_filesc                 C   s(   | j dkrdS tt d| j| j f ¡ƒS )Nr   z%s/%s/fd)r„   re   rP   r³   rÇ   rÎ   r;   r;   r<   Únum_fds  s   
zProcess.num_fdsc                 C   s   t jt | j¡Ž S rº   )r   Úpctxswr6   Úproc_num_ctx_switchesr„   rÎ   r;   r;   r<   Únum_ctx_switches  s   
ÿzProcess.num_ctx_switchesNc                 C   s   t  | j|| j¡S rº   )r   Úwait_pidr„   r»   )r½   Útimeoutr;   r;   r<   Úwait  s   zProcess.waitc                 C   sR   zt  | j¡\}}}}W n ty    t| jƒst| j| jƒ‚‚ w t ||||¡S rº   )	r6   r   r„   ÚOSErrorr¹   r   r»   r   Úpio)r½   ÚrcÚwcÚrbÚwbr;   r;   r<   Úio_counters  s   
ûzProcess.io_counters)rù   rº   )&Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rÉ   rÏ   rÒ   rÅ   r   rË   rÍ   r¤   rè   rÝ   ræ   r#   r%   ÚHAS_THREADSrø   rú   rý   r   r    r  r	  rN   r  rá   r  Úmemory_full_infor&   r  r   r#  r&  ÚHAS_PROC_IO_COUNTERSr-  r;   r;   r;   r<   rÆ   J  sz    















	



þrÆ   )F)r�   )er1  rÃ   r  rP   rœ   r]   rZ   Úcollectionsr   rq   r   r   r   r6   r   rû   r   r	   r
   r   r   r   r   r   r   r   Ú_compatr   r   r   r   Ú__extra__all__Úhasattrr3  ÚHAS_NET_IO_COUNTERSr5  ÚgetpagesizeÚ	PAGE_SIZEÚAF_LINKÚSIDLÚSTATUS_IDLEÚSZOMBÚSTATUS_ZOMBIEÚSACTIVEÚSTATUS_RUNNINGÚSSWAPÚSSTOPÚSTATUS_STOPPEDr  ÚTCPS_ESTABLISHEDÚCONN_ESTABLISHEDÚTCPS_SYN_SENTÚCONN_SYN_SENTÚTCPS_SYN_RCVDÚCONN_SYN_RECVÚTCPS_FIN_WAIT_1ÚCONN_FIN_WAIT1ÚTCPS_FIN_WAIT_2ÚCONN_FIN_WAIT2ÚTCPS_TIME_WAITÚCONN_TIME_WAITÚTCPS_CLOSEDÚ
CONN_CLOSEÚTCPS_CLOSE_WAITÚCONN_CLOSE_WAITÚTCPS_LAST_ACKÚCONN_LAST_ACKÚTCPS_LISTENÚCONN_LISTENÚTCPS_CLOSINGÚCONN_CLOSINGÚPSUTIL_CONN_NONEÚ	CONN_NONErˆ   Údictrð   r(   Úpfullmemr)   r.   r=   rB   rN   rJ   rS   ri   rj   Údisk_io_countersrs   rr   rš   r   r‡   r›   rª   r¬   r´   r¹   rÅ   ÚobjectrÆ   r;   r;   r;   r<   Ú<module>   s¬   


û	ôø	

%