o
    iz                     @   s  d Z ddlZddlZddlZddlZddlm  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 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j0ej1iZ2n=erej$ej%ej(ej)ej*ej+ej3ej-ej,ej-ej&ej4ej5ej'iZ2nerej$ej%ej(ej)ej*ej+ej,ej-ej&ej4ej5ej'iZ2ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMiZNeO ZPejQZQeRedZSeRedZTeRedZUeRedZVeWdi 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dKdLZXedMg dNZYedOg dPZZedQg dRZ[e[Z\edSg dTZ]edUdVZ^edWdXZ_eredYg dZZ`nedYg d[Z`d\d] Zad^d_ Zbd`da ZceSrdbd Zdndcd Zddded_ededf Zfeserdgdh Zgndidh Zgdjdk Zher
dldm Zinerdndm ZiddodpZjejkZkejlZlejmZmejnZndqdr Zodsdt Zper5dudv Zqdwdx Zrdydz Zsd{d| Zted}d~ Zudd ZvesMerRdd ZwnejwZwdd Zxdd Zyejzdd Z{G dd de|Z}dS )z5FreeBSD, OpenBSD and NetBSD platforms implementation.    N)defaultdict)
namedtuple   )_common)_psposix)_psutil_bsd)_psutil_posix)FREEBSD)NETBSD)OPENBSD)AccessDenied)NoSuchProcess)ZombieProcess)	conn_tmap)conn_to_ntuple)memoize)memoize_when_activated)usage_percent)FileNotFoundError)PermissionError)ProcessLookupError)which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)rZ   r\   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)rk   rl   rm   rn   c                  C   s   t  } | \}}}}}}}}trYtdd<}	|	D ]1}
|
dr*t|
 d d }q|
dr:t|
 d d }q|
drIt|
 d d }qW d   n1 sTw   Y  || | }|| | }t|| |dd	}t|||||||||||S )
z&System virtual memory as a namedtuple.z/proc/meminforbs   Buffers:r   i   s
   MemShared:s   Cached:Nround_)	cextvirtual_memr
   open
startswithintsplitr   rL   )memrM   rQ   rR   rS   rW   rU   rT   rV   flineavailrP   rO    r   H/var/www/edux/Edux_v2/venv/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   rs   )ru   swap_memr   r   sswap)rM   rP   rQ   sinsoutrO   r   r   r   swap_memory   s   r   c                  C   s"   t  \} }}}}t| ||||S )z+Return system per-CPU times as a namedtuple)ru   	cpu_timesrX   rY   r   r   r   r      s   r   c                  C   s>   g } t  D ]}|\}}}}}t|||||}| | q| S )'Return system CPU times as a namedtuple)ru   r   rX   append)retcpu_trZ   r[   r\   r]   r^   itemr   r   r   r      s   c                   C   s.   t  dkr	t gS tjrtddt_t gS )r   r   &supported only starting from FreeBSD 8T)cpu_count_logicalr   r   
__called__NotImplementedErrorr   r   r   r   r      s   
Fc                   C      t  S )z0Return the number of logical CPUs in the system.)ru   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   )	ru   cpu_topologyrfindET
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/statrr   s   intrr   N)r	   ru   	cpu_statsr
   rw   rx   ry   rz   r   r   	scpustats)	ctxswintrs
soft_intrssyscallstrapsfaultsforksr|   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   rangeru   cpu_freqr   ry   rz   
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        )floatru   r   r   r   )currr   r   r   r   T  s   c              	   C   sL   g }t  }|D ]}|\}}}}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
    N)ru   disk_partitionsr   	sdiskpartr   )allretlist
partitions	partitiondevice
mountpointfstypeoptsmaxfilemaxpath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   rJ   mtuflagsduplexspeederroutput_flagsisupr   r   r   net_if_stats{  s*   






r   c              
   C   s  t r7g }t D ]-}z	t|| }W n ttfy   Y qw |D ]}t|}|| |tj	|  q q|S | tj
vrLtd| ddd t
D f t
|  \}}t }tr]td}nt }|D ]#}|\}	}
}}}}}|
|v r||v rt|	|
||||t|}|| qct|S )z System-wide network connections.+invalid %r kind argument; choose between %s, c                 S      g | ]}t |qS r   repr.0xr   r   r   
<listcomp>      z#net_connections.<locals>.<listcomp>r   )r   pidsProcessconnectionsr   r   listr   r   sconnr   r   r   setr
   ru   net_connectionsr   TCP_STATUSESadd)kindr   pidconsconnfamiliestypesrawlistr   fdfamtypeladdrraddrr   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   <   )ru   sensors_batteryr   r   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)rO   minsleftpower_pluggedsecsleftr   r   r   r     s   r   c               	   C   sr   t t} t }t|D ]+}z t|\}}|dkrd}d| }| d t|||| W q t	y6   Y qw | S )z?Return CPU cores temperatures if available, else an empty dict.r   NzCore %scoretemp)
r   r   r   r   ru   sensors_cpu_temperaturer   r   shwtempr   )r   r   r   r   highrJ   r   r   r   sensors_temperatures  s   r	  c                   C   r   )z:The system boot time expressed in seconds since the epoch.)ru   	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~)ru   usersr   r   suserr   )	r   r   r   rZ   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)r   rJ   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   )ru   r   r   r  insert)r   r   r   r   r   	  s   r   c                 C   s   t | }|s| t v S dS )zReturn True if pid exists.T)r   
pid_existsr   )r   existsr   r   r   r    s   

r  c                 C   s4   zt | td  }|t jkW S  ty   Y dS w )Nr   F)ru   proc_oneshot_infokinfo_proc_mapSZOMB	Exception)r   str   r   r   	is_zombie!  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	yN   | jdkrMdt
 v rLt| j| j  w Nr   )r   r  r   r   _name_ppidr   r   r   r   r   )selfargskwargsfunr   r   wrapper-  s   


z wrap_exceptions.<locals>.wrapper)	functoolswraps)r"  r#  r   r!  r   wrap_exceptions)  s   r&  c              	   c   sf    zdV  W dS  t tfy%   t| jrt| j| j| jt| j| j ty2   t	| j| jw )z8Same as above, for routines relying on reading /proc fs.N)
r   r   r  r   r   r  r  r   r   r   )instr   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.)r   r  r  _cachec                 C   s   || _ d | _d | _d S N)r   r  r  )r  r   r   r   r   __init__X  s   
zProcess.__init__c                 C   s   t | j dS )z+Raise NSP if the process disappeared on us.N)ru   	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.)ru   r  r   r   r  r  r   r   r   r   oneshotc  s   zProcess.oneshotc                 C      | j |  d S r*  )r0  cache_activater-  r   r   r   oneshot_enterk     zProcess.oneshot_enterc                 C   r1  r*  )r0  cache_deactivater-  r   r   r   oneshot_exitn  r4  zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )NrJ   )r0  r  ru   r,  r   )r  rJ   r   r   r   rJ   q  s   zProcess.namec                 C   s   t r| jdkr	dS t| jS tr6| jdkrdS t|  td| j W  d    S 1 s/w   Y  d S |  }|rDt	|d pCdS dS )Nr    z/proc/%s/exe)
r	   r   ru   proc_exer
   r(  osreadlinkcmdliner   )r  r;  r   r   r   exev  s   


$zProcess.exec              
   C   s   t r	| jdkr	g S trJzt| jW S  tyI } z+|jtjkrDt| jr.t	| j| j
| jt| js<t| j| j
| jg W  Y d }~S  d }~ww t| jS r  )r   r   r
   ru   proc_cmdliner   r   EINVALr  r   r  r  r  r   )r  r   r   r   r   r;    s    

zProcess.cmdlinec                 C      t | jS r*  )ru   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*   )r0  r  r   get_terminal_mapKeyError)r  tty_nrtmapr   r   r   terminal  s   
zProcess.terminalc                 C   s   |   td  | _| jS )Nr   )r0  r  r  r-  r   r   r   r     s   zProcess.ppidc                 C   .   |   }t|td  |td  |td  S )Nr   r    r"   )r0  r   puidsr  r  rawtupler   r   r   uids     


zProcess.uidsc                 C   rH  )Nr$   r&   r(   )r0  r   pgidsr  rJ  r   r   r   gids  rM  zProcess.gidsc                 C   s8   |   }t|td  |td  |td  |td  S )Nr6   r8   r:   r<   )r0  r   rc   r  rJ  r   r   r   r     s   



zProcess.cpu_timesc                 C      |   td  S )NrH   r0  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@   rB   rD   rF   )r0  r_   r  rJ  r   r   r   memory_info  s   




zProcess.memory_infoc                 C   rP  )Nr,   rQ  r-  r   r   r   r,     rS  zProcess.create_timec                 C   s   t rt| jS t|  S r*  )HAS_PROC_NUM_THREADSru   r   r   r   threadsr-  r   r   r   num_threads  s   zProcess.num_threadsc                 C   s$   |   }t|td  |td  S )Nr.   r0   )r0  r   pctxswr  rJ  r   r   r   num_ctx_switches  s
   

zProcess.num_ctx_switchesc                 C   sH   t | j}g }|D ]\}}}t|||}|| q
tr"|   |S r*  )ru   proc_threadsr   r   pthreadr   r   r.  )r  r   r   	thread_idutimestimer   r   r   r   rV    s   zProcess.threadsinetc              	   C   s  |t vrtd|ddd t D f trXt | \}}g }t| j}|D ])}|\}}}	}
}}}|| jks8J ||v rO|	|v rOt|||	|
||t}|	| q&| 
  t|S t | \}}t| j||}g }|D ]}|\}}}	}
}}t|||	|
||t}|	| qjtr| 
  |S )Nr   r   c                 S   r   r   r   r   r   r   r   r     r   z'Process.connections.<locals>.<listcomp>)r   r   r   r
   ru   r   r   r   r   r   r.  r   proc_connectionsr   )r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s>   
zProcess.connectionsNc                 C   s   t | j|| jS r*  )r   wait_pidr   r  )r  timeoutr   r   r   wait%  r   zProcess.waitc                 C   r?  r*  )r   getpriorityr   r-  r   r   r   nice_get)  rB  zProcess.nice_getc                 C   s   t | j|S r*  )r   setpriorityr   )r  valuer   r   r   nice_set-  s   zProcess.nice_setc                 C   s   |   td  }t|dS )Nr   ?)r0  r  PROC_STATUSESget)r  coder   r   r   r   1  s   zProcess.statusc                 C   s(   |   }t|td  |td  ddS )Nr2   r4   r   )r0  r   pior  rJ  r   r   r   io_counters7  s   

zProcess.io_countersc                 C   s<   t r	| jdkr	dS tstrt| jpdS ttrdd)z)Return process current working directory.r   Nr   r7  )r   r   r
   HAS_PROC_OPEN_FILESru   proc_cwdr   r	   r-  r   r   r   cwd@  s   zProcess.cwdmmaprg   ri   c                 C   s   t r*  )r   r-  r   r   r   _not_implementedU  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)r   pathr   r   r   r   r   _  s    z&Process.open_files.<locals>.<listcomp>)ru   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.)ru   r   r   r
   r.  r/  r   r   r   num_fdsf  s   zProcess.num_fdsc                 C   r?  r*  )ru   proc_cpu_affinity_getr   r-  r   r   r   cpu_affinity_gett  rB  zProcess.cpu_affinity_getc              
   C   s   t ttt }|D ]}||vrtd||f qz
t| j| W d S  tyK } z|j	t	j
t	jfv rF|D ]}||vrEtd||f q7 d }~ww )Nz#invalid CPU #%i (choose between %s))tupler   r   r   r   ru   proc_cpu_affinity_setr   r   r   r>  EDEADLK)r  cpusallcpusr   r   r   r   r   cpu_affinity_setx  s,   zProcess.cpu_affinity_setc                 C   r?  r*  )ru   proc_memory_mapsr   r-  r   r   r   memory_maps  rB  zProcess.memory_mapsc                 C   sL   |d u rt | j|S t|dkrtdt| |\}}t | j|||S )Nr   z4second argument must be a (soft, hard) tuple, got %s)ru   proc_getrlimitr   r   r   r   proc_setrlimit)r  resourcelimitssofthardr   r   r   rlimit  s   zProcess.rlimit)r_  r*  )0__name__
__module____qualname____doc__	__slots__r+  r.  r&  r   r0  r3  r6  rJ   r<  r;  rA  rG  r   rL  rO  r   r	   rR  rT  memory_full_infor,   rW  rY  rV  r   rc  re  rh  r   rn  rq  r   nt_mmap_groupednt_mmap_extrs  ro  rv  HAS_PROC_NUM_FDSrw  ry  r  r  r  r   r   r   r   r   S  s    










	



!







r   r   )F)~r  
contextlibr   r$  r9  xml.etree.ElementTreeetreeElementTreer   collectionsr   r   r7  r   r   r   ru   r   r   r	   r
   r   r   r   r   r   r   r   r   r   _compatr   r   r   r   __extra__all__SIDLSTATUS_IDLESRUNSTATUS_RUNNINGSSLEEPSTATUS_SLEEPINGSSTOPSTATUS_STOPPEDr  STATUS_ZOMBIESWAITSTATUS_WAITINGSLOCKSTATUS_LOCKEDrj  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_TIMESrU  ro  r  dictr  rL   rX   r_   pfullmemrc   rf   rh   rj   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(  objectr   r   r   r   r   <module>   sn  	




	
#	
	



(




