U
    ˜ËjÐD  ã                   @   sb  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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Z)ej*ej+ej,ej-ej.ej/ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAiZBeCddddddddd�ZDdd„ ZEdd „ ZFd!d"„ ZGd#d$„ ZHd%d&„ ZId'd(„ ZJd)d*„ ZKejLZLejMZMd?d,d-„ZNejOZOe�rejPZPd@d/d0„ZQd1d2„ ZRd3d4„ ZSd5d6„ ZTd7d8„ ZUd9d:„ ZVd;d<„ ZWG d=d>„ d>ƒZXdS )AzAIX platform implementation.é    Né   )Ú_common)Ú_ntuples)Ú_psposix)Ú_psutil_aix)ÚNIC_DUPLEX_FULL)ÚNIC_DUPLEX_HALF)ÚNIC_DUPLEX_UNKNOWN)ÚAccessDenied)ÚNoSuchProcess)ÚZombieProcess)Úconn_to_ntuple)Úget_procfs_path)Úmemoize_when_activated)Úusage_percentZPROCFS_PATHÚproc_threadsÚnet_io_countersÚproc_io_countersé   é   é   é   é   é   )ÚppidÚrssÚvmsÚcreate_timeÚniceÚnum_threadsÚstatusÚttynrc                  C   s6   t  ¡ \} }}}}t| | | dd�}t | ||||¡S )Nr   ©Zround_)ÚcextZvirtual_memr   ÚntpZsvmem)ÚtotalZavailÚfreeZ_pinnedZinuseÚpercent© r(   ú1/tmp/pip-unpacked-wheel-3no1_rt3/psutil/_psaix.pyÚvirtual_memoryV   s    r*   c                  C   s:   t  ¡ \} }}}| | }t|| dd�}t | |||||¡S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r"   )r#   Zswap_memr   r$   Zsswap)r%   r&   ÚsinZsoutÚusedr'   r(   r(   r)   Úswap_memory\   s    r-   c                  C   s    t  ¡ } tjdd„ t| Ž D ƒŽ S )z.Return system-wide CPU times as a named tuple.c                 S   s   g | ]}t |ƒ‘qS r(   )Úsum©Ú.0Úxr(   r(   r)   Ú
<listcomp>l   s     zcpu_times.<locals>.<listcomp>)r#   Úper_cpu_timesr$   Ú	scputimesÚzip©Úretr(   r(   r)   Ú	cpu_timesi   s    r8   c                  C   s   t  ¡ } dd„ | D ƒS )z6Return system per-CPU times as a list of named tuples.c                 S   s   g | ]}t j|Ž ‘qS r(   )r$   r4   r/   r(   r(   r)   r2   r   s     z!per_cpu_times.<locals>.<listcomp>)r#   r3   r6   r(   r(   r)   r3   o   s    r3   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Ú
ValueErrorr(   r(   r(   r)   Úcpu_count_logicalu   s    r=   c                  C   sx   dddg} t j| t jt jd�}| ¡ \}}dd„ ||fD ƒ\}}|jdkr`| ›d|› �}t|ƒ‚| ¡  ¡ }t|ƒpvd S )	NZlsdevz-CcÚ	processor©ÚstdoutÚstderrc                 s   s   | ]}|  tjj¡V  qd S ©N©ÚdecodeÚsysr@   Úencodingr/   r(   r(   r)   Ú	<genexpr>‚   s     z"cpu_count_cores.<locals>.<genexpr>r   z command error
)	Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚRuntimeErrorÚstripÚ
splitlinesÚlen)ÚcmdÚpr@   rA   ÚmsgZ
processorsr(   r(   r)   Úcpu_count_cores~   s    

rT   c                  C   s    t  ¡ \} }}}t | |||¡S )z*Return various CPU stats as a named tuple.)r#   Ú	cpu_statsr$   Z	scpustats)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsr(   r(   r)   rU   Š   s    rU   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Ú )r#   Údisk_partitionsÚ
disk_usager%   r$   Z	sdiskpartÚappend)	ÚallÚretlistZ
partitionsÚ	partitionZdeviceZ
mountpointZfstypeÚoptsÚntupler(   r(   r)   rX   ™   s    
rX   éÿÿÿÿc                 C   s~   t j|  \}}t |¡}g }|D ]X}|\}}}	}
}}}||kr@q |	|krJq t|||	|
||t|dkrf|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).
    r`   N©Úpid)r   Z	conn_tmapr#   Únet_connectionsr   ÚTCP_STATUSESrZ   )ÚkindÚ_pidZfamiliesÚtypesÚrawlistr7   ÚitemÚfdZfamÚtype_ÚladdrÚraddrr    rb   Úntr(   r(   r)   rc   ¹   s*    
ø
rc   c                  C   sî   t tdœ} dd„ tƒ D ƒ}i }|D ]Æ}t |¡}t |¡}d}d}tjdd|gtjtjd�}| 	¡ \}	}
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   h | ]}|d  ’qS )r   r(   r/   r(   r(   r)   Ú	<setcomp>×   s     znet_if_stats.<locals>.<setcomp>rW   r   z/usr/bin/entstatz-dr?   c                 s   s   | ]}|  tjj¡V  qd S rB   rC   r/   r(   r(   r)   rG   è   s    znet_if_stats.<locals>.<genexpr>z"Running: (\d+) Mbps.*?(\w+) DuplexNr   r   ú,Zrunning)r   r   Únet_if_addrsr#   Z
net_if_mtuZnet_if_flagsrH   rI   rJ   rK   rL   ÚreÚsearchÚintÚgroupÚjoinÚgetr	   r$   Z	snicstats)Z
duplex_mapÚnamesr7   ÚnameZmtuÚflagsZduplexÚspeedrR   r@   rA   Z	re_resultZoutput_flagsZisupr(   r(   r)   Únet_if_statsÔ   s<    


ýÿ

 ÿ

r}   c                   C   s   t  ¡ S )z:The system boot time expressed in seconds since the epoch.)r#   Ú	boot_timer(   r(   r(   r)   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)r#   Úusersr$   ZsuserrZ   )r\   rh   r   ri   ÚuserÚttyÚhostnameZtstampZuser_processrb   rn   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(   )Úisdigitru   r/   r(   r(   r)   r2     s      zpids.<locals>.<listcomp>)r:   Ú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.Zpsinfo)r:   ÚpathÚexistsrw   r   Ústrra   r(   r(   r)   Ú
pid_exists!  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¢   | j | j| j  }}}zˆ | f|ž|ŽW S  ttfk
rp } z&t|ƒsRt||ƒ|‚t|||ƒ|‚W 5 d }~X Y n. tk
rœ } zt	||ƒ|‚W 5 d }~X Y nX d S rB   )
rb   Ú_ppidÚ_nameÚFileNotFoundErrorÚProcessLookupErrorrŠ   r   r   ÚPermissionErrorr
   )ÚselfÚargsÚkwargsrb   r   rz   Úerr©Úfunr(   r)   Úwrapper+  s    z wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)r•   r–   r(   r”   r)   Úwrap_exceptions&  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_pathrb   c                 C   s   || _ d | _d | _tƒ | _d S rB   )rb   rŒ   r‹   r   rœ   )r�   rb   r(   r(   r)   Ú__init__B  s    zProcess.__init__c                 C   s   | j  | ¡ | j | ¡ d S rB   )Ú_proc_basic_infoZcache_activateÚ
_proc_cred©r�   r(   r(   r)   Úoneshot_enterH  s    zProcess.oneshot_enterc                 C   s   | j  | ¡ | j | ¡ d S rB   )rž   Zcache_deactivaterŸ   r    r(   r(   r)   Úoneshot_exitL  s    zProcess.oneshot_exitc                 C   s   t  | j| j¡S rB   )r#   Zproc_basic_inforb   rœ   r    r(   r(   r)   rž   P  s    zProcess._proc_basic_infoc                 C   s   t  | j| j¡S rB   )r#   Z	proc_credrb   rœ   r    r(   r(   r)   rŸ   U  s    zProcess._proc_credc                 C   s$   | j dkrdS t | j | j¡ d¡S )Nr   Zswapperú )rb   r#   Z	proc_namerœ   Úrstripr    r(   r(   r)   rz   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 |¡r�t 	|tj
¡r�|  S q�dS )NrW   r   ÚPATHú:)Úcmdliner:   r‡   ÚsepÚisabsÚabspathrw   ÚcwdÚisfileÚaccessÚX_OKÚbasenameÚenvironÚsplit)r�   r§   Úexer‡   Zpossible_exer(   r(   r)   r²   a  s.    
ÿ
þý ÿ
zProcess.exec                 C   s   t  | j¡S rB   )r#   Z	proc_argsrb   r    r(   r(   r)   r§     s    zProcess.cmdlinec                 C   s   t  | j¡S rB   )r#   Zproc_environrb   r    r(   r(   r)   r°   ƒ  s    zProcess.environc                 C   s   |   ¡ td  S )Nr   ©rž   Úproc_info_mapr    r(   r(   r)   r   ‡  s    zProcess.create_timec                 C   s   |   ¡ td  S )Nr   r³   r    r(   r(   r)   r   ‹  s    zProcess.num_threadsc                 C   sX   t  | j¡}g }|D ]"\}}}t |||¡}| |¡ q|sTt | j› d| j› �¡ |S )Nú/)	r#   r   rb   r$   ZpthreadrZ   r:   Ústatrœ   )r�   rh   r\   Z	thread_idÚutimeZstimer_   r(   r(   r)   Úthreads‘  s    zProcess.threadsÚinetc                 C   s.   t || jd�}|s*t | j› d| j› �¡ |S )N)rf   rµ   )rc   rb   r:   r¶   rœ   )r�   re   r7   r(   r(   r)   rc   ¢  s    zProcess.net_connectionsc                 C   s   t  | j¡S rB   )r#   Zproc_priority_getrb   r    r(   r(   r)   Únice_get¯  s    zProcess.nice_getc                 C   s   t  | j|¡S rB   )r#   Zproc_priority_setrb   )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 rB   ©rŸ   r$   Zpuids)r�   ÚrealÚ	effectiveÚsavedÚ_r(   r(   r)   Úuids¼  s    zProcess.uidsc                 C   s"   |   ¡ \}}}}}}t |||¡S rB   r½   )r�   rÁ   r¾   r¿   rÀ   r(   r(   r)   ÚgidsÁ  s    zProcess.gidsc                 C   s   t  | j| j¡}tj|Ž S rB   )r#   Zproc_cpu_timesrb   rœ   r$   Z	pcputimes)r�   Útr(   r(   r)   r8   Æ  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´   Úglobr:   r¶   Úst_rdev)r�   ZttydevÚdevr(   r(   r)   ÚterminalË  s    
zProcess.terminalc                 C   s\   | j }z$t |› d| j› d�¡}| d¡W S  tk
rV   t |› d| j› �¡ Y dS X d S )Nrµ   z/cwdrW   )rœ   r:   Úreadlinkrb   r¤   r�   r¶   )r�   Zprocfs_pathÚresultr(   r(   r)   r«   Ö  s    zProcess.cwdc                 C   s4   |   ¡ }|td  d }|td  d }t ||¡S )Nr   i   r   )rž   r´   r$   Zpmem)r�   r7   r   r   r(   r(   r)   Úmemory_infoà  s    zProcess.memory_infoc                 C   s   |   ¡ td  }t |d¡S )Nr    ú?)rž   r´   ÚPROC_STATUSESrx   )r�   Úcoder(   r(   r)   r    é  s    zProcess.statusc                 C   sÀ   t jddt| jƒgt jt jd�}| ¡ \}}dd„ ||fD ƒ\}}d| ¡ kr\t| j| jƒ‚t	 
d|¡}g }|D ]J\}}| ¡ }| d¡r–|d	d … }| ¡ d
kr¤qp| t |t|ƒ¡¡ qp|S )Nz/usr/bin/procfilesz-nr?   c                 s   s   | ]}|  tjj¡V  qd S rB   rC   r/   r(   r(   r)   rG   ø  s    z%Process.open_files.<locals>.<genexpr>zno such processz(\d+): S_IFREG.*name:(.*)\nz//r   zcannot be retrieved)rH   rI   r‰   rb   rJ   rK   Úlowerr   rŒ   rs   ÚfindallrN   Ú
startswithrZ   r$   Z	popenfileru   )r�   rR   r@   rA   Z	procfilesr\   rj   r‡   r(   r(   r)   Ú
open_filesï  s*    ýÿ

zProcess.open_filesc                 C   s,   | j dkrdS tt | j› d| j › d�¡ƒS )Nr   rµ   z/fd)rb   rP   r:   r…   rœ   r    r(   r(   r)   Únum_fds  s    
zProcess.num_fdsc                 C   s   t jt | j¡Ž S rB   )r$   Zpctxswr#   Zproc_num_ctx_switchesrb   r    r(   r(   r)   Únum_ctx_switches  s    zProcess.num_ctx_switchesNc                 C   s   t  | j|¡S rB   )r   Zwait_pidrb   )r�   Útimeoutr(   r(   r)   Úwait  s    zProcess.waitc              
   C   sh   zt  | j¡\}}}}W n> tk
rV } z t| jƒsDt| j| jƒ|‚‚ W 5 d }~X Y nX t ||||¡S rB   )	r#   r   rb   ÚOSErrorrŠ   r   rŒ   r$   Zpio)r�   ÚrcZwcÚrbÚwbr“   r(   r(   r)   Úio_counters  s    
zProcess.io_counters)r¹   )N)&Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r�   r¡   r¢   r™   r   rž   rŸ   rz   r²   r§   r°   r   r   ÚHAS_THREADSr¸   rc   rº   r¼   r   rÂ   rÃ   r8   rÉ   r«   rÌ   Zmemory_full_infor    rÓ   rÔ   rÕ   r×   ÚHAS_PROC_IO_COUNTERSrÜ   r(   r(   r(   r)   rš   =  sv   















	



rš   )F)r`   )Yrà   r—   rÆ   r:   rs   rH   rE   rW   r   r   r$   r   r   r#   r   r   r	   r
   r   r   r   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_NONErd   Údictr´   r*   r-   r8   r3   r=   rT   rU   Zdisk_io_countersrY   rX   rr   r   rc   r}   r~   r€   r†   rŠ   r™   rš   r(   r(   r(   r)   Ú<module>   sº   


     û	            ôø	

+