o
    h>                     @   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   round_)cextvirtual_memr   r3   )	r4   r9   r:   r;   r8   speculativeavailr7   r6    rE   A/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/_psosx.pyvirtual_memoryo   s   rG   c                  C   s4   t  \} }}}}t|| dd}t| |||||S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r?   )rA   swap_memr   r   sswap)r4   r7   r8   sinsoutr6   rE   rE   rF   swap_memory~   s   rL   c                  C   s   t  \} }}}t| |||S )z(Return system CPU times as a namedtuple.)rA   	cpu_timesr-   r.   rE   rE   rF   rM      s   rM   c                  C   s:   g } t  D ]}|\}}}}t||||}| | q| S )z)Return system CPU times as a named tuple.)rA   per_cpu_timesr-   append)retcpu_tr/   r0   r1   r2   itemrE   rE   rF   rN      s   rN   c                   C      t  S )z0Return the number of logical CPUs in the system.)rA   cpu_count_logicalrE   rE   rE   rF   rT         rT   c                   C   rS   )z-Return the number of CPU cores in the system.)rA   cpu_count_coresrE   rE   rE   rF   rV      rU   rV   c                  C   s"   t  \} }}}}t| |||S N)rA   	cpu_statsr   	scpustats)ctx_switches
interruptssoft_interruptssyscalls_trapsrE   rE   rF   rX      s
   rX   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   scpufreq)currmin_max_rE   rE   rF   r_      s   r_   Fc           	      C   sj   g }t  }|D ]*}|\}}}}|dkrd}| s%tj|r$tj|s%qt||||}|| q|S )z8Return mounted disk partitions as a list of namedtuples.none )	rA   disk_partitionsospathisabsexistsr   	sdiskpartrO   )	allretlist
partitions	partitiondevice
mountpointfstypeoptsntuplerE   rE   rF   rf      s   rf   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   <   )rA   sensors_batteryNotImplementedErrorr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)r6   minsleftpower_pluggedsecsleftrE   rE   rF   rw      s   rw   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net_connectionsr	   listrO   r   sconn)kindrP   pidconscrE   rE   rF   r      s   
r   c            
      C   s   t   } i }| D ]M}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
|}d|}d|v }	t
|	||||||< q	|S )z)Get NIC stats (isup, duplex, speed, mtu).N	NicDuplex,running)net_io_counterskeys
cext_posix
net_if_mtunet_if_flagsnet_if_duplex_speedOSErrorerrnoENODEVhasattrr   r   join	snicstats)
namesrP   r$   mtuflagsduplexspeederroutput_flagsisuprE   rE   rF   net_if_stats  s*   







r   c                   C   rS   )z:The system boot time expressed in seconds since the epoch.)rA   	boot_timerE   rE   rE   rF   r     rU   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)rA   usersr   suserrO   )	rm   rawlistrR   r/   ttyhostnametstampr   ntrE   rE   rF   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   )rA   r   r   create_timeinsertr	   r   )lsrE   rE   rF   r   7  s   r   c                 C   s4   zt | td  }|t jkW S  ty   Y dS w )Nr#   F)rA   proc_kinfo_oneshotkinfo_proc_mapSZOMBr   )r   strE   rE   rF   	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y4 } zt|r*t||||t|||d }~w tyE } zt|||d }~ww rW   )	r   _ppid_nameProcessLookupErrorr   r
   r	   PermissionErrorr   )selfargskwargsr   r   r$   r   funrE   rF   wrapperW  s   z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rE   r   rF   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 )?r   z1Wrapper class around underlying C implementation.)_cacher   r   r   c                 C   s   || _ d | _d | _d S rW   )r   r   r   )r   r   rE   rE   rF   __init__k  s   
zProcess.__init__c                 C   $   t | j}t|ttksJ |S rW   )rA   r   r   lenr   r   rP   rE   rE   rF   _get_kinfo_procp     zProcess._get_kinfo_procc                 C   r   rW   )rA   proc_pidtaskinfo_oneshotr   r   pidtaskinfo_mapr   rE   rE   rF   _get_pidtaskinfox  r   zProcess._get_pidtaskinfoc                 C      | j |  | j|  d S rW   )r   cache_activater   r   rE   rE   rF   oneshot_enter     zProcess.oneshot_enterc                 C   r   rW   )r   cache_deactivater   r   rE   rE   rF   oneshot_exit  r   zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )Nr$   )r   r   rA   	proc_namer   )r   r$   rE   rE   rF   r$     s   zProcess.namec                 C      t | jS rW   )rA   proc_exer   r   rE   rE   rF   exe     zProcess.exec                 C   r   rW   )rA   proc_cmdliner   r   rE   rE   rF   cmdline  r   zProcess.cmdlinec                 C   s   t t| jS rW   )r   rA   proc_environr   r   rE   rE   rF   environ     zProcess.environc                 C   s   |   td  | _| jS )Nr   )r   r   r   r   rE   rE   rF   r     s   zProcess.ppidc                 C   r   rW   )rA   proc_cwdr   r   rE   rE   rF   cwd  r   zProcess.cwdc                 C   .   |   }t|td  |td  |td  S )Nr   r   r   r   r   puidsr   r   rawtuplerE   rE   rF   uids     


zProcess.uidsc                 C   r   )Nr   r   r    r   r   rE   rE   rF   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tmaprE   rE   rF   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   rE   rE   rF   memory_info  s   



zProcess.memory_infoc                 C   s"   |   }t| j}t||f  S rW   )r   rA   proc_memory_ussr   r=   )r   	basic_memr>   rE   rE   rF   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   rE   rE   rF   rM     s   

zProcess.cpu_timesc                 C      |   td  S )Nr"   )r   r   r   rE   rE   rF   r     r   zProcess.create_timec                 C      |   td  }t|dS )Nr,   r   )r   r   r   pctxsw)r   volrE   rE   rF   num_ctx_switches  s   zProcess.num_ctx_switchesc                 C   r   )Nr+   )r   r   r   rE   rE   rF   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   rA   proc_open_filesr   r   	popenfilerO   )r   filesr   rh   fdrt   rE   rE   rF   
open_files  s   

zProcess.open_filesr   c              	   C   s\   t | \}}t| j||}g }|D ]}|\}}}	}
}}t|||	|
||t}|| q|S rW   )r   rA   proc_net_connectionsr   r   TCP_STATUSESrO   )r   r   familiestypesr   rP   rR   r   famtypeladdrraddrr#   r   rE   rE   rF   r     s   zProcess.net_connectionsc                 C   s   | j dkrdS t| j S r   )r   rA   proc_num_fdsr   rE   rE   rF   num_fds  s   
zProcess.num_fdsNc                 C   s   t | j|| jS rW   )r   wait_pidr   r   )r   timeoutrE   rE   rF   wait  s   zProcess.waitc                 C   r   rW   )r   getpriorityr   r   rE   rE   rF   nice_get  r   zProcess.nice_getc                 C   s   t | j|S rW   )r   setpriorityr   )r   valuerE   rE   rF   nice_set  s   zProcess.nice_setc                 C   r   )Nr#   ?)r   r   PROC_STATUSESget)r   coderE   rE   rF   r#     s   zProcess.statusc                 C   s<   t | j}g }|D ]\}}}t|||}|| q
|S rW   )rA   proc_threadsr   r   pthreadrO   )r   r   rm   	thread_idutimestimert   rE   rE   rF   threads  s   zProcess.threadsr   rW   )#__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r$   r   r   r   r   r   r   r   r   r   r   rM   r   r   r   r   r   r  r  r  r  r#   r  rE   rE   rE   rF   r   f  st    









	










r   )Fr  )]r  r   r   rg   collectionsr   re   r   r   r   rA   r   r   r   r	   r
   r   r   r   r   r   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-   r3   r<   _fieldsr=   rG   rL   rM   rN   rT   rV   rX   r_   
disk_usagedisk_io_countersrf   rw   r   net_if_addrsr   r   r   r   r   
pid_existsr   r   r   rE   rE   rE   rF   <module>   s   	
	

