a
    QIh>                     @   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
j0ej1iZ2e
j3ej4e
j5ej6e
j7ej8e
j9ej:e
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@edg dZAedg d ZBed!g d"ZCed#eCjDd$ ZEd%d& ZFd'd( ZGd)d* ZHd+d, ZId-d. ZJd/d0 ZKd1d2 ZLd3d4 ZMejNZNe
jOZOdKd6d7ZPd8d9 ZQe
jRZRejSZSdLd;d<ZTd=d> ZUd?d@ ZVdAdB ZWdCdD ZXejYZYdEdF ZZdGdH Z[G dIdJ dJZ\dS )Mz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                     	   
   )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   Zround_)cextZvirtual_memr   r3   )	r4   r9   r:   r;   r8   ZspeculativeZavailr7   r6    rA   G/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/psutil/_psosx.pyvirtual_memoryo   s    rC   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)r4   r7   r8   sinZsoutr6   rA   rA   rB   swap_memory~   s    rE   c                  C   s   t  \} }}}t| |||S )z(Return system CPU times as a namedtuple.)r@   	cpu_timesr-   r.   rA   rA   rB   rF      s    rF   c                  C   s:   g } t  D ](}|\}}}}t||||}| | q| S )z)Return system CPU times as a named tuple.)r@   per_cpu_timesr-   append)retZcpu_tr/   r0   r1   r2   itemrA   rA   rB   rG      s    rG   c                   C   s   t  S )z0Return the number of logical CPUs in the system.)r@   cpu_count_logicalrA   rA   rA   rB   rK      s    rK   c                   C   s   t  S )z-Return the number of CPU cores in the system.)r@   cpu_count_coresrA   rA   rA   rB   rL      s    rL   c                  C   s"   t  \} }}}}t| |||S N)r@   	cpu_statsr   Z	scpustats)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsZ_trapsrA   rA   rB   rN      s
    rN   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.
    )r@   cpu_freqr   Zscpufreq)currZmin_Zmax_rA   rA   rB   rO      s    rO   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	sdiskpartrH   )	allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeoptsntuplerA   rA   rB   rS      s    rS   c                  C   sb   zt  \} }}W n ty&   Y dS 0 |dk}|r<tj}n|dkrLtj}n|d }t| ||S )zReturn battery information.Nr   <   )r@   sensors_batteryNotImplementedErrorr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)r6   ZminsleftZpower_pluggedZsecsleftrA   rA   rB   r_      s    r_   inetc              	   C   sj   g }t  D ]Z}zt|| }W n ty6   Y q
Y q
0 |r
|D ]"}t||g }|tj|  q@q
|S )z System-wide network connections.)pidsProcessnet_connectionsr	   listrH   r   Zsconn)kindrI   pidZconscrA   rA   rB   rd      s    

rd   c            
      C   s   t   } i }| D ]}z&t|}t|}t|\}}W n2 tyn } z|jtjkrZ W Y d}~qd}~0 0 t	t
drt
|}d|}d|v }	t
|	||||||< q|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   ri   joinZ	snicstats)
namesrI   r$   ZmtuflagsZduplexspeederrZoutput_flagsZisuprA   rA   rB   net_if_stats  s$    







rw   c                   C   s   t  S )z:The system boot time expressed in seconds since the epoch.)r@   	boot_timerA   rA   rA   rB   rx     s    rx   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suserrH   )	rY   rawlistrJ   r/   ttyhostnameZtstamprg   ntrA   rA   rB   rz   #  s    rz   c                  C   s`   t  } d| vr\ztd  | dd W n. ty>   Y n tyZ   | dd Y n0 | S Nr   )r@   rb   rc   create_timeinsertr	   r   )ZlsrA   rA   rB   rb   7  s    rb   c                 C   s8   zt | td  }|t jkW S  ty2   Y dS 0 d S )Nr#   F)r@   proc_kinfo_oneshotkinfo_proc_mapSZOMBro   )rg   strA   rA   rB   	is_zombieJ  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 | g|R i |W S  tyt } z.t|rTt||||t|||W Y d }~n8d }~0  ty } zt|||W Y d }~n
d }~0 0 d S rM   )	rg   _ppid_nameProcessLookupErrorr   r
   r	   PermissionErrorr   )selfargskwargsrg   r   r$   rv   funrA   rB   wrapperW  s     z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rA   r   rB   wrap_exceptionsR  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 )?rc   z1Wrapper class around underlying C implementation.)_cacher   r   rg   c                 C   s   || _ d | _d | _d S rM   )rg   r   r   )r   rg   rA   rA   rB   __init__k  s    zProcess.__init__c                 C   s$   t | j}t|ttks J |S rM   )r@   r   rg   lenr   r   rI   rA   rA   rB   _get_kinfo_procp  s    zProcess._get_kinfo_procc                 C   s$   t | j}t|ttks J |S rM   )r@   Zproc_pidtaskinfo_oneshotrg   r   pidtaskinfo_mapr   rA   rA   rB   _get_pidtaskinfox  s    zProcess._get_pidtaskinfoc                 C   s   | j |  | j|  d S rM   )r   Zcache_activater   r   rA   rA   rB   oneshot_enter  s    zProcess.oneshot_enterc                 C   s   | j |  | j|  d S rM   )r   Zcache_deactivater   r   rA   rA   rB   oneshot_exit  s    zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )Nr$   )r   r   r@   Z	proc_namerg   )r   r$   rA   rA   rB   r$     s    zProcess.namec                 C   s   t | jS rM   )r@   Zproc_exerg   r   rA   rA   rB   exe  s    zProcess.exec                 C   s   t | jS rM   )r@   Zproc_cmdlinerg   r   rA   rA   rB   cmdline  s    zProcess.cmdlinec                 C   s   t t| jS rM   )r   r@   Zproc_environrg   r   rA   rA   rB   environ  s    zProcess.environc                 C   s   |   td  | _| jS )Nr   )r   r   r   r   rA   rA   rB   r     s    zProcess.ppidc                 C   s   t | jS rM   )r@   Zproc_cwdrg   r   rA   rA   rB   cwd  s    zProcess.cwdc                 C   s.   |   }t|td  |td  |td  S )Nr   r   r   r   r   Zpuidsr   r   ZrawtuplerA   rA   rB   uids  s    


zProcess.uidsc                 C   s.   |   }t|td  |td  |td  S )Nr   r   r    r   r   rA   rA   rB   gids  s    


zProcess.gidsc                 C   s<   |   td  }t }z
|| W S  ty6   Y d S 0 d S )Nr!   )r   r   r   Zget_terminal_mapKeyError)r   Ztty_nrZtmaprA   rA   rB   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   rA   rA   rB   memory_info  s    



zProcess.memory_infoc                 C   s"   |   }t| j}t||f  S rM   )r   r@   Zproc_memory_ussrg   r=   )r   Z	basic_memr>   rA   rA   rB   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   rA   rA   rB   rF     s    

zProcess.cpu_timesc                 C   s   |   td  S )Nr"   )r   r   r   rA   rA   rB   r     s    zProcess.create_timec                 C   s   |   td  }t|dS )Nr,   r   )r   r   r   Zpctxsw)r   ZvolrA   rA   rB   num_ctx_switches  s    zProcess.num_ctx_switchesc                 C   s   |   td  S )Nr+   )r   r   r   rA   rA   rB   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   )rg   r@   Zproc_open_filesr   r   Z	popenfilerH   )r   filesr{   rU   fdr\   rA   rA   rB   
open_files  s    
zProcess.open_filesra   c              	   C   s\   t | \}}t| j||}g }|D ]2}|\}}}	}
}}t|||	|
||t}|| q$|S rM   )r   r@   Zproc_net_connectionsrg   r   TCP_STATUSESrH   )r   rf   Zfamiliestypesr{   rI   rJ   r   famtypeladdrraddrr#   r~   rA   rA   rB   rd     s    zProcess.net_connectionsc                 C   s   | j dkrdS t| j S r   )rg   r@   Zproc_num_fdsr   rA   rA   rB   num_fds  s    
zProcess.num_fdsNc                 C   s   t | j|| jS rM   )r   Zwait_pidrg   r   )r   timeoutrA   rA   rB   wait  s    zProcess.waitc                 C   s   t | jS rM   )rn   getpriorityrg   r   rA   rA   rB   nice_get  s    zProcess.nice_getc                 C   s   t | j|S rM   )rn   setpriorityrg   )r   valuerA   rA   rB   nice_set  s    zProcess.nice_setc                 C   s   |   td  }t|dS )Nr#   ?)r   r   PROC_STATUSESget)r   coderA   rA   rB   r#     s    zProcess.statusc                 C   s<   t | j}g }|D ]"\}}}t|||}|| q|S rM   )r@   Zproc_threadsrg   r   ZpthreadrH   )r   r{   rY   	thread_idutimeZstimer\   rA   rA   rB   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   rF   r   r   r   r   rd   r   r   r   r   r#   r   rA   rA   rA   rB   rc   f  sr   









	










rc   )F)ra   )]r   rp   r   rT   collectionsr   rR   r   r   r   r@   r   rn   r   r	   r
   r   r   r   r   r   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-   r3   r<   _fieldsr=   rC   rE   rF   rG   rK   rL   rN   rO   
disk_usageZdisk_io_countersrS   r_   rl   Znet_if_addrsrd   rw   rx   rz   rb   Z
pid_existsr   r   rc   rA   rA   rA   rB   <module>   s   	
	

