U
    (c?                     @   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   Zround_)cextZvirtual_memr   r4   )	r5   r:   r;   r<   r9   ZspeculativeZavailr8   r7    rB   1/tmp/pip-unpacked-wheel-l83rk7k5/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 } t  D ](}|\}}}}t||||}| | q| 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   rO      s       rO   c                  C   s   t  \} }}t| ||gS )zReturn 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   rP      s    rP   Fc              	   C   sv   g }t  }|D ]`}|\}}}}|dkr,d}| sJtj|rtj|sJqd }}	t||||||	}
||
 q|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   rT      s      rT   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   <   )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   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connectionsr	   listrI   r   Zsconn)kindrJ   pidZconscrB   rB   rC   net_connections   s    

rj   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rt
|}d|}d|k}	t
|	||||||< q|S )z)Get NIC stats (isup, duplex, speed, mtu).N	NicDuplex,Zrunning)net_io_counterskeys
cext_posixZ
net_if_mtuZnet_if_flagsZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrr   rk   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  }|D ]F}|\}}}}}|dkr,q|s2qt||p>d|pDd||}| | q| S )z:Return currently connected users as a list of namedtuples.~N)rA   usersr   ZsuserrI   )	rZ   rawlistrK   r0   ttyhostnameZtstamprh   ntrB   rB   rC   r{   $  s    r{   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   )rA   rc   rd   create_timeinsertr	   r   )ZlsrB   rB   rC   rc   8  s    rc   c                 C   s:   zt | td  }|t jkW S  tk
r4   Y dS X d S )Nr%   F)rA   proc_kinfo_oneshotkinfo_proc_mapSZOMB	Exception)rh   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   z | f||W S  t k
rR   t| jr@t| j| j| jnt| j| jY nH tk
rr   t| j| jY n( t	j
k
r   t| j| j| jY nX d S rN   )r   r   rh   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 )Brd   z1Wrapper class around underlying C implementation.rh   r   r   _cachec                 C   s   || _ d | _d | _d S rN   )rh   r   r   )r   rh   rB   rB   rC   __init__l  s    zProcess.__init__c                 C   s$   t | j}t|ttks t|S rN   )rA   r   rh   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 rN   )rA   Zproc_pidtaskinfo_oneshotrh   r   pidtaskinfo_mapr   r   rB   rB   rC   _get_pidtaskinfoy  s    zProcess._get_pidtaskinfoc                 C   s   | j |  | j|  d S rN   )r   Zcache_activater   r   rB   rB   rC   oneshot_enter  s    zProcess.oneshot_enterc                 C   s   | j |  | j|  d S rN   )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_namerh   )r   r&   rB   rB   rC   r&     s    zProcess.namec                 C   s   t | jS rN   )rA   Zproc_exerh   r   rB   rB   rC   exe  s    zProcess.exec                 C   s   t | jS rN   )rA   Zproc_cmdlinerh   r   rB   rB   rC   cmdline  s    zProcess.cmdlinec                 C   s   t t| jS rN   )r   rA   Zproc_environrh   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 rN   )rA   Zproc_cwdrh   r   rB   rB   rC   cwd  s    zProcess.cwdc                 C   s.   |   }t|td  |td  |td  S )Nr   r   r   r   r   Zpuidsr   r   ZrawtuplerB   rB   rC   uids  s    


zProcess.uidsc                 C   s.   |   }t|td  |td  |td  S )Nr    r!   r"   r   r   rB   rB   rC   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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   rB   rB   rC   memory_info  s    



zProcess.memory_infoc                 C   s"   |   }t| j}t||f  S rN   )r   rA   Zproc_memory_ussrh   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   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   sN   | j dkrg S g }t| j }|D ]&\}}t|r"t||}|| q"|S r   )rh   rA   Zproc_open_filesr   r   Z	popenfilerI   )r   filesr|   rV   fdr]   rB   rB   rC   
open_files  s    
zProcess.open_filesrb   c              	   C   s   |t kr(td|ddd t D f t | \}}t| j||}g }|D ]2}|\}}}	}
}}t|||	|
||t}|| qL|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_connectionsrh   r   TCP_STATUSESrI   )r   rg   Zfamiliestypesr|   rJ   rK   r   Zfamtypeladdrraddrr%   r   rB   rB   rC   re     s    zProcess.connectionsc                 C   s   | j dkrdS t| j S r   )rh   rA   Zproc_num_fdsr   rB   rB   rC   num_fds   s    
zProcess.num_fdsNc                 C   s   t | j|| jS rN   )r   Zwait_pidrh   r   )r   timeoutrB   rB   rC   wait  s    zProcess.waitc                 C   s   t | jS rN   )ro   getpriorityrh   r   rB   rB   rC   nice_get
  s    zProcess.nice_getc                 C   s   t | j|S rN   )ro   setpriorityrh   )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 }|D ]"\}}}t|||}|| q|S rN   )rA   Zproc_threadsrh   r   ZpthreadrI   )r   r|   rZ   Z	thread_idutimeZstimer]   rB   rB   rC   threads  s    zProcess.threads)rb   )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   re   r   r   r   r   r%   r   rB   rB   rB   rC   rd   g  sr   









	









rd   )F)rb   )ar   rq   r   rU   collectionsr   rS   r   r   r   rA   r   ro   r   r	   r
   r   r   r   r   r   r   _compatr   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_STOPPEDr   ZSTATUS_ZOMBIEr   dictr   r   r/   r4   r=   _fieldsr>   rD   rF   rG   rH   rL   rM   rO   rP   
disk_usageZdisk_io_countersrT   r`   rm   Znet_if_addrsrj   rx   ry   r{   rc   Z
pid_existsr   r   objectrd   rB   rB   rB   rC   <module>   s                     
  


