U
    (cH                     @   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"rej[Z[dSdBdCZ\dDdE Z]dFdG Z^dHdI Z_dJdK Z`dLdM ZadNdO ZbG dPdQ dQecZdd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-l83rk7k5/psutil/_psaix.pyvirtual_memoryj   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_memoryp   s    r7   c                  C   s   t  } tdd t|  D  S )z-Return system-wide CPU times as a named tuplec                 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 )z5Return system per-CPU times as a list of named tuplesc                 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   sr   d} t j| dt jt jd}| \}}tr@dd ||fD \}}|jdkrZtd| |f |  }t	|ppd S )Nzlsdev -Cc processorT)shellstdoutstderrc                 S   s   g | ]}| tjjqS r3   decodesysrH   encodingr9   r3   r3   r4   r<      s   z#cpu_count_cores.<locals>.<listcomp>r   z%r command error
%s)

subprocessPopenPIPEcommunicater   
returncodeRuntimeErrorstrip
splitlineslen)cmdprH   rI   Z
processorsr3   r3   r4   cpu_count_cores   s    

rY   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   rZ      s       rZ   Fc              	   C   sh   g }t  }|D ]R}|\}}}}|dkr,d}| s<t|js<qd }}	t||||||	}
||
 q|S )zReturn system disk partitions.none N)r2   disk_partitions
disk_usager,   r   Z	sdiskpartappend)allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeoptsZmaxfileZmaxpath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 )zReturn 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>re   Npid)	r   Z	conn_tmaprE   joinr2   net_connectionsr   TCP_STATUSESr_   )kind_pidZcmapZfamiliestypesrawlistr@   itemfdZfamtype_laddrraddrr%   rh   ntr3   r3   r4   rj      s(    
 rj   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rd	d |	|
fD \}	}
|jdkrtd
|	}|dk	rt|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-drH   rI   c                 S   s   g | ]}| tjjqS r3   rJ   r9   r3   r3   r4   r<      s   z"Running: (\d+) Mbps.*?(\w+) DuplexNr   r   ,Zrunning)r   r	   setnet_if_addrs
cext_posixZ
net_if_mtuZnet_if_flagsrN   rO   rP   rQ   r   rR   researchintgroupri   getr
   r   Z	snicstats)Z
duplex_mapnamesr@   nameZmtuflagsZduplexspeedrX   rH   rI   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suserr_   )ra   ro   r   rp   r)   ttyhostnameZtstampZuser_processrh   ru   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<   0  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existsri   r   strrg   r3   r3   r4   
pid_exists3  s    r   c                    s   t   fdd}|S )zCall 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 N)
r   r   r   rh   r   _namer   _ppidr   r   )selfargskwargsfunr3   r4   wrapper<  s    
z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   r3   r   r4   wrap_exceptions8  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re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.rh   r   r   _procfs_path_cachec                 C   s   || _ d | _d | _t | _d S r   )rh   r   r   r   r   )r   rh   r3   r3   r4   __init__R  s    zProcess.__init__c                 C   s   | j |  | j|  d S r   )_proc_basic_infoZcache_activate
_proc_credr   r3   r3   r4   oneshot_enterX  s    zProcess.oneshot_enterc                 C   s   | j |  | j|  d S r   )r   Zcache_deactivater   r   r3   r3   r4   oneshot_exit\  s    zProcess.oneshot_exitc                 C   s   t | j| jS r   )r2   Zproc_basic_inforh   r   r   r3   r3   r4   r   `  s    zProcess._proc_basic_infoc                 C   s   t | j| jS r   )r2   Z	proc_credrh   r   r   r3   r3   r4   r   e  s    zProcess._proc_credc                 C   s$   | j dkrdS t| j | jdS )Nr   Zswapper )rh   r2   Z	proc_namer   rstripr   r3   r3   r4   r   j  s    
zProcess.namec                 C   s   |   }|sdS |d }tjj|krt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abspathri   cwdisfileaccessX_OKbasenameenvironsplit)r   r   exer   Zpossible_exer3   r3   r4   r   q  s*    

zProcess.exec                 C   s   t | jS r   )r2   Z	proc_argsrh   r   r3   r3   r4   r     s    zProcess.cmdlinec                 C   s   t | jS r   )r2   Zproc_environrh   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   rh   r   Zpthreadr_   rC   statr   )r   ro   ra   Z	thread_idutimeZstimerd   r3   r3   r4   threads  s    zProcess.threadsinetc                 C   s,   t || jd}|s(td| j| jf  |S )N)rm   r   )rj   rh   rC   r   r   )r   rl   r@   r3   r3   r4   connections  s    zProcess.connectionsc                 C   s   t | jS r   )r{   getpriorityrh   r   r3   r3   r4   nice_get  s    zProcess.nice_getc                 C   s   t | j|S r   )r{   setpriorityrh   )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 r   r   r   Zpuids)r   real	effectivesaved_r3   r3   r4   uids  s    zProcess.uidsc                 C   s"   |   \}}}}}}t|||S r   r   )r   r   r   r   r   r3   r3   r4   gids  s    zProcess.gidsc                 C   s   t | j| j}tj| S r   )r2   Zproc_cpu_timesrh   r   r   Z	pcputimes)r   rA   r3   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   rC   readlinkrh   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rqt|t|t| qt|S )Nz/usr/bin/procfilesz-nrw   c                 S   s   g | ]}| tjjqS r3   rJ   r9   r3   r3   r4   r<     s   z&Process.open_files.<locals>.<listcomp>zno such processz (\d+): S_IFREG.*\s*.*name:(.*)\nz//r   zcannot be retrieved)rN   rO   r   rh   rP   rQ   r   lowerr   r   r|   findallrT   
startswithr_   r   Z	popenfiler~   )r   rX   rH   rI   Z	procfilesra   rq   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)rh   rV   rC   r   r   r   r3   r3   r4   num_fds  s    
zProcess.num_fdsc                 C   s   t jt| j S r   )r   Zpctxswr2   Zproc_num_ctx_switchesrh   r   r3   r3   r4   num_ctx_switches  s    
zProcess.num_ctx_switchesNc                 C   s   t | j|| jS r   )r   Zwait_pidrh   r   )r   timeoutr3   r3   r4   wait  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 r   )	r2   r   rh   OSErrorr   r   r   r   Zpio)r   rcZwcrbwbr3   r3   r4   io_counters!  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   r   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   M  sv   















	



r   )F)re   )er   r   r   rC   r|   rN   rL   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_NONErk   dictr   r'   Zpfullmemr(   r+   r5   r7   rA   r=   rF   rY   rZ   Zdisk_io_countersr^   r]   rz   r   rj   r   r   r   r   r   r   objectr   r3   r3   r3   r4   <module>   s   


     	            	

(