U
    ÷;gçH  ã                   @   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%d&d'd(d)gƒZNed*d+d,d-d.d/gƒZOd0d1„ ZPd2d3„ ZQd4d5„ ZRd6d7„ ZSd8d9„ ZTd:d;„ ZUd<d=„ ZVejWZWejXZXdRd?d@„ZYejZZZe"rŠej[Z[dSdBdC„Z\dDdE„ Z]dFdG„ Z^dHdI„ Z_dJdK„ Z`dLdM„ ZadNdO„ ZbG dPdQ„ dQƒZcdS )Tz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)ÚProcessLookupErrorZPROCFS_PATHÚproc_threadsÚnet_io_countersÚproc_io_countersé   é   é   é   é   é   )ÚppidÚrssÚvmsÚcreate_timeÚniceÚnum_threadsÚstatusÚttynrÚpmemr    r!   Ú	scputimesÚuserÚsystemZidleZiowaitÚsvmemÚtotalÚ	availableÚpercentÚusedÚfreec                  C   s4   t  ¡ \} }}}}t| | | dd}t| ||||ƒS )Nr   ©Zround_)ÚcextZvirtual_memr   r+   )r,   Zavailr0   Z_pinnedZinuser.   © r3   ú1/tmp/pip-unpacked-wheel-u0epr1ex/psutil/_psaix.pyÚvirtual_memoryk   s    r5   c                  C   s:   t  ¡ \} }}}| | }t|| dd}t | |||||¡S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r1   )r2   Zswap_memr   r   Zsswap)r,   r0   ÚsinZsoutr/   r.   r3   r3   r4   Úswap_memoryq   s    r7   c                  C   s   t  ¡ } tdd„ t| Ž D ƒŽ S )z.Return system-wide CPU times as a named tuple.c                 S   s   g | ]}t |ƒ‘qS r3   )Úsum©Ú.0Úxr3   r3   r4   Ú
<listcomp>   s     zcpu_times.<locals>.<listcomp>)r2   Úper_cpu_timesr(   Úzip©Úretr3   r3   r4   Ú	cpu_times~   s    rA   c                  C   s   t  ¡ } dd„ | D ƒS )z6Return system per-CPU times as a list of named tuples.c                 S   s   g | ]}t |Ž ‘qS r3   )r(   r9   r3   r3   r4   r<   ‡   s     z!per_cpu_times.<locals>.<listcomp>)r2   r=   r?   r3   r3   r4   r=   „   s    r=   c                   C   s(   zt  d¡W S  tk
r"   Y dS X dS )z0Return the number of logical CPUs in the system.ÚSC_NPROCESSORS_ONLNN)ÚosÚsysconfÚ
ValueErrorr3   r3   r3   r4   Úcpu_count_logicalŠ   s    rF   c                  C   sv   dddg} t j| t jt jd}| ¡ \}}trDdd„ ||fD ƒ\}}|jdkr^td| |f ƒ‚| ¡  ¡ }t	|ƒptd S )	NZlsdevz-CcÚ	processor©ÚstdoutÚstderrc                 s   s   | ]}|  tjj¡V  qd S ©N©ÚdecodeÚsysrI   Úencodingr9   r3   r3   r4   Ú	<genexpr>˜   s    z"cpu_count_cores.<locals>.<genexpr>r   z%r command error
%s)
Ú
subprocessÚPopenÚPIPEÚcommunicater   Ú
returncodeÚRuntimeErrorÚstripÚ
splitlinesÚlen)ÚcmdÚprI   rJ   Z
processorsr3   r3   r4   Úcpu_count_cores“   s    
ÿ

r\   c                  C   s    t  ¡ \} }}}t | |||¡S )z*Return various CPU stats as a named tuple.)r2   Ú	cpu_statsr   Z	scpustats)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsr3   r3   r4   r]   ¡   s       ÿr]   Fc           	      C   s\   g }t  ¡ }|D ]F}|\}}}}|dkr,d}| s<t|ƒjs<qt ||||¡}| |¡ q|S )zReturn system disk partitions.ÚnoneÚ )r2   Údisk_partitionsÚ
disk_usager,   r   Z	sdiskpartÚappend)	ÚallÚretlistZ
partitionsÚ	partitionZdeviceZ
mountpointZfstypeÚoptsÚntupler3   r3   r4   r`   ²   s    
r`   éÿÿÿÿc                 C   s¬   t j}| |kr.td| d dd„ |D ƒ¡f ƒ‚t j|  \}}t |¡}g }|D ]X}|\}}	}
}}}}|	|krnqN|
|krxqNt||	|
|||t|dkr”|ndd}| |¡ qN|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   s   g | ]}t |ƒ‘qS r3   )Úreprr9   r3   r3   r4   r<   Ú   s     z#net_connections.<locals>.<listcomp>rh   N©Úpid)	r   Z	conn_tmaprE   Újoinr2   Únet_connectionsr   ÚTCP_STATUSESrb   )ÚkindÚ_pidZcmapZfamiliesÚtypesÚrawlistr@   ÚitemÚfdZfamÚtype_ÚladdrÚraddrr%   rk   Úntr3   r3   r4   rm   Ò   s8    ÿÿ
ø
rm   c                  C   sö   t tdœ} tdd„ tƒ D ƒƒ}i }|D ]Ê}t |¡}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k	r¼t| d¡ƒ}| d¡}d |¡}d|k}|  |t¡}t |||||¡||< q&|S )z)Get NIC stats (isup, duplex, speed, mtu).)ÚFullZHalfc                 S   s   g | ]}|d  ‘qS )r   r3   r9   r3   r3   r4   r<   ö   s     z net_if_stats.<locals>.<listcomp>r_   r   z/usr/bin/entstatz-drH   c                 s   s   | ]}|  tjj¡V  qd S rK   rL   r9   r3   r3   r4   rP     s    znet_if_stats.<locals>.<genexpr>z"Running: (\d+) Mbps.*?(\w+) DuplexNr   r   ú,Zrunning)r   r	   ÚsetÚnet_if_addrsÚ
cext_posixZ
net_if_mtuZnet_if_flagsrQ   rR   rS   rT   r   rU   ÚreÚsearchÚintÚgrouprl   Úgetr
   r   Z	snicstats)Z
duplex_mapÚnamesr@   ÚnameÚmtuÚflagsZduplexÚspeedr[   rI   rJ   Z	re_resultZoutput_flagsZisupr3   r3   r4   Únet_if_statsó   s>    


ýÿ

 ÿ

rˆ   c                   C   s   t  ¡ S )z:The system boot time expressed in seconds since the epoch.)r2   Ú	boot_timer3   r3   r3   r4   r‰     s    r‰   c                  C   s\   g } t  ¡ }d}|D ]B}|\}}}}}}	|s.q||kr:d}t |||||	¡}
|  |
¡ q| S )z:Return currently connected users as a list of namedtuples.)z:0.0z:0Ú	localhost)r2   Úusersr   Zsuserrb   )rd   rr   rŠ   rs   r)   ÚttyÚhostnameZtstampZuser_processrk   rx   r3   r3   r4   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 r3   )Úisdigitr€   r9   r3   r3   r4   r<   >  s      zpids.<locals>.<listcomp>)rC   Úlistdirr   r3   r3   r3   r4   Úpids<  s    r   c                 C   s   t j t j tƒ t| ƒd¡¡S )z&Check for the existence of a unix pid.Zpsinfo)rC   ÚpathÚexistsrl   r   Ústrrj   r3   r3   r4   Ú
pid_existsA  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              	      s|   zˆ | f|ž|ŽW S  t tfk
rV   t| jƒs@t| j| jƒ‚nt| j| j| jƒ‚Y n" tk
rv   t	| j| jƒ‚Y nX d S rK   )
r   r   r”   rk   r   Ú_namer   Ú_ppidr   r   )ÚselfÚargsÚkwargs©Úfunr3   r4   ÚwrapperK  s    
z wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)r›   rœ   r3   rš   r4   Úwrap_exceptionsF  s    rŸ   c                   @   sx  e Zd ZdZdddddg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rªedd„ ƒZedAd 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d0d1„ ƒZed2d3„ ƒZeZed4d5„ ƒZd6d7„ Z ed8d9„ ƒZ!ed:d;„ ƒZ"edBd=d>„ƒZ#e$rted?d@„ ƒZ%d<S )CÚProcessz1Wrapper class around underlying C implementation.Ú_cacher•   r–   Ú_procfs_pathrk   c                 C   s   || _ d | _d | _tƒ | _d S rK   )rk   r•   r–   r   r¢   )r—   rk   r3   r3   r4   Ú__init__b  s    zProcess.__init__c                 C   s   | j  | ¡ | j | ¡ d S rK   )Ú_proc_basic_infoZcache_activateÚ
_proc_cred©r—   r3   r3   r4   Úoneshot_enterh  s    zProcess.oneshot_enterc                 C   s   | j  | ¡ | j | ¡ d S rK   )r¤   Zcache_deactivater¥   r¦   r3   r3   r4   Úoneshot_exitl  s    zProcess.oneshot_exitc                 C   s   t  | j| j¡S rK   )r2   Zproc_basic_infork   r¢   r¦   r3   r3   r4   r¤   p  s    zProcess._proc_basic_infoc                 C   s   t  | j| j¡S rK   )r2   Z	proc_credrk   r¢   r¦   r3   r3   r4   r¥   u  s    zProcess._proc_credc                 C   s$   | j dkrdS t | j | j¡ d¡S )Nr   Zswapperú )rk   r2   Z	proc_namer¢   Úrstripr¦   r3   r3   r4   r„   z  s    
zProcess.namec                 C   sÒ   |   ¡ }|sdS |d }tjj|kr€tj |¡sJtj tj |  ¡ |¡¡}tj |¡rttj |¡rtt 	|tj
¡rt|S tj |¡}tjd  d¡D ]<}tj tj ||¡¡}tj |¡rt 	|tj
¡r|  S qdS )Nr_   r   ÚPATHú:)ÚcmdlinerC   r‘   ÚsepÚisabsÚabspathrl   ÚcwdÚisfileÚaccessÚX_OKÚbasenameÚenvironÚsplit)r—   r­   Úexer‘   Zpossible_exer3   r3   r4   r¸     s.    
ÿ
þý ÿ
zProcess.exec                 C   s   t  | j¡S rK   )r2   Z	proc_argsrk   r¦   r3   r3   r4   r­   Ÿ  s    zProcess.cmdlinec                 C   s   t  | j¡S rK   )r2   Zproc_environrk   r¦   r3   r3   r4   r¶   £  s    zProcess.environc                 C   s   |   ¡ td  S )Nr"   ©r¤   Úproc_info_mapr¦   r3   r3   r4   r"   §  s    zProcess.create_timec                 C   s   |   ¡ td  S )Nr$   r¹   r¦   r3   r3   r4   r$   «  s    zProcess.num_threadsc                 C   sV   t  | j¡}g }|D ]"\}}}t |||¡}| |¡ q|sRt d| j| jf ¡ |S )Nú%s/%s)	r2   r   rk   r   Zpthreadrb   rC   Ústatr¢   )r—   rr   rd   Z	thread_idÚutimeZstimerg   r3   r3   r4   Úthreads±  s    zProcess.threadsÚinetc                 C   s,   t || jd}|s(t d| j| jf ¡ |S )N)rp   r»   )rm   rk   rC   r¼   r¢   )r—   ro   r@   r3   r3   r4   rm   Â  s    zProcess.net_connectionsc                 C   s   t  | j¡S rK   )r}   Úgetpriorityrk   r¦   r3   r3   r4   Únice_getÏ  s    zProcess.nice_getc                 C   s   t  | j|¡S rK   )r}   Úsetpriorityrk   )r—   Úvaluer3   r3   r4   Únice_setÓ  s    zProcess.nice_setc                 C   s   |   ¡ td  | _| jS )Nr   )r¤   rº   r–   r¦   r3   r3   r4   r   ×  s    zProcess.ppidc                 C   s"   |   ¡ \}}}}}}t |||¡S rK   ©r¥   r   Zpuids)r—   ÚrealÚ	effectiveÚsavedÚ_r3   r3   r4   ÚuidsÜ  s    zProcess.uidsc                 C   s"   |   ¡ \}}}}}}t |||¡S rK   rÅ   )r—   rÉ   rÆ   rÇ   rÈ   r3   r3   r4   Úgidsá  s    zProcess.gidsc                 C   s   t  | j| j¡}tj|Ž S rK   )r2   Zproc_cpu_timesrk   r¢   r   Z	pcputimes)r—   Útr3   r3   r4   rA   æ  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º   ÚglobrC   r¼   Úst_rdev)r—   ZttydevÚdevr3   r3   r4   Úterminalë  s    
zProcess.terminalc                 C   sV   | j }z t d|| jf ¡}| d¡W S  tk
rP   t d|| jf ¡ Y dS X d S )Nz	%s/%s/cwdú/r»   r_   )r¢   rC   Úreadlinkrk   rª   r   r¼   )r—   Zprocfs_pathÚresultr3   r3   r4   r±   ö  s    zProcess.cwdc                 C   s2   |   ¡ }|td  d }|td  d }t||ƒS )Nr    i   r!   )r¤   rº   r'   )r—   r@   r    r!   r3   r3   r4   Úmemory_info   s    zProcess.memory_infoc                 C   s   |   ¡ td  }t |d¡S )Nr%   ú?)r¤   rº   ÚPROC_STATUSESr‚   )r—   Úcoder3   r3   r4   r%   	  s    zProcess.statusc                 C   sÄ   t jddt| jƒgt jt jd}| ¡ \}}trFdd„ ||fD ƒ\}}d| ¡ kr`t| j| j	ƒ‚t
 d|¡}g }|D ]J\}}| ¡ }| d¡rš|d	d … }| ¡ d
kr¨qt| t |t|ƒ¡¡ qt|S )Nz/usr/bin/procfilesz-nrH   c                 s   s   | ]}|  tjj¡V  qd S rK   rL   r9   r3   r3   r4   rP     s    z%Process.open_files.<locals>.<genexpr>zno such processz(\d+): S_IFREG.*name:(.*)\nz//r   zcannot be retrieved)rQ   rR   r“   rk   rS   rT   r   Úlowerr   r•   r~   ÚfindallrW   Ú
startswithrb   r   Z	popenfiler€   )r—   r[   rI   rJ   Z	procfilesrd   rt   r‘   r3   r3   r4   Ú
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)rk   rY   rC   r   r¢   r¦   r3   r3   r4   Únum_fds)  s    
zProcess.num_fdsc                 C   s   t jt | j¡Ž S rK   )r   Zpctxswr2   Zproc_num_ctx_switchesrk   r¦   r3   r3   r4   Únum_ctx_switches/  s    zProcess.num_ctx_switchesNc                 C   s   t  | j|| j¡S rK   )r   Zwait_pidrk   r•   )r—   Útimeoutr3   r3   r4   Úwait3  s    zProcess.waitc                 C   sX   zt  | j¡\}}}}W n. tk
rF   t| jƒs@t| j| jƒ‚‚ Y nX t ||||¡S rK   )	r2   r   rk   ÚOSErrorr”   r   r•   r   Zpio)r—   ÚrcZwcÚrbÚwbr3   r3   r4   Úio_counters9  s    
zProcess.io_counters)r¿   )N)&Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r£   r§   r¨   rŸ   r   r¤   r¥   r„   r¸   r­   r¶   r"   r$   ÚHAS_THREADSr¾   rm   rÁ   rÄ   r   rÊ   rË   rA   rÑ   r±   rÕ   Zmemory_full_infor%   rÜ   rÝ   rÞ   rà   ÚHAS_PROC_IO_COUNTERSrå   r3   r3   r3   r4   r    ]  sv   















	



r    )F)rh   )dré   r   rÎ   rC   r~   rQ   rN   Úcollectionsr   r_   r   r   r   r2   r   r}   r   r	   r
   r   r   r   r   r   r   r   Ú_compatr   r   r   r   Z__extra__all__Úhasattrrë   ZHAS_NET_IO_COUNTERSrì   ZgetpagesizeZ	PAGE_SIZEZAF_LINKZSIDLZSTATUS_IDLEZSZOMBZSTATUS_ZOMBIEZSACTIVEZSTATUS_RUNNINGZSSWAPZSSTOPZSTATUS_STOPPEDr×   ZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZTCPS_SYN_SENTZCONN_SYN_SENTZTCPS_SYN_RCVDZCONN_SYN_RECVZTCPS_FIN_WAIT_1ZCONN_FIN_WAIT1ZTCPS_FIN_WAIT_2ZCONN_FIN_WAIT2ZTCPS_TIME_WAITZCONN_TIME_WAITZTCPS_CLOSEDZ
CONN_CLOSEZTCPS_CLOSE_WAITZCONN_CLOSE_WAITZTCPS_LAST_ACKZCONN_LAST_ACKZTCPS_LISTENZCONN_LISTENZTCPS_CLOSINGZCONN_CLOSINGZPSUTIL_CONN_NONEZ	CONN_NONErn   Údictrº   r'   Zpfullmemr(   r+   r5   r7   rA   r=   rF   r\   r]   Zdisk_io_countersra   r`   r|   r   rm   rˆ   r‰   r‹   r   r”   rŸ   r    r3   r3   r3   r4   Ú<module>   sÌ   


     û	            ôø	

!,