U
    !ºÖhQG  ã                   @   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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j0e
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
jCiZDeEdddddddddZFeddd gƒZGeGZHed!d"d#d$d%gƒZIed&d'd(d)d*d+gƒZJd,d-„ ZKd.d/„ ZLd0d1„ ZMd2d3„ ZNd4d5„ ZOd6d7„ ZPd8d9„ ZQejRZRejSZSdNd;d<„ZTejUZUerZejVZVdOd>d?„ZWd@dA„ ZXdBdC„ ZYdDdE„ ZZdFdG„ Z[dHdI„ Z\dJdK„ Z]G dLdM„ dMƒZ^dS )Pz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_percentZ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ÚtotalZ	availableÚpercentÚusedÚfreec                  C   s4   t  ¡ \} }}}}t| | | dd}t| ||||ƒS )Nr   ©Zround_)ÚcextZvirtual_memr   r'   )r(   Zavailr+   Z_pinnedZinuser)   © r.   ú3./venv/lib/python3.8/site-packages/psutil/_psaix.pyÚvirtual_memoryf   s    r0   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+   ZsinZsoutr*   r)   r.   r.   r/   Úswap_memoryl   s    r1   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 r.   )Úsum©Ú.0Úxr.   r.   r/   Ú
<listcomp>|   s     zcpu_times.<locals>.<listcomp>)r-   Úper_cpu_timesr$   Úzip©Úretr.   r.   r/   Ú	cpu_timesy   s    r;   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 r.   )r$   r3   r.   r.   r/   r6   ‚   s     z!per_cpu_times.<locals>.<listcomp>)r-   r7   r9   r.   r.   r/   r7      s    r7   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_logical…   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-CcZ	processor©ÚstdoutÚstderrc                 s   s   | ]}|  tjj¡V  qd S ©N©ÚdecodeÚsysrB   Úencodingr3   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ÚprB   rC   ÚmsgZ
processorsr.   r.   r/   Úcpu_count_coresŽ   s    

rV   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/   rW   š   s       ÿrW   Fc           	      C   s\   g }t  ¡ }|D ]F}|\}}}}|dkr,d}| s<t|ƒjs<qt ||||¡}| |¡ q|S )zReturn system disk partitions.ZnoneÚ )r-   Údisk_partitionsÚ
disk_usager(   r   Z	sdiskpartÚappend)	ÚallÚretlistZ
partitionsÚ	partitionZdeviceZ
mountpointZfstypeZoptsÚntupler.   r.   r/   rY   «   s    
rY   éÿÿÿÿ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_STATUSESr[   )ÚkindÚ_pidZfamiliesÚtypesÚrawlistr:   ÚitemÚfdZfamZtype_ZladdrZ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).)ZFullZHalfc                 S   s   h | ]}|d  ’qS )r   r.   r3   r.   r.   r/   Ú	<setcomp>é   s     znet_if_stats.<locals>.<setcomp>rX   r   z/usr/bin/entstatz-drA   c                 s   s   | ]}|  tjj¡V  qd S rD   rE   r3   r.   r.   r/   rI   ú   s    znet_if_stats.<locals>.<genexpr>z"Running: (\d+) Mbps.*?(\w+) DuplexNr   r   ú,Úrunning)r   r	   Únet_if_addrsÚ
cext_posixZ
net_if_mtuZnet_if_flagsrJ   rK   rL   rM   rN   ÚreÚsearchÚintÚgroupÚjoinÚgetr
   r   Z	snicstats)Z
duplex_mapÚnamesr:   ÚnameZmtuÚflagsZduplexZspeedrT   rB   rC   Z	re_resultZoutput_flagsZisupr.   r.   r/   Únet_if_statsæ   s<    


ýÿ

 ÿ

rz   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)rp   Úusersr   Zsuserr[   )r]   rh   r|   ri   r%   ZttyZhostnameZtstampZuser_processrb   rk   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.   )Úisdigitrs   r3   r.   r.   r/   r6   0  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Úexistsru   r   Ústrra   r.   r.   r/   Ú
pid_exists3  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 rD   )
rb   Ú_ppidÚ_nameÚFileNotFoundErrorÚProcessLookupErrorr„   r   r   ÚPermissionErrorr   )ÚselfÚargsÚkwargsrb   r   rx   Úerr©Úfunr.   r/   Úwrapper=  s    z wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)r   r   r.   rŽ   r/   Ú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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 rD   )rb   r†   r…   r   r–   )rŠ   rb   r.   r.   r/   Ú__init__T  s    zProcess.__init__c                 C   s   | j  | ¡ | j | ¡ d S rD   )Ú_proc_basic_infoZcache_activateÚ
_proc_cred©rŠ   r.   r.   r/   Úoneshot_enterZ  s    zProcess.oneshot_enterc                 C   s   | j  | ¡ | j | ¡ d S rD   )r˜   Zcache_deactivater™   rš   r.   r.   r/   Úoneshot_exit^  s    zProcess.oneshot_exitc                 C   s   t  | j| j¡S rD   )r-   Zproc_basic_inforb   r–   rš   r.   r.   r/   r˜   b  s    zProcess._proc_basic_infoc                 C   s   t  | j| j¡S rD   )r-   Z	proc_credrb   r–   rš   r.   r.   r/   r™   g  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/   rx   l  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 )NrX   r   ÚPATHú:)Úcmdliner=   r   ÚsepÚisabsÚabspathru   ÚcwdÚisfileÚaccessÚX_OKÚbasenameÚenvironÚsplit)rŠ   r¡   Úexer   Zpossible_exer.   r.   r/   r¬   s  s.    
ÿ
þý ÿ
zProcess.exec                 C   s   t  | j¡S rD   )r-   Z	proc_argsrb   rš   r.   r.   r/   r¡   ‘  s    zProcess.cmdlinec                 C   s   t  | j¡S rD   )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pthreadr[   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   r:   r.   r.   r/   rc   ´  s    zProcess.net_connectionsc                 C   s   t  | j¡S rD   )rp   Úgetpriorityrb   rš   r.   r.   r/   Únice_getÁ  s    zProcess.nice_getc                 C   s   t  | j|¡S rD   )rp   Úsetpriorityrb   )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 rD   ©r™   r   Zpuids)rŠ   ÚrealÚ	effectiveÚsavedÚ_r.   r.   r/   ÚuidsÎ  s    zProcess.uidsc                 C   s"   |   ¡ \}}}}}}t |||¡S rD   r¹   )rŠ   r½   rº   r»   r¼   r.   r.   r/   ÚgidsÓ  s    zProcess.gidsc                 C   s   t  | j| j¡}tj|Ž S rD   )r-   Zproc_cpu_timesrb   r–   r   Z	pcputimes)rŠ   Útr.   r.   r/   r;   Ø  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ttydevZ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/cwdrX   )r–   r=   Úreadlinkrb   rž   r‡   r°   )rŠ   Z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Š   r:   r   r   r.   r.   r/   Úmemory_infoò  s    zProcess.memory_infoc                 C   s   |   ¡ td  }t |d¡S )Nr!   ú?)r˜   r®   ÚPROC_STATUSESrv   )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-nrA   c                 s   s   | ]}|  tjj¡V  qd S rD   rE   r3   r.   r.   r/   rI   
  s    z%Process.open_files.<locals>.<genexpr>zno such processz(\d+): S_IFREG.*name:(.*)\nz//r   zcannot be retrieved)rJ   rK   rƒ   rb   rL   rM   Úlowerr   r†   rq   ÚfindallrP   Ú
startswithr[   r   Z	popenfilers   )rŠ   rT   rB   rC   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   rR   r=   r   r–   rš   r.   r.   r/   Únum_fds  s    
zProcess.num_fdsc                 C   s   t jt | j¡Ž S rD   )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|| j¡S rD   )r   Zwait_pidrb   r†   )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 rD   )	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™   rx   r¬   r¡   rª   r   r    ÚHAS_THREADSr²   rc   rµ   r¸   r   r¾   r¿   r;   rÄ   r¥   rÇ   Zmemory_full_infor!   rÎ   rÏ   rÐ   rÒ   ÚHAS_PROC_IO_COUNTERSr×   r.   r.   r.   r/   r”   O  sv   















	



r”   )F)r`   )_rÛ   r‘   rÂ   r=   rq   rJ   rG   Úcollectionsr   rX   r   r   r   r-   r   rp   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#   Zpfullmemr$   r'   r0   r1   r;   r7   r@   rV   rW   Zdisk_io_countersrZ   rY   ro   r   rc   rz   r{   r}   r€   r„   r“   r”   r.   r.   r.   r/   Ú<module>   sÄ   


     û	            ôø	

+