B
    *‹d“?  ã               @   sÀ  d 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 g 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&e
j'ej(e
j)ej*e
j+ej,e
j-ej.e
j/ej0e
j1ej2e
j3ej4iZ5e
j6ej7e
j8ej9e
j:ej;e
j<ej=e
j>ej?iZ@eAddddddddddddZBeAdddddddddZCedd d!d"d#gƒZDed$d%d&d'd(d)d*d+d,gƒZEed-d.d/d0d1gƒZFed2eFjGd3 ƒZHd4d5„ ZId6d7„ ZJd8d9„ ZKd:d;„ ZLd<d=„ ZMd>d?„ ZNd@dA„ ZOdBdC„ ZPejQZQe
jRZRdZdEdF„ZSdGdH„ ZTe
jUZUejVZVd[dJdK„ZWdLdM„ ZXdNdO„ ZYdPdQ„ ZZdRdS„ Z[ej\Z\dTdU„ Z]dVdW„ Z^G dXdY„ dYe_ƒZ`dS )\zmacOS platform implementation.é    N)Ú
namedtupleé   )Ú_common)Ú_psposix)Ú_psutil_osx)Ú_psutil_posix)ÚAccessDenied)ÚNoSuchProcess)ÚZombieProcess)Ú	conn_tmap)Úconn_to_ntuple)Úisfile_strict)Úmemoize_when_activated)Úparse_environ_block)Úusage_percent)ÚPermissionError)ÚProcessLookupErroré   é   é   é   é   é   é   é	   é
   )ÚppidÚruidÚeuidÚsuidÚrgidÚegidÚsgidÚttynrÚctimeÚstatusÚname)ÚcpuutimeÚcpustimeÚrssÚvmsÚpfaultsÚpageinsÚ
numthreadsÚvolctxswÚ	scputimesÚuserÚniceÚsystemÚidleÚsvmemÚtotalÚ	availableÚpercentÚusedÚfreeÚactiveÚinactiveÚwiredÚpmemr)   r*   r+   r,   Úpfullmem)Úussc        	   	   C   sT   t  ¡ \} }}}}}|| }|| }||8 }t| | | dd}t| |||||||ƒS )z&System virtual memory as a namedtuple.r   )Úround_)ÚcextZvirtual_memr   r4   )	r5   r:   r;   r<   r9   ZspeculativeZavailr8   r7   © rB   úZ/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/psutil/_psosx.pyÚvirtual_memoryo   s    rD   c              C   s4   t  ¡ \} }}}}t|| dd}t | |||||¡S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   )r@   )rA   Zswap_memr   r   Zsswap)r5   r8   r9   ÚsinZsoutr7   rB   rB   rC   Úswap_memory€   s    rF   c              C   s   t  ¡ \} }}}t| |||ƒS )z(Return system CPU times as a namedtuple.)rA   Ú	cpu_timesr/   )r0   r1   r2   r3   rB   rB   rC   rG   Œ   s    rG   c              C   s>   g } x4t  ¡ D ](}|\}}}}t||||ƒ}|  |¡ qW | S )z(Return system CPU times as a named tuple)rA   Úper_cpu_timesr/   Úappend)ÚretZcpu_tr0   r1   r2   r3   ÚitemrB   rB   rC   rH   ’   s    rH   c               C   s   t  ¡ S )z0Return the number of logical CPUs in the system.)rA   Úcpu_count_logicalrB   rB   rB   rC   rL   œ   s    rL   c               C   s   t  ¡ S )z-Return the number of CPU cores in the system.)rA   Úcpu_count_coresrB   rB   rB   rC   rM   ¡   s    rM   c              C   s"   t  ¡ \} }}}}t | |||¡S )N)rA   Ú	cpu_statsr   Z	scpustats)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsZtrapsrB   rB   rC   rN   ¦   s    rN   c              C   s   t  ¡ \} }}t | ||¡gS )z¾Return CPU frequency.
    On macOS per-cpu frequency is not supported.
    Also, the returned frequency never changes, see:
    https://arstechnica.com/civis/viewtopic.php?f=19&t=465002
    )rA   Úcpu_freqr   Zscpufreq)ÚcurrZmin_Zmax_rB   rB   rC   rO   ­   s    rO   Fc          	   C   sz   g }t  ¡ }xh|D ]`}|\}}}}|dkr.d}| sLtj |¡rtj |¡sLqd }}	t ||||||	¡}
| |
¡ qW |S )z8Return mounted disk partitions as a list of namedtuples.ÚnoneÚ N)	rA   Údisk_partitionsÚosÚpathÚisabsÚexistsr   Z	sdiskpartrI   )ÚallÚretlistZ
partitionsÚ	partitionZdeviceZ
mountpointZfstypeÚoptsZmaxfileZmaxpathÚntuplerB   rB   rC   rS   À   s    
rS   c              C   sb   yt  ¡ \} }}W n tk
r&   dS X |dk}|r<tj}n|dkrLtj}n|d }t | ||¡S )zReturn battery information.Nr   éÿÿÿÿé<   )rA   Úsensors_batteryÚNotImplementedErrorr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)r7   ZminsleftZpower_pluggedZsecsleftrB   rB   rC   r_   ×   s    r_   Úinetc          	   C   sr   g }xht ƒ D ]^}yt|ƒ | ¡}W n tk
r8   wY qX |rx*|D ]"}t|ƒ|g }| tj|Ž ¡ qDW qW |S )z System-wide network connections.)ÚpidsÚProcessÚconnectionsr	   ÚlistrI   r   Zsconn)ÚkindrJ   ÚpidZconsÚcrB   rB   rC   Únet_connectionsñ   s    
ri   c        
      C   s´   t ƒ  ¡ } i }x | D ]˜}y&t |¡}t |¡}t |¡\}}W n0 tk
rn } z|jtjkr^‚ W dd}~X Y qX t	t
dƒr„t
 |¡}d |¡}d|k}	t
 |	||||¡||< qW |S )z)Get NIC stats (isup, duplex, speed, mtu).NÚ	NicDuplexú,Úrunning)Únet_io_countersÚkeysÚ
cext_posixZ
net_if_mtuZnet_if_flagsZnet_if_duplex_speedÚOSErrorÚerrnoZENODEVÚhasattrr   rj   ÚjoinZ	snicstats)
ÚnamesrJ   r&   ZmtuÚflagsZduplexÚspeedÚerrZoutput_flagsZisuprB   rB   rC   Únet_if_stats  s"    






rx   c               C   s   t  ¡ S )z:The system boot time expressed in seconds since the epoch.)rA   Ú	boot_timerB   rB   rB   rC   ry     s    ry   c        	      C   s`   g } t  ¡ }xN|D ]F}|\}}}}}|dkr.q|s4qt ||p@d|pFd||¡}|  |¡ qW | S )z:Return currently connected users as a list of namedtuples.ú~N)rA   Úusersr   ZsuserrI   )	rY   ÚrawlistrK   r0   ÚttyÚhostnameZtstamprg   ÚntrB   rB   rC   r{   $  s    
r{   c              C   sd   t  ¡ } d| kr`ytdƒ ¡  |  dd¡ W n2 tk
r@   Y n  tk
r^   |  dd¡ Y nX | S )Nr   )rA   rb   rc   Úcreate_timeÚinsertr	   r   )ZlsrB   rB   rC   rb   8  s    rb   c             C   s6   yt  | ¡td  }|t jkS  tk
r0   dS X d S )Nr%   F)rA   Úproc_kinfo_oneshotÚkinfo_proc_mapÚSZOMBÚ	Exception)rg   ÚstrB   rB   rC   Ú	is_zombieK  s
    
r‡   c                s   t  ˆ ¡‡ fdd„ƒ}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c                sœ   yˆ | f|ž|ŽS  t k
rP   t| jƒr>t| j| j| jƒ‚nt| j| jƒ‚Y nH tk
rp   t| j| jƒ‚Y n( t	j
k
r–   t| j| j| jƒ‚Y nX d S )N)r   r‡   rg   r
   Ú_nameÚ_ppidr	   r   r   rA   ZZombieProcessError)ÚselfÚargsÚkwargs)ÚfunrB   rC   ÚwrapperW  s    
z wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)r   rŽ   rB   )r   rC   Úwrap_exceptionsS  s    r‘   c               @   sl  e Zd ZdZddddgZdd„ Zeedd	„ ƒƒZeed
d„ ƒƒZ	dd„ Z
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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@d1d2„ƒZed3d4„ ƒZedAd6d7„ƒZed8d9„ ƒZed:d;„ ƒZ ed<d=„ ƒZ!ed>d?„ ƒZ"d5S )Brc   z1Wrapper class around underlying C implementation.rg   rˆ   r‰   Ú_cachec             C   s   || _ d | _d | _d S )N)rg   rˆ   r‰   )rŠ   rg   rB   rB   rC   Ú__init__l  s    zProcess.__init__c             C   s$   t  | j¡}t|ƒttƒks t‚|S )N)rA   r‚   rg   Úlenrƒ   ÚAssertionError)rŠ   rJ   rB   rB   rC   Ú_get_kinfo_procq  s    zProcess._get_kinfo_procc             C   s$   t  | j¡}t|ƒttƒks t‚|S )N)rA   Zproc_pidtaskinfo_oneshotrg   r”   Úpidtaskinfo_mapr•   )rŠ   rJ   rB   rB   rC   Ú_get_pidtaskinfoy  s    zProcess._get_pidtaskinfoc             C   s   | j  | ¡ | j | ¡ d S )N)r–   Zcache_activater˜   )rŠ   rB   rB   rC   Úoneshot_enter  s    zProcess.oneshot_enterc             C   s   | j  | ¡ | j | ¡ d S )N)r–   Zcache_deactivater˜   )rŠ   rB   rB   rC   Úoneshot_exit…  s    zProcess.oneshot_exitc             C   s(   |   ¡ td  }|d k	r|S t | j¡S )Nr&   )r–   rƒ   rA   Z	proc_namerg   )rŠ   r&   rB   rB   rC   r&   ‰  s    zProcess.namec             C   s   t  | j¡S )N)rA   Zproc_exerg   )rŠ   rB   rB   rC   ÚexeŽ  s    zProcess.exec             C   s   t  | j¡S )N)rA   Zproc_cmdlinerg   )rŠ   rB   rB   rC   Úcmdline’  s    zProcess.cmdlinec             C   s   t t | j¡ƒS )N)r   rA   Zproc_environrg   )rŠ   rB   rB   rC   Úenviron–  s    zProcess.environc             C   s   |   ¡ td  | _| jS )Nr   )r–   rƒ   r‰   )rŠ   rB   rB   rC   r   š  s    zProcess.ppidc             C   s   t  | j¡S )N)rA   Zproc_cwdrg   )rŠ   rB   rB   rC   ÚcwdŸ  s    zProcess.cwdc             C   s.   |   ¡ }t |td  |td  |td  ¡S )Nr   r   r   )r–   r   Úpuidsrƒ   )rŠ   ÚrawtuplerB   rB   rC   Úuids£  s
    

zProcess.uidsc             C   s.   |   ¡ }t |td  |td  |td  ¡S )Nr    r!   r"   )r–   r   rŸ   rƒ   )rŠ   r    rB   rB   rC   Úgids«  s
    

zProcess.gidsc             C   s:   |   ¡ td  }t ¡ }y|| S  tk
r4   d S X d S )Nr#   )r–   rƒ   r   Zget_terminal_mapÚKeyError)rŠ   Ztty_nrZtmaprB   rB   rC   Úterminal³  s    zProcess.terminalc             C   s6   |   ¡ }t|td  |td  |td  |td  ƒS )Nr)   r*   r+   r,   )r˜   r=   r—   )rŠ   r    rB   rB   rC   Úmemory_info¼  s    


zProcess.memory_infoc             C   s"   |   ¡ }t | j¡}t||f Ž S )N)r¥   rA   Zproc_memory_ussrg   r>   )rŠ   Z	basic_memr?   rB   rB   rC   Úmemory_full_infoÆ  s    zProcess.memory_full_infoc             C   s(   |   ¡ }t |td  |td  dd¡S )Nr'   r(   g        )r˜   r   Z	pcputimesr—   )rŠ   r    rB   rB   rC   rG   Ì  s
    

zProcess.cpu_timesc             C   s   |   ¡ td  S )Nr$   )r–   rƒ   )rŠ   rB   rB   rC   r€   Õ  s    zProcess.create_timec             C   s   |   ¡ td  }t |d¡S )Nr.   r   )r˜   r—   r   Zpctxsw)rŠ   ZvolrB   rB   rC   Únum_ctx_switchesÙ  s    zProcess.num_ctx_switchesc             C   s   |   ¡ td  S )Nr-   )r˜   r—   )rŠ   rB   rB   rC   Únum_threadsá  s    zProcess.num_threadsc             C   sR   | j dkrg S g }t | j ¡}x.|D ]&\}}t|ƒr$t ||¡}| |¡ q$W |S )Nr   )rg   rA   Zproc_open_filesr   r   Z	popenfilerI   )rŠ   Úfilesr|   rU   Úfdr\   rB   rB   rC   Ú
open_fileså  s    
zProcess.open_filesra   c          	   C   sˆ   |t kr(td|d dd„ t D ƒ¡f ƒ‚t | \}}t | j||¡}g }x:|D ]2}|\}}}	}
}}t|||	|
||tƒ}| |¡ qNW |S )Nz+invalid %r kind argument; choose between %sz, c             S   s   g | ]}t |ƒ‘qS rB   )Úrepr)Ú.0ÚxrB   rB   rC   ú
<listcomp>õ  s    z'Process.connections.<locals>.<listcomp>)	r   Ú
ValueErrorrs   rA   Zproc_connectionsrg   r   ÚTCP_STATUSESrI   )rŠ   rf   ZfamiliesÚtypesr|   rJ   rK   rª   ÚfamÚtypeÚladdrÚraddrr%   r   rB   rB   rC   rd   ñ  s    
zProcess.connectionsc             C   s   | j dkrdS t | j ¡S )Nr   )rg   rA   Zproc_num_fds)rŠ   rB   rB   rC   Únum_fds   s    
zProcess.num_fdsNc             C   s   t  | j|| j¡S )N)r   Zwait_pidrg   rˆ   )rŠ   ÚtimeoutrB   rB   rC   Úwait  s    zProcess.waitc             C   s   t  | j¡S )N)ro   Úgetpriorityrg   )rŠ   rB   rB   rC   Únice_get
  s    zProcess.nice_getc             C   s   t  | j|¡S )N)ro   Úsetpriorityrg   )rŠ   ÚvaluerB   rB   rC   Únice_set  s    zProcess.nice_setc             C   s   |   ¡ td  }t |d¡S )Nr%   ú?)r–   rƒ   ÚPROC_STATUSESÚget)rŠ   ÚcoderB   rB   rC   r%     s    zProcess.statusc             C   s@   t  | j¡}g }x*|D ]"\}}}t |||¡}| |¡ qW |S )N)rA   Zproc_threadsrg   r   ZpthreadrI   )rŠ   r|   rY   Ú	thread_idÚutimeZstimer\   rB   rB   rC   Úthreads  s    zProcess.threads)ra   )N)#Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r“   r‘   r   r–   r˜   r™   rš   r&   r›   rœ   r   r   rž   r¡   r¢   r¤   r¥   r¦   rG   r€   r§   r¨   r«   rd   r·   r¹   r»   r¾   r%   rÅ   rB   rB   rB   rC   rc   g  sD   	
	rc   )F)ra   )arÉ   rq   r   rT   Úcollectionsr   rR   r   r   r   rA   r   ro   r   r	   r
   r   r   r   r   r   r   Z_compatr   r   Z__extra__all__ZgetpagesizeÚPAGESIZEZAF_LINKZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZTCPS_SYN_SENTZCONN_SYN_SENTZTCPS_SYN_RECEIVEDZ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_NONEr±   ZSIDLZSTATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDr„   ZSTATUS_ZOMBIErÀ   Údictrƒ   r—   r/   r4   r=   Ú_fieldsr>   rD   rF   rG   rH   rL   rM   rN   rO   Ú
disk_usageZdisk_io_countersrS   r_   rm   Znet_if_addrsri   rx   ry   r{   rb   Z
pid_existsr‡   r‘   Úobjectrc   rB   rB   rB   rC   Ú<module>   s²   



