o
    h|                     @   s  d Z ddl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 ddlmZ ddlmZ ddlmZ g Zere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+iZ,n=ere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!iZ,nerejejej"ej#ej$ej%ej&ej'ej ej.ej/ej!iZ,ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGiZHeI ZJejKZKeLedZMeLedZNeLedZOeLedZPeQdi dddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJZRedKg dLZSedMg dNZTedOg dPZUeUZVedQg dRZWedSdTZXedUdVZYeredWg dXZZnedWg dYZZdZd[ Z[d\d] Z\d^d_ Z]eMrd`d Z^ndad Z^dbe^__dcdd Z`eserdedf Zandgdf Zadhdi Zberdjdk Zcnerdldk ZcddmdnZdejeZeejfZfejgZgejhZhdodp Zidqdr Zjer dsdt Zkdudv Zldwdx Zmdydz Zned{d| Zod}d~ Zper:dd ZqnerBdd ZqnejqZqdd Zrdd Zsejtdd ZuG dd dZvdS )z5FreeBSD, OpenBSD and NetBSD platforms implementation.    N)defaultdict)
namedtuple)ElementTree   )_common)_psposix)_psutil_bsd)_psutil_posix)FREEBSD)NETBSD)OPENBSD)AccessDenied)NoSuchProcess)ZombieProcess)	conn_tmap)conn_to_ntuple)debug)memoize)memoize_when_activated)usage_percentper_cpu_timesproc_num_threadsproc_open_filesproc_num_fdsppidstatusreal_uid   effective_uid   	saved_uid   real_gid   effective_gid   	saved_gid   ttynr   create_time	   ctx_switches_vol
   ctx_switches_unvol   read_io_count   write_io_count   	user_time   sys_time   ch_user_time   ch_sys_time   rss   vms   memtext   memdata   memstack   cpunum   name   svmem)total	availablepercentusedfreeactiveinactivebufferscachedsharedwired	scputimesusernicesystemidleirqpmem)r<   r>   textdatastack	pcputimes)rX   rZ   children_userchildren_systempmmap_grouped*path rss, private, ref_count, shadow_count	pmmap_ext6addr, perms path rss, private, ref_count, shadow_countsdiskio)
read_countwrite_count
read_byteswrite_bytes	read_time
write_time	busy_time)ri   rj   rk   rl   c                  C   s   t  } trP| \}}}}}}tdd,}|D ]!}|dr(t| d d }	q|dr7t| d d }
qW d    n1 sBw   Y  || }|| }n| \}}}}}}}	}
|| | }|| | }t|| |dd}t||||||||	||
|S )Nz/proc/meminforbs   Buffers:r   i   s
   MemShared:round_)	cextvirtual_memr   open
startswithintsplitr   rJ   )memrK   rO   rP   rQ   rU   rS   flinerR   rT   rN   availrM    r}   A/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/_psbsd.pyvirtual_memory   s>   


r   c                  C   s4   t  \} }}}}t|| dd}t| |||||S )z@System swap memory as (total, used, free, sin, sout) namedtuple.r   rq   )rs   swap_memr   r   sswap)rK   rN   rO   sinsoutrM   r}   r}   r~   swap_memory   s   r   c                  C   s"   t  \} }}}}t| ||||S )z,Return system per-CPU times as a namedtuple.)rs   	cpu_timesrV   rW   r}   r}   r~   r      s   r   c                  C   s>   g } t  D ]}|\}}}}}t|||||}| | q| S )(Return system CPU times as a namedtuple.)rs   r   rV   append)retcpu_trX   rY   rZ   r[   r\   itemr}   r}   r~   r      s   c                  C   s2   t  dkr	t gS tjrd} t| dt_t gS )r   r   &supported only starting from FreeBSD 8T)cpu_count_logicalr   r   
__called__NotImplementedError)msgr}   r}   r~   r     s   
Fc                   C      t  S )z0Return the number of logical CPUs in the system.)rs   r   r}   r}   r}   r~   r        r   c                   C   s   t  dkrdS d S )Nr   )r   r}   r}   r}   r~   cpu_count_cores     r   c                  C   s   d} t  }|dur5|d}|dkr5|d|d  }t|}zt|dp)d} W |  n|  w | s>t dkr>dS | S )z-Return the number of CPU cores in the system.Nz	</groups>r+   zgroup/children/group/cpur   )	rs   cpu_topologyrfindr   
fromstringlenfindallclearr   )r   sindexrootr}   r}   r~   r      s   


c            	      C   s   t rt \} }}}}nBtrAt \} }}}}}}tdd}|D ]}|dr0t| d }q!W d   n1 s;w   Y  ntrNt \} }}}}}}t	
| |||S )z*Return various CPU stats as a named tuple.z
/proc/statrp   s   intrr   N)r
   rs   	cpu_statsr   ru   rv   rw   rx   r   r   	scpustats)	ctxswintrs
soft_intrssyscalls_traps_faults_forksrz   r{   r}   r}   r~   r   ;  s"   
r   c               
   C   s   g } t  }t|D ]]}z	t|\}}W n	 ty   Y q	w |r\zt|dd dd }W n ttfy=   d}Y nw zt|dd dd }W n ttfy[   d}Y nw | 	t
||| q	| S )zReturn frequency metrics for CPUs. As of Dec 2018 only
        CPU 0 appears to be supported by FreeBSD and all other cores
        match the frequency of CPU 0.
         r   /r   N)r   rangers   cpu_freqr   rw   rx   
IndexError
ValueErrorr   r   scpufreq)r   num_cpuscpucurrentavailable_freqmin_freqmax_freqr}   r}   r~   r   ]  s*     r   c                  C   s   t t } t| ddgS )Ng        )floatrs   r   r   r   )currr}   r}   r~   r   w  s   c           	      C   s@   g }t  }|D ]}|\}}}}t||||}|| q|S )zReturn mounted disk partitions as a list of namedtuples.
    'all' argument is ignored, see:
    https://github.com/giampaolo/psutil/issues/906.
    )rs   disk_partitionsr   	sdiskpartr   )	allretlist
partitions	partitiondevice
mountpointfstypeoptsntupler}   r}   r~   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)
namesr   rH   mtuflagsduplexspeederroutput_flagsisupr}   r}   r~   net_if_stats  s*   







r   c              
   C   s   t |  \}}t }trtd||}ntrtd| }nt||}|D ]}|\}}}}	}
}}t||||	|
|t|}|| q$t	|S )z System-wide network connections.r   )
r   setr   rs   net_connectionsr   r   TCP_STATUSESaddlist)kindfamiliestypesr   rawlistr   fdfamtypeladdrraddrr   pidntr}   r}   r~   r     s   r   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 info.Nr   r   <   )rs   sensors_batteryr   r   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)rM   minsleftpower_pluggedsecsleftr}   r}   r~   r     s   r   c               	   C   st   t t} t }t|D ],}z!t|\}}|dkrd}d| }| d t|||| W q t	y7   Y qw | S )z?Return CPU cores temperatures if available, else an empty dict.r   NzCore coretemp)
r   r   r   r   rs   sensors_cpu_temperaturer   r   shwtempr   )r   r   r   r   highrH   r}   r}   r~   sensors_temperatures  s   
r   c                   C   r   )z:The system boot time expressed in seconds since the epoch.)rs   	boot_timer}   r}   r}   r~   r     r   r   c            	      C   sf   g } t  }|D ](}|\}}}}}|dkrtsJ d}|dkr qt||p&d|||}| | q| S )z:Return currently connected users as a list of namedtuples.r   N~)rs   usersr   r   suserr   )	r   r   r   rX   ttyhostnametstampr   r   r}   r}   r~   r     s   r   c                   C   s:   z	t d  W dS  ty   Y dS  ty   Y dS w )Nr   FT)ProcessrH   r   r   r}   r}   r}   r~   _pid_0_exists  s   r   c                  C   s*   t  } trd| vrt r| dd | S )z7Returns a list of PIDs currently running on the system.r   )rs   pidsr   r   insert)r   r}   r}   r~   r     s   r   c                 C   s   t | }|s| t v S dS )NTr   
pid_existsr   r   existsr}   r}   r~   r  )  s   

r  c                 C   s   t | }|s	dS | t v S )NFr  r  r}   r}   r~   r  4  s   

c                 C   s:   zt | td  }t|tjkW S  ty   Y dS w )Nr   F)rs   proc_oneshot_infokinfo_proc_mapPROC_STATUSESgetr   STATUS_ZOMBIEr   )r   str}   r}   r~   	is_zombieB  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 t	y` } z|dkr[dt
 v r[t||| d }~ww )Nr   )r   _ppid_nameProcessLookupErrorr  r   r   PermissionErrorr   r   r   )selfargskwargsr   r   rH   r   funr}   r~   wrapperO  s"   z wrap_exceptions.<locals>.wrapper)	functoolswraps)r  r  r}   r  r~   wrap_exceptionsJ  s   r  c              
   c   s    | j | j| j}}}zdV  W dS  ttfy2 } zt| j r(t||||t|||d}~w tyC } zt	|||d}~ww )z8Same as above, for routines relying on reading /proc fs.N)
r   r  r  r  FileNotFoundErrorr  r   r   r  r   )instr   rH   r   r   r}   r}   r~   wrap_exceptions_procfsb  s   
r  c                   @   s  e Zd ZdZg dZdd Z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r`edd  Zed!d" ZeZed#d$ Zed%d& Zed'd( Zed)d* ZedLd,d-ZedMd/d0Zed1d2 Zed3d4 Z ed5d6 Z!ed7d8 Z"ed9d: Z#e$d;d<Z%e$d;d=Z&d>d? Z'e(red@dA Z)ne'Z)e*redBdC Z+ne'Z+eredDdE Z,edFdG Z-edHdI Z.edMdJdKZ/d.S d.S )Nr   z1Wrapper class around underlying C implementation.)_cacher  r  r   c                 C   s   || _ d | _d | _d S N)r   r  r  )r  r   r}   r}   r~   __init__y  s   
zProcess.__init__c                 C   s   t | j dS )z+Raise NSP if the process disappeared on us.N)rs   	proc_namer   r  r}   r}   r~   _assert_alive~  s   zProcess._assert_alivec                 C   s$   t | j}t|ttksJ |S )z;Retrieves multiple process info in one shot as a raw tuple.)rs   r  r   r   r  r  r   r}   r}   r~   oneshot  s   zProcess.oneshotc                 C      | j |  d S r  )r#  cache_activater   r}   r}   r~   oneshot_enter     zProcess.oneshot_enterc                 C   r$  r  )r#  cache_deactivater   r}   r}   r~   oneshot_exit  r'  zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )NrH   )r#  r  rs   r  r   )r  rH   r}   r}   r~   rH     s   zProcess.namec                 C   s   t r| jdkr	dS t| jS tr8| jdkrdS t|  td| j dW  d    S 1 s1w   Y  d S dd l}| 	 }|rK|
|d pJdS dS )Nr    z/proc/z/exe)r
   r   rs   proc_exer   r  osreadlinkshutilcmdlinewhich)r  r.  r/  r}   r}   r~   exe  s   


$zProcess.exec              
   C   s   t r	| jdkr	g S trYzt| jW S  tyX } z:|jtjkrS| j| j| j	}}}t
| jr7t||||t| jsCt||||td|d g W  Y d }~S  d }~ww t| jS )Nr   z	ignoring z and returning an empty list)r   r   r   rs   proc_cmdliner   r   EINVALr  r  r  r   r  r   r   )r  r   r   rH   r   r}   r}   r~   r/    s$   

zProcess.cmdlinec                 C      t | jS r  )rs   proc_environr   r   r}   r}   r~   environ     zProcess.environc                 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tmapr}   r}   r~   terminal  s   
zProcess.terminalc                 C   s   |   td  | _| jS )Nr   )r#  r  r  r   r}   r}   r~   r     s   zProcess.ppidc                 C   .   |   }t|td  |td  |td  S )Nr   r   r    )r#  r   puidsr  r  rawtupler}   r}   r~   uids     


zProcess.uidsc                 C   r=  )Nr"   r$   r&   )r#  r   pgidsr  r?  r}   r}   r~   gids  rB  zProcess.gidsc                 C   s8   |   }t|td  |td  |td  |td  S )Nr4   r6   r8   r:   )r#  r   ra   r  r?  r}   r}   r~   r     s   



zProcess.cpu_timesc                 C      |   td  S )NrF   r#  r  r   r}   r}   r~   cpu_num     zProcess.cpu_numc                 C   s@   |   }t|td  |td  |td  |td  |td  S )Nr<   r>   r@   rB   rD   )r#  r]   r  r?  r}   r}   r~   memory_info   s   




zProcess.memory_infoc                 C   rE  )Nr*   rF  r   r}   r}   r~   r*     rH  zProcess.create_timec                 C   s   t rt| jS t|  S r  )HAS_PROC_NUM_THREADSrs   r   r   r   threadsr   r}   r}   r~   num_threads  s   zProcess.num_threadsc                 C   s$   |   }t|td  |td  S )Nr,   r.   )r#  r   pctxswr  r?  r}   r}   r~   num_ctx_switches  s
   

zProcess.num_ctx_switchesc                 C   sH   t | j}g }|D ]\}}}t|||}|| q
tr"|   |S r  )rs   proc_threadsr   r   pthreadr   r   r!  )r  r   r   	thread_idutimestimer   r}   r}   r~   rK  !  s   zProcess.threadsinetc              	   C   s   t | \}}g }trt| j|}ntrt| j||}nt| j||}|D ](}|d d \}}}	}
}}tr@||vs?|	|vr@q't|||	|
||t	}|
| q'|   |S )Nr%   )r   r   rs   r   r   r   proc_net_connectionsr
   r   r   r   r!  )r  r   r   r   r   r   r   r   r   r   r   r   r   r   r}   r}   r~   r   -  s$   zProcess.net_connectionsNc                 C   s   t | j|| jS r  )r   wait_pidr   r  )r  timeoutr}   r}   r~   waitF  r   zProcess.waitc                 C   r4  r  )r   getpriorityr   r   r}   r}   r~   nice_getJ  r7  zProcess.nice_getc                 C   s   t | j|S r  )r   setpriorityr   )r  valuer}   r}   r~   nice_setN  s   zProcess.nice_setc                 C   s   |   td  }t|dS )Nr   ?)r#  r  r  r  )r  coder}   r}   r~   r   R  s   zProcess.statusc                 C   s(   |   }t|td  |td  ddS )Nr0   r2   r   )r#  r   pior  r?  r}   r}   r~   io_countersX  s   

zProcess.io_countersc                 C   s8   t r	| jdkr	dS tstrt| jS ttrdd)z)Return process current working directory.r   r*  r   )r   r   r   HAS_PROC_OPEN_FILESrs   proc_cwdr   r
   r   r}   r}   r~   cwdb  s   zProcess.cwdmmapre   rg   c                 C   s   t r  )r   r   r}   r}   r~   _not_implementedy  s   zProcess._not_implementedc                 C   s   t | j}dd |D S )z8Return files opened by process as a list of namedtuples.c                 S   s   g | ]
\}}t ||qS r}   )r   	popenfile).0pathr   r}   r}   r~   
<listcomp>  s    z&Process.open_files.<locals>.<listcomp>)rs   r   r   )r  r   r}   r}   r~   
open_files  s   zProcess.open_filesc                 C   s   t | j}tr|   |S )z=Return the number of file descriptors opened by this process.)rs   r   r   r   r!  r"  r}   r}   r~   num_fds  s   zProcess.num_fdsc                 C   r4  r  )rs   proc_cpu_affinity_getr   r   r}   r}   r~   cpu_affinity_get  r7  zProcess.cpu_affinity_getc              
   C   s   t ttt }|D ]}||vrd|d| d}t|qz
t| j| W d S  tyV } z!|j	t	j
t	jhv rQ|D ]}||vrPd|d| d}t||q< d }~ww )Nzinvalid CPU z (choose between ))r   r   r   r   r   rs   proc_cpu_affinity_setr   r   r   r3  EDEADLK)r  cpusallcpusr   r   r   r}   r}   r~   cpu_affinity_set  s*   
zProcess.cpu_affinity_setc                 C   r4  r  )rs   proc_memory_mapsr   r   r}   r}   r~   memory_maps  r7  zProcess.memory_mapsc                 C   sN   |d u rt | j|S t|dkrd|}t||\}}t | j|||S )Nr   z2second argument must be a (soft, hard) tuple, got )rs   proc_getrlimitr   r   r   proc_setrlimit)r  resourcelimitsr   softhardr}   r}   r~   rlimit  s   zProcess.rlimit)rT  r  )0__name__
__module____qualname____doc__	__slots__r  r!  r  r   r#  r&  r)  rH   r1  r/  r6  r<  r   rA  rD  r   r
   rG  rI  memory_full_infor*   rL  rN  rK  r   rX  rZ  r]  r   ra  rd  r   nt_mmap_groupednt_mmap_extrf  rb  rk  HAS_PROC_NUM_FDSrl  rn  rt  rv  r}  r}   r}   r}   r~   r   t  s    








	










	



r   r}   )F)wr  
contextlibr   r  r,  collectionsr   r   	xml.etreer   r*  r   r   r   rs   r	   r   r
   r   r   r   r   r   r   r   r   r   r   r   __extra__all__SIDLSTATUS_IDLESRUNSTATUS_RUNNINGSSLEEPSTATUS_SLEEPINGSSTOPSTATUS_STOPPEDSZOMBr	  SWAITSTATUS_WAITINGSLOCKSTATUS_LOCKEDr  SDEADSTATUS_WAKINGSONPROC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   getpagesizePAGESIZEAF_LINKr   HAS_PER_CPU_TIMESrJ  rb  r  dictr  rJ   rV   r]   pfullmemra   rd   rf   rh   r   r   r   r   r   r   r   r   r   r   
disk_usagedisk_io_countersr   net_if_addrsr   r   r   r   r   r   r   r   r  r  r  contextmanagerr  r   r}   r}   r}   r~   <module>   sl  	




	
$
/


 





	

