o
    ˆ¶¹a?  ã                   @   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g d ¢ƒZDed!g d"¢ƒZEed#g d$¢ƒZFed%eFjGd& ƒZHd'd(„ ZId)d*„ ZJd+d,„ ZKd-d.„ ZLd/d0„ ZMd1d2„ ZNd3d4„ ZOd5d6„ ZPejQZQe
jRZRdMd8d9„ZSd:d;„ ZTe
jUZUejVZVdNd=d>„ZWd?d@„ ZXdAdB„ ZYdCdD„ ZZdEdF„ Z[ej\Z\dGdH„ Z]dIdJ„ Z^G dKdL„ dLe_ƒZ`dS )Oz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Úpmem)r)   r*   r+   r,   Úpfullmem)Úussc            	   	   C   sT   t  ¡ \} }}}}}|| }|| }||8 }t| | | dd�}t| |||||||ƒS )z&System virtual memory as a namedtuple.r   ©Úround_)ÚcextÚvirtual_memr   r5   )	r6   r;   r<   r=   r:   ÚspeculativeÚavailr9   r8   © rG   ú//usr/lib/python3/dist-packages/psutil/_psosx.pyÚvirtual_memoryo   s   ÿrI   c                  C   s4   t  ¡ \} }}}}t|| dd�}t | |||||¡S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   rA   )rC   Úswap_memr   r   Ússwap)r6   r9   r:   ÚsinÚsoutr8   rG   rG   rH   Úswap_memory€   s   rN   c                  C   s   t  ¡ \} }}}t| |||ƒS )z(Return system CPU times as a namedtuple.)rC   Ú	cpu_timesr/   r0   rG   rG   rH   rO   Œ   s   rO   c                  C   s:   g } t  ¡ D ]}|\}}}}t||||ƒ}|  |¡ q| S )z(Return system CPU times as a named tuple)rC   Úper_cpu_timesr/   Úappend)ÚretÚcpu_tr1   r2   r3   r4   ÚitemrG   rG   rH   rP   ’   s   rP   c                   C   ó   t  ¡ S )z0Return the number of logical CPUs in the system.)rC   Úcpu_count_logicalrG   rG   rG   rH   rV   œ   ó   rV   c                   C   rU   )z-Return the number of CPU cores in the system.)rC   Úcpu_count_coresrG   rG   rG   rH   rX   ¡   rW   rX   c                  C   s"   t  ¡ \} }}}}t | |||¡S ©N)rC   Ú	cpu_statsr   Ú	scpustats)Úctx_switchesÚ
interruptsÚsoft_interruptsÚsyscallsÚtrapsrG   rG   rH   rZ   ¦   s
   ÿÿrZ   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
    )rC   Úcpu_freqr   Úscpufreq)ÚcurrÚmin_Úmax_rG   rG   rH   ra   ­   s   ra   Fc              	   C   sv   g }t  ¡ }|D ]0}|\}}}}|dkrd}| s%tj |¡r$tj |¡s%qd }}	t ||||||	¡}
| |
¡ q|S )z8Return mounted disk partitions as a list of namedtuples.ÚnoneÚ N)	rC   Údisk_partitionsÚosÚpathÚisabsÚexistsr   Ú	sdiskpartrQ   )ÚallÚretlistÚ
partitionsÚ	partitionÚdeviceÚ
mountpointÚfstypeÚoptsÚmaxfileÚmaxpathÚntuplerG   rG   rH   rh   À   s   ÿrh   c                  C   sb   z	t  ¡ \} }}W n
 ty   Y dS w |dk}|rtj}n|dkr&tj}n|d }t | ||¡S )zReturn battery information.Nr   éÿÿÿÿé<   )rC   Úsensors_batteryÚNotImplementedErrorr   ÚPOWER_TIME_UNLIMITEDÚPOWER_TIME_UNKNOWNÚsbattery)r8   ÚminsleftÚpower_pluggedÚsecsleftrG   rG   rH   r{   ×   s   þr{   Úinetc              	   C   sf   g }t ƒ D ]+}z	t|ƒ | ¡}W n	 ty   Y qw |r0|D ]}t|ƒ|g }| tj|Ž ¡ qq|S )z System-wide network connections.)ÚpidsÚProcessÚconnectionsr	   ÚlistrQ   r   Úsconn)ÚkindrR   ÚpidÚconsÚcrG   rG   rH   Únet_connectionsñ   s   
ÿ€r�   c                  C   sž   t ƒ  ¡ } i }| D ]C}zt |¡}t |¡}t |¡\}}W n ty7 } z|jtjkr-‚ W Y d}~q	d}~ww t	t
dƒrBt
 |¡}t
 ||||¡||< q	|S )z)Get NIC stats (isup, duplex, speed, mtu).NÚ	NicDuplex)Únet_io_countersÚkeysÚ
cext_posixÚ
net_if_mtuÚnet_if_is_runningÚnet_if_duplex_speedÚOSErrorÚerrnoÚENODEVÚhasattrr   rŽ   Ú	snicstats)ÚnamesrR   r&   ÚmtuÚisupÚduplexÚspeedÚerrrG   rG   rH   Únet_if_stats  s"   


ÿ€þ

r    c                   C   rU   )z:The system boot time expressed in seconds since the epoch.)rC   Ú	boot_timerG   rG   rG   rH   r¡     rW   r¡   c            	      C   s\   g } t  ¡ }|D ]#}|\}}}}}|dkrq|sqt ||pd|p"d||¡}|  |¡ q| S )z:Return currently connected users as a list of namedtuples.ú~N)rC   Úusersr   ÚsuserrQ   )	ro   ÚrawlistrT   r1   ÚttyÚhostnameÚtstamprŠ   ÚntrG   rG   rH   r£   !  s   r£   c                  C   sf   t  ¡ } d| vr1ztdƒ ¡  |  dd¡ W | S  ty!   Y | S  ty0   |  dd¡ Y | S w | S ©Nr   )rC   r„   r…   Úcreate_timeÚinsertr	   r   )ÚlsrG   rG   rH   r„   5  s   üþþr„   c                 C   s4   zt  | ¡td  }|t jkW S  ty   Y dS w )Nr%   F)rC   Úproc_kinfo_oneshotÚkinfo_proc_mapÚSZOMBÚ	Exception)rŠ   ÚstrG   rG   rH   Ú	is_zombieH  s   ÿr³   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c                    sŒ   zˆ | g|¢R i |¤ŽW S  t y(   t| jƒr!t| j| j| jƒ‚t| j| jƒ‚ ty5   t| j| jƒ‚ t	j
yE   t| j| j| jƒ‚w rY   )r   r³   rŠ   r
   Ú_nameÚ_ppidr	   r   r   rC   ÚZombieProcessError)ÚselfÚargsÚkwargs©ÚfunrG   rH   ÚwrapperT  s   
ÿz wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)r»   r¼   rG   rº   rH   Úwrap_exceptionsP  s   r¿   c                   @   sh  e Zd ZdZg d¢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=d.d/„ƒZed0d1„ ƒZed>d3d4„ƒZed5d6„ ƒZed7d8„ ƒZ ed9d:„ ƒZ!ed;d<„ ƒZ"d2S )?r…   z1Wrapper class around underlying C implementation.)rŠ   r´   rµ   Ú_cachec                 C   s   || _ d | _d | _d S rY   )rŠ   r´   rµ   )r·   rŠ   rG   rG   rH   Ú__init__i  s   
zProcess.__init__c                 C   ó$   t  | j¡}t|ƒttƒksJ ‚|S rY   )rC   r®   rŠ   Úlenr¯   ©r·   rR   rG   rG   rH   Ú_get_kinfo_procn  ó   zProcess._get_kinfo_procc                 C   rÂ   rY   )rC   Úproc_pidtaskinfo_oneshotrŠ   rÃ   Úpidtaskinfo_maprÄ   rG   rG   rH   Ú_get_pidtaskinfov  rÆ   zProcess._get_pidtaskinfoc                 C   ó   | j  | ¡ | j | ¡ d S rY   )rÅ   Úcache_activaterÉ   ©r·   rG   rG   rH   Úoneshot_enter~  ó   zProcess.oneshot_enterc                 C   rÊ   rY   )rÅ   Úcache_deactivaterÉ   rÌ   rG   rG   rH   Úoneshot_exit‚  rÎ   zProcess.oneshot_exitc                 C   s(   |   ¡ td  }|d ur|S t | j¡S )Nr&   )rÅ   r¯   rC   Ú	proc_namerŠ   )r·   r&   rG   rG   rH   r&   †  s   zProcess.namec                 C   ó   t  | j¡S rY   )rC   Úproc_exerŠ   rÌ   rG   rG   rH   Úexe‹  ó   zProcess.exec                 C   rÒ   rY   )rC   Úproc_cmdlinerŠ   rÌ   rG   rG   rH   Úcmdline�  rÕ   zProcess.cmdlinec                 C   s   t t | j¡ƒS rY   )r   rC   Úproc_environrŠ   rÌ   rG   rG   rH   Úenviron“  ó   zProcess.environc                 C   s   |   ¡ td  | _| jS )Nr   )rÅ   r¯   rµ   rÌ   rG   rG   rH   r   —  s   zProcess.ppidc                 C   rÒ   rY   )rC   Úproc_cwdrŠ   rÌ   rG   rG   rH   Úcwdœ  rÕ   zProcess.cwdc                 C   ó.   |   ¡ }t |td  |td  |td  ¡S )Nr   r   r   ©rÅ   r   Úpuidsr¯   ©r·   ÚrawtuplerG   rG   rH   Úuids   ó   


ýzProcess.uidsc                 C   rÝ   )Nr    r!   r"   rÞ   rà   rG   rG   rH   Úgids¨  rã   zProcess.gidsc                 C   s8   |   ¡ td  }t ¡ }z|| W S  ty   Y d S w )Nr#   )rÅ   r¯   r   Úget_terminal_mapÚKeyError)r·   Útty_nrÚtmaprG   rG   rH   Ú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à   rG   rG   rH   Úmemory_info¹  s   



üzProcess.memory_infoc                 C   s"   |   ¡ }t | j¡}t||f Ž S rY   )rê   rC   Úproc_memory_ussrŠ   r?   )r·   Ú	basic_memr@   rG   rG   rH   Úmemory_full_infoÃ  s   zProcess.memory_full_infoc                 C   s(   |   ¡ }t |td  |td  dd¡S )Nr'   r(   g        )rÉ   r   Ú	pcputimesrÈ   rà   rG   rG   rH   rO   É  s   

üzProcess.cpu_timesc                 C   ó   |   ¡ td  S )Nr$   )rÅ   r¯   rÌ   rG   rG   rH   r«   Ò  rÚ   zProcess.create_timec                 C   ó   |   ¡ td  }t |d¡S )Nr.   r   )rÉ   rÈ   r   Úpctxsw)r·   ÚvolrG   rG   rH   Únum_ctx_switchesÖ  s   zProcess.num_ctx_switchesc                 C   rï   )Nr-   )rÉ   rÈ   rÌ   rG   rG   rH   Únum_threadsÞ  rÚ   zProcess.num_threadsc                 C   sN   | j dkrg S g }t | j ¡}|D ]\}}t|ƒr$t ||¡}| |¡ q|S rª   )rŠ   rC   Úproc_open_filesr   r   Ú	popenfilerQ   )r·   Úfilesr¥   rj   Úfdrx   rG   rG   rH   Ú
open_filesâ  s   

€zProcess.open_filesrƒ   c              	   C   s„   |t vrtd|d dd„ t D ƒ¡f ƒ‚t | \}}t | j||¡}g }|D ]}|\}}}	}
}}t|||	|
||tƒ}| |¡ q&|S )Nz+invalid %r kind argument; choose between %sz, c                 S   s   g | ]}t |ƒ‘qS rG   )Úrepr)Ú.0ÚxrG   rG   rH   Ú
<listcomp>ò  s    z'Process.connections.<locals>.<listcomp>)	r   Ú
ValueErrorÚjoinrC   Úproc_connectionsrŠ   r   ÚTCP_STATUSESrQ   )r·   r‰   ÚfamiliesÚtypesr¥   rR   rT   rø   ÚfamÚtypeÚladdrÚraddrr%   r©   rG   rG   rH   r†   î  s   ÿÿzProcess.connectionsc                 C   s   | j dkrdS t | j ¡S rª   )rŠ   rC   Úproc_num_fdsrÌ   rG   rG   rH   Únum_fdsý  s   
zProcess.num_fdsNc                 C   s   t  | j|| j¡S rY   )r   Úwait_pidrŠ   r´   )r·   ÚtimeoutrG   rG   rH   Úwait  s   zProcess.waitc                 C   rÒ   rY   )r‘   ÚgetpriorityrŠ   rÌ   rG   rG   rH   Únice_get  rÕ   zProcess.nice_getc                 C   s   t  | j|¡S rY   )r‘   ÚsetpriorityrŠ   )r·   ÚvaluerG   rG   rH   Únice_set  s   zProcess.nice_setc                 C   rð   )Nr%   ú?)rÅ   r¯   ÚPROC_STATUSESÚget)r·   ÚcoderG   rG   rH   r%     s   zProcess.statusc                 C   s<   t  | j¡}g }|D ]\}}}t |||¡}| |¡ q
|S rY   )rC   Úproc_threadsrŠ   r   ÚpthreadrQ   )r·   r¥   ro   Ú	thread_idÚutimeÚstimerx   rG   rG   rH   Úthreads  s   zProcess.threads©rƒ   rY   )#Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rÁ   r¿   r   rÅ   rÉ   rÍ   rÐ   r&   rÔ   r×   rÙ   r   rÜ   râ   rä   ré   rê   rí   rO   r«   ró   rô   rù   r†   r	  r  r  r  r%   r  rG   rG   rG   rH   r…   d  st    









	









r…   )Fr  )ar   r–   r½   ri   Úcollectionsr   rg   r   r   r   rC   r   r‘   r   r	   r
   r   r   r   r   r   r   Ú_compatr   r   Ú__extra__all__ÚgetpagesizeÚPAGESIZEÚAF_LINKÚTCPS_ESTABLISHEDÚCONN_ESTABLISHEDÚTCPS_SYN_SENTÚCONN_SYN_SENTÚTCPS_SYN_RECEIVEDÚCONN_SYN_RECVÚTCPS_FIN_WAIT_1ÚCONN_FIN_WAIT1ÚTCPS_FIN_WAIT_2ÚCONN_FIN_WAIT2ÚTCPS_TIME_WAITÚCONN_TIME_WAITÚTCPS_CLOSEDÚ
CONN_CLOSEÚTCPS_CLOSE_WAITÚCONN_CLOSE_WAITÚTCPS_LAST_ACKÚCONN_LAST_ACKÚTCPS_LISTENÚCONN_LISTENÚTCPS_CLOSINGÚCONN_CLOSINGÚPSUTIL_CONN_NONEÚ	CONN_NONEr  ÚSIDLÚSTATUS_IDLEÚSRUNÚSTATUS_RUNNINGÚSSLEEPÚSTATUS_SLEEPINGÚSSTOPÚSTATUS_STOPPEDr°   ÚSTATUS_ZOMBIEr  Údictr¯   rÈ   r/   r5   r>   Ú_fieldsr?   rI   rN   rO   rP   rV   rX   rZ   ra   Ú
disk_usageÚdisk_io_countersrh   r{   r�   Únet_if_addrsr�   r    r¡   r£   r„   Ú
pid_existsr³   r¿   Úobjectr…   rG   rG   rG   rH   Ú<module>   s¼   ôûõøÿ


