U
    ˜Ëj)>  ã                   @   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 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j,e
j-ej.e
j/ej0iZ1e
j2ej3e
j4ej5e
j6ej7e
j8ej9e
j:ej;iZ<e=dddddddddddd�Z>e=ddddddddd�Z?dd„ Z@dd „ ZAe
jBZBe
jCZCd!d"„ ZDd#d$„ ZEd%d&„ ZFd'd(„ ZGd)d*„ ZHe
 I¡ �ròd+d,„ ZJejKZKe
jLZLdDd.d/„ZMd0d1„ ZNe
jOZOe
jPZPdEd3d4„ZQd5d6„ ZRd7d8„ ZSz
eSƒ ZTW n6 eUk
�rv ZV zed9eV›�ƒ dZTW 5 dZV[VX Y nX d:d;„ ZWd<d=„ ZXd>d?„ ZYejZZZd@dA„ Z[G dBdC„ dCƒZ\dS )FzmacOS platform implementation.é    Né   )Ú_common)Ú_ntuples)Ú_psposix)Ú_psutil_osx)ÚAccessDenied)ÚNoSuchProcess)ÚZombieProcess)Ú	conn_tmap)Úconn_to_ntuple)Údebug)Úisfile_strict)Úmemoize_when_activated)Úparse_environ_block)Úusage_percenté   é   é   é   é   é   é   é	   é
   )ÚppidÚruidÚeuidÚsuidÚrgidÚegidÚsgidÚttynrÚctimeÚstatusÚname)ÚcpuutimeÚcpustimeÚrssÚvmsÚpfaultsÚpageinsÚ
numthreadsÚvolctxswc            	   
   C   sV   t  ¡ \} }}}}}|| }|| }||8 }t| | | dd�}t | |||||||¡S )z&System virtual memory as a namedtuple.r   ©Zround_)ÚcextZvirtual_memr   ÚntpZsvmem)	ÚtotalÚactiveZinactiveZwiredÚfreeZspeculativeZavailÚusedÚpercent© r5   ú1/tmp/pip-unpacked-wheel-3no1_rt3/psutil/_psosx.pyÚvirtual_memory[   s           ÿr7   c                  C   s4   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)r0   r3   r2   ÚsinZsoutr4   r5   r5   r6   Úswap_memoryl   s    r9   c                  C   s    t  ¡ \} }}}t | |||¡S )z(Return system CPU times as a namedtuple.)r.   Ú	cpu_timesr/   Ú	scputimes)ÚuserÚniceÚsystemÚidler5   r5   r6   r:   }   s    r:   c                  C   s<   g } t  ¡ D ]*}|\}}}}t ||||¡}|  |¡ q| S )z)Return system CPU times as a named tuple.)r.   Úper_cpu_timesr/   r;   Úappend)ÚretZcpu_tr<   r=   r>   r?   Úitemr5   r5   r6   r@   ƒ   s    r@   c                   C   s   t  ¡ S )z0Return the number of logical CPUs in the system.)r.   Úcpu_count_logicalr5   r5   r5   r6   rD   �   s    rD   c                   C   s   t  ¡ S )z-Return the number of CPU cores in the system.)r.   Úcpu_count_coresr5   r5   r5   r6   rE   ’   s    rE   c                  C   s"   t  ¡ \} }}}}t | |||¡S ©N)r.   Ú	cpu_statsr/   Z	scpustats)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsZ_trapsr5   r5   r6   rG   —   s    ÿrG   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.
        )r.   Úcpu_freqr/   Zscpufreq)ÚcurrZmin_Zmax_r5   r5   r6   rH       s    rH   Fc           	      C   sj   g }t  ¡ }|D ]T}|\}}}}|dkr,d}| sJtj |¡rtj |¡sJqt ||||¡}| |¡ q|S )z8Return mounted disk partitions as a list of namedtuples.ÚnoneÚ )	r.   Údisk_partitionsÚosÚpathÚisabsÚexistsr/   Z	sdiskpartrA   )	ÚallÚretlistZ
partitionsÚ	partitionZdeviceZ
mountpointZfstypeÚoptsÚntupler5   r5   r6   rL   ³   s    rL   c                  C   sd   zt  ¡ \} }}W n tk
r(   Y dS X |dk}|r>tj}n|dkrNtj}n|d }t | ||¡S )zReturn battery information.Nr   éÿÿÿÿé<   )r.   Úsensors_batteryÚNotImplementedErrorr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNr/   Zsbattery)r4   ZminsleftZpower_pluggedZsecsleftr5   r5   r6   rX   È   s    rX   Úinetc              	   C   sl   g }t ƒ D ]\}zt|ƒ | ¡}W n tk
r8   Y q
Y q
X |r
|D ]"}t|ƒ|g }| tj|Ž ¡ qBq
|S )z System-wide network connections.)ÚpidsÚProcessÚnet_connectionsr   ÚlistrA   r/   Zsconn)ÚkindrB   ÚpidZconsÚcr5   r5   r6   r]   â   s    

r]   c            
      C   s°   t ƒ  ¡ } i }| D ]˜}z&t |¡}t |¡}t |¡\}}W n0 tk
rl } z|jtjkr\‚ W 5 d}~X Y qX t	t
dƒr‚t
 |¡}d |¡}d|k}	t |	||||¡||< q|S )z)Get NIC stats (isup, duplex, speed, mtu).NÚ	NicDuplexú,Zrunning)Únet_io_countersÚkeysr.   Z
net_if_mtuZnet_if_flagsZnet_if_duplex_speedÚOSErrorÚerrnoZENODEVÚhasattrr   rb   Újoinr/   Z	snicstats)
ÚnamesrB   r$   ZmtuÚflagsZduplexÚspeedÚerrZoutput_flagsZisupr5   r5   r6   Únet_if_statsô   s     





rn   c                   C   s   t  ¡ S )z:The system boot time expressed in seconds since the epoch.)r.   Ú	boot_timer5   r5   r5   r6   ro     s    ro   zignoring exception on import: c                 C   sN   t dkr| S t tƒ  }|dks*t|ƒdk r.| S tdƒ |dk rF| | S | | S )z!Account for system clock updates.r   r   z9system clock was updated; adjusting process create_time())ÚINIT_BOOT_TIMEro   Úabsr   )r"   Zdiffr5   r5   r6   Úadjust_proc_create_time  s    
rr   c            	      C   s\   g } t  ¡ }|D ]F}|\}}}}}|dkr,q|s2qt ||p>d|pDd||¡}|  |¡ q| S )z:Return currently connected users as a list of namedtuples.ú~N)r.   Úusersr/   ZsuserrA   )	rR   ÚrawlistrC   r<   ÚttyÚhostnameZtstampr`   Úntr5   r5   r6   rt   +  s    rt   c                  C   sd   t  ¡ } d| kr`ztdƒ ¡  |  dd¡ W n2 tk
r@   Y n  tk
r^   |  dd¡ Y nX | S ©Nr   )r.   r[   r\   Úcreate_timeÚinsertr   r   )Zlsr5   r5   r6   r[   ?  s    r[   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c              
      sÐ   | j | j| j  }}}zˆ | f|ž|ŽW S  tk
rn } z(t |¡rRt|||ƒ|‚t||ƒ|‚W 5 d }~X Y n^ tk
rš } zt	||ƒ|‚W 5 d }~X Y n2 tj
k
rÊ } zt|||ƒ|‚W 5 d }~X Y nX d S rF   )r`   Ú_ppidÚ_nameÚProcessLookupErrorr.   Zproc_is_zombier	   r   ÚPermissionErrorr   ZZombieProcessError)ÚselfÚargsÚkwargsr`   r   r$   rm   ©Úfunr5   r6   ÚwrapperW  s    
z wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)r„   r…   r5   rƒ   r6   Úwrap_exceptionsR  s    rˆ   c                   @   sn  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dAd)d*„ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZedBd2d3„ƒZed4d5„ ƒZedCd7d8„ƒZed9d:„ ƒZed;d<„ ƒZ ed=d>„ ƒZ!ed?d@„ ƒZ"d6S )Dr\   z1Wrapper class around underlying C implementation.Ú_cacher}   r|   r`   c                 C   s   || _ d | _d | _d S rF   )r`   r}   r|   )r€   r`   r5   r5   r6   Ú__init__m  s    zProcess.__init__c                 C   s$   t  | j¡}t|ƒttƒks t‚|S rF   )r.   Zproc_kinfo_oneshotr`   ÚlenÚkinfo_proc_mapÚAssertionError©r€   rB   r5   r5   r6   Ú_get_kinfo_procr  s    zProcess._get_kinfo_procc                 C   s$   t  | j¡}t|ƒttƒks t‚|S rF   )r.   Zproc_pidtaskinfo_oneshotr`   r‹   Úpidtaskinfo_mapr�   rŽ   r5   r5   r6   Ú_get_pidtaskinfoz  s    zProcess._get_pidtaskinfoc                 C   s   | j  | ¡ | j | ¡ d S rF   )r�   Zcache_activater‘   ©r€   r5   r5   r6   Úoneshot_enter‚  s    zProcess.oneshot_enterc                 C   s   | j  | ¡ | j | ¡ d S rF   )r�   Zcache_deactivater‘   r’   r5   r5   r6   Úoneshot_exit†  s    zProcess.oneshot_exitc                 C   s(   |   ¡ td  }|d k	r|S t | j¡S )Nr$   )r�   rŒ   r.   Z	proc_namer`   )r€   r$   r5   r5   r6   r$   Š  s    zProcess.namec                 C   s   t  | j¡S rF   )r.   Zproc_exer`   r’   r5   r5   r6   Úexe�  s    zProcess.exec                 C   s   t  | j¡S rF   )r.   Zproc_cmdliner`   r’   r5   r5   r6   Úcmdline“  s    zProcess.cmdlinec                 C   s   t t | j¡ƒS rF   )r   r.   Zproc_environr`   r’   r5   r5   r6   Úenviron—  s    zProcess.environc                 C   s   |   ¡ td  | _| jS )Nr   )r�   rŒ   r|   r’   r5   r5   r6   r   ›  s    zProcess.ppidc                 C   s   t  | j¡S rF   )r.   Zproc_cwdr`   r’   r5   r5   r6   Úcwd   s    zProcess.cwdc                 C   s.   |   ¡ }t |td  |td  |td  ¡S )Nr   r   r   ©r�   r/   ZpuidsrŒ   ©r€   Zrawtupler5   r5   r6   Úuids¤  s    


ýzProcess.uidsc                 C   s.   |   ¡ }t |td  |td  |td  ¡S )Nr   r   r    r™   rš   r5   r5   r6   Úgids­  s    


ýzProcess.gidsc                 C   s>   |   ¡ td  }t ¡ }z
|| W S  tk
r8   Y d S X d S )Nr!   )r�   rŒ   r   Zget_terminal_mapÚKeyError)r€   Ztty_nrZtmapr5   r5   r6   Úterminal¶  s    
zProcess.terminalc                 C   s8   |   ¡ }t |td  |td  |td  |td  ¡S )Nr'   r(   r)   r*   )r‘   r/   Zpmemr�   rš   r5   r5   r6   Úmemory_info¿  s    



üzProcess.memory_infoc                 C   s$   |   ¡ }t | j¡}tj||f Ž S rF   )rŸ   r.   Zproc_memory_ussr`   r/   Zpfullmem)r€   Z	basic_memZussr5   r5   r6   Ú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š   r5   r5   r6   r:   Ï  s    

ûzProcess.cpu_timesFc                 C   s    |   ¡ td  }|st|ƒ}|S )Nr"   )r�   rŒ   rr   )r€   Ú	monotonicr"   r5   r5   r6   rz   Ú  s    zProcess.create_timec                 C   s   |   ¡ td  }t |d¡S )Nr,   r   )r‘   r�   r/   Zpctxsw)r€   Zvolr5   r5   r6   Únum_ctx_switchesá  s    zProcess.num_ctx_switchesc                 C   s   |   ¡ td  S )Nr+   )r‘   r�   r’   r5   r5   r6   Únum_threadsé  s    zProcess.num_threadsc                 C   sN   | j dkrg S g }t | j ¡}|D ]&\}}t|ƒr"t ||¡}| |¡ q"|S ry   )r`   r.   Zproc_open_filesr   r/   Z	popenfilerA   )r€   Úfilesru   rN   ÚfdrU   r5   r5   r6   Ú
open_filesí  s    
zProcess.open_filesrZ   c              	   C   s\   t | \}}t | j||¡}g }|D ]2}|\}}}	}
}}t|||	|
||tƒ}| |¡ q$|S rF   )r
   r.   Zproc_net_connectionsr`   r   ÚTCP_STATUSESrA   )r€   r_   ZfamiliesÚtypesru   rB   rC   r¥   ZfamÚtypeÚladdrÚraddrr#   rx   r5   r5   r6   r]   ù  s           ÿzProcess.net_connectionsc                 C   s   | j dkrdS t | j ¡S ry   )r`   r.   Zproc_num_fdsr’   r5   r5   r6   Únum_fds  s    
zProcess.num_fdsNc                 C   s   t  | j|¡S rF   )r   Zwait_pidr`   )r€   Útimeoutr5   r5   r6   Úwait  s    zProcess.waitc                 C   s   t  | j¡S rF   )r.   Zproc_priority_getr`   r’   r5   r5   r6   Únice_get  s    zProcess.nice_getc                 C   s   t  | j|¡S rF   )r.   Zproc_priority_setr`   )r€   Úvaluer5   r5   r6   Únice_set  s    zProcess.nice_setc                 C   s   |   ¡ td  }t |d¡S )Nr#   ú?)r�   rŒ   ÚPROC_STATUSESÚget)r€   Úcoder5   r5   r6   r#     s    zProcess.statusc                 C   s<   t  | j¡}g }|D ]"\}}}t |||¡}| |¡ q|S rF   )r.   Zproc_threadsr`   r/   ZpthreadrA   )r€   ru   rR   Z	thread_idÚutimeZstimerU   r5   r5   r6   Úthreads  s    zProcess.threads)F)rZ   )N)#Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rŠ   rˆ   r   r�   r‘   r“   r”   r$   r•   r–   r—   r   r˜   r›   rœ   rž   rŸ   r    r:   rz   r¢   r£   r¦   r]   r¬   r®   r¯   r±   r#   r·   r5   r5   r5   r6   r\   h  sr   









	









r\   )F)rZ   )]r»   rg   r†   rM   rK   r   r   r/   r   r   r.   r   r   r	   r
   r   r   r   r   r   r   Z__extra__all__ZgetpagesizeZ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_STOPPEDZSZOMBZSTATUS_ZOMBIEr³   ÚdictrŒ   r�   r7   r9   Z	heap_infoZ	heap_trimr:   r@   rD   rE   rG   Zhas_cpu_freqrH   Ú
disk_usageZdisk_io_countersrL   rX   rd   Znet_if_addrsr]   rn   ro   rp   Ú	Exceptionrm   rr   rt   r[   Z
pid_existsrˆ   r\   r5   r5   r5   r6   Ú<module>   sÜ               ô     ûõø




