o
    adf|                     @   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 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j0iZ1n=erej#ej$ej'ej(ej)ej*ej2ej,ej+ej,ej%ej3ej4ej&iZ1nerej#ej$ej'ej(ej)ej*ej+ej,ej%ej3ej4ej&iZ1e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jGejHejIejJejKejLiZMeN ZOejPZPeQedZReQedZSeQedZTeQedZUeVdi 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dMdNZWedOg dPZXedQg dRZYedSg dTZZeZZ[edUg dVZ\edWdXZ]edYdZZ^ered[g d\Z_ned[g d]Z_d^d_ Z`d`da Zadbdc ZbeRrddd Zcnded Zcdfec_ddgdh Zeeserdidj Zfndkdj Zfdldm Zgerdndo Zhnerdpdo ZhddqdrZiejjZjejkZkejlZlejmZmdsdt Zndudv Zoer8dwdx Zpdydz Zqd{d| Zrd}d~ Zsedd Ztdd ZuesPerUdd ZvnejvZvdd Zwdd Zxejydd ZzG dd dZ{d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)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@   rB   textdatastack	pcputimes)r\   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_bytesZ	read_timeZ
write_timeZ	busy_time)rm   rn   ro   rp   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:Zround_)	cextZvirtual_memr   open
startswithintsplitr   rN   )ZmemrO   rS   rT   rU   rY   rW   flinerV   rX   rR   ZavailrQ    rz   V/var/www/html/software/conda/envs/catlas/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   rr   )rs   Zswap_memr   r   Zsswap)rO   rR   rS   sinZsoutrQ   rz   rz   r{   swap_memory   s   r~   c                  C   s"   t  \} }}}}t| ||||S )z,Return system per-CPU times as a namedtuple.)rs   	cpu_timesrZ   r[   rz   rz   r{   r      s   r   c                  C   s>   g } t  D ]}|\}}}}}t|||||}| | q| S )(Return system CPU times as a namedtuple.)rs   r   rZ   append)retZcpu_tr\   r]   r^   r_   r`   itemrz   rz   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)msgrz   rz   r{   r   
  s   
Fc                   C      t  S )z0Return the number of logical CPUs in the system.)rs   r   rz   rz   rz   r{   r        r   c                   C   s   t  dkrdS d S )Nr   )r   rz   rz   rz   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   Zcpu_topologyrfindr   Z
fromstringlenfindallclearr   )r   sindexrootrz   rz   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/statrq   s   intrr   N)r
   rs   	cpu_statsr   rt   ru   rv   rw   r   r   Z	scpustats)	ZctxswZintrsZ
soft_intrsZsyscallsZtrapsZfaultsZforksrx   ry   rz   rz   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   rv   rw   
IndexError
ValueErrorr   r   scpufreq)r   num_cpuscpucurrentZavailable_freqZmin_freqZmax_freqrz   rz   r{   r   a  s*     r   c                  C   s   t t } t| ddgS )Ng        )floatrs   r   r   r   )currrz   rz   r{   r   {  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)rs   disk_partitionsr   Z	sdiskpartr   )allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeoptsZmaxfileZmaxpathntuplerz   rz   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_posixZ
net_if_mtuZnet_if_flagsZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrr   r   joinZ	snicstats)
namesr   rL   ZmtuflagsZduplexspeederrZoutput_flagsZisuprz   rz   r{   net_if_stats  s*   







r   c              
   C   s   | t jvrtd| ddd tD f t|  \}}t }tr(td||}ntr1td| }nt||}|D ]}|\}}}}	}
}}t	||||	|
|t
|}|| q9t|S )z System-wide network connections.+invalid %r kind argument; choose between %s, c                 S      g | ]}t |qS rz   repr.0xrz   rz   r{   
<listcomp>      z#net_connections.<locals>.<listcomp>r   )r   r   r   r   setr   rs   net_connectionsr   r   TCP_STATUSESaddlist)kindfamiliestypesr   rawlistr   fdfamtypeladdrraddrr   pidntrz   rz   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   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)rQ   ZminsleftZpower_pluggedZsecsleftrz   rz   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 %sZcoretemp)
r   r   r   r   rs   Zsensors_cpu_temperaturer   r   Zshwtempr   )r   r   r   r   highrL   rz   rz   r{   sensors_temperatures  s   r   c                   C   r   )z:The system boot time expressed in seconds since the epoch.)rs   	boot_timerz   rz   rz   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   Zsuserr   )	r   r   r   r\   ttyhostnameZtstampr   r   rz   rz   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)ProcessrL   r   r   rz   rz   rz   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   rz   rz   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   existsrz   rz   r{   r   6  s   

r   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   strz   rz   r{   	is_zombieD  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funrz   r{   wrapperQ  s   


z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rz   r   r{   wrap_exceptionsL  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   )instrz   rz   r{   wrap_exceptions_procfsg  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   rz   rz   r{   __init__}  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   rz   rz   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   rz   rz   r{   oneshot  s   zProcess.oneshotc                 C      | j |  d S r   )r   Zcache_activater   rz   rz   r{   oneshot_enter     zProcess.oneshot_enterc                 C   r   r   )r   Zcache_deactivater   rz   rz   r{   oneshot_exit  r   zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )NrL   )r   r   rs   r   r   )r   rL   rz   rz   r{   rL     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   rs   Zproc_exer   r   osreadlinkcmdliner   )r   r  rz   rz   r{   exe  s   


$zProcess.exec              
   C   s   t r	| jdkr	g S trPzt| jW S  tyO } z1|jtjkrJt| jr.t	| j| j
| jt| js<t| j| j
| jtd|  g W  Y d }~S  d }~ww t| jS )Nr   z'ignoring %r and returning an empty list)r   r   r   rs   Zproc_cmdliner   r   EINVALr   r   r   r   r   r   r   )r   r   rz   rz   r{   r    s"   

zProcess.cmdlinec                 C      t | jS r   )rs   Zproc_environr   r   rz   rz   r{   environ     zProcess.environc                 C   s8   |   td  }t }z|| W S  ty   Y d S w )Nr,   )r   r   r   Zget_terminal_mapKeyError)r   Ztty_nrZtmaprz   rz   r{   terminal  s   
zProcess.terminalc                 C   s   |   td  | _| jS )Nr   )r   r   r   r   rz   rz   r{   r     s   zProcess.ppidc                 C   .   |   }t|td  |td  |td  S )Nr    r"   r$   )r   r   Zpuidsr   r   Zrawtuplerz   rz   r{   uids     


zProcess.uidsc                 C   r  )Nr&   r(   r*   )r   r   Zpgidsr   r  rz   rz   r{   gids  r  zProcess.gidsc                 C   s8   |   }t|td  |td  |td  |td  S )Nr8   r:   r<   r>   )r   r   re   r   r  rz   rz   r{   r     s   



zProcess.cpu_timesc                 C      |   td  S )NrJ   r   r   r   rz   rz   r{   cpu_num     zProcess.cpu_numc                 C   s@   |   }t|td  |td  |td  |td  |td  S )Nr@   rB   rD   rF   rH   )r   ra   r   r  rz   rz   r{   memory_info  s   




zProcess.memory_infoc                 C   r  )Nr.   r  r   rz   rz   r{   r.     r  zProcess.create_timec                 C   s   t rt| jS t|  S r   )HAS_PROC_NUM_THREADSrs   r   r   r   threadsr   rz   rz   r{   num_threads  s   zProcess.num_threadsc                 C   s$   |   }t|td  |td  S )Nr0   r2   )r   r   Zpctxswr   r  rz   rz   r{   num_ctx_switches  s
   

zProcess.num_ctx_switchesc                 C   sH   t | j}g }|D ]\}}}t|||}|| q
tr"|   |S r   )rs   Zproc_threadsr   r   Zpthreadr   r   r   )r   r   r   	thread_idutimeZstimer   rz   rz   r{   r  #  s   zProcess.threadsinetc              	   C   s   |t vrtd|ddd t D f t | \}}g }tr&t| j|}ntr1t| j||}nt| j||}|D ](}|d d \}}}	}
}}t	rT||vsS|	|vrTq;t
|||	|
||t}|| q;|   |S )Nr   r   c                 S   r   rz   r   r   rz   rz   r{   r   4  r   z'Process.connections.<locals>.<listcomp>r)   )r   r   r   r   rs   r   r   r   Zproc_connectionsr
   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz   rz   r{   connections/  s0   zProcess.connectionsNc                 C   s   t | j|| jS r   )r   Zwait_pidr   r   )r   timeoutrz   rz   r{   waitM  r   zProcess.waitc                 C   r  r   )r   getpriorityr   r   rz   rz   r{   nice_getQ  r  zProcess.nice_getc                 C   s   t | j|S r   )r   setpriorityr   )r   valuerz   rz   r{   nice_setU  s   zProcess.nice_setc                 C   s   |   td  }t|dS )Nr   ?)r   r   r   r   )r   coderz   rz   r{   r   Y  s   zProcess.statusc                 C   s(   |   }t|td  |td  ddS )Nr4   r6   r   )r   r   Zpior   r  rz   rz   r{   io_counters_  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   Zproc_cwdr   r
   r   rz   rz   r{   cwdi  s   zProcess.cwdmmapri   rk   c                 C   s   t r   )r   r   rz   rz   r{   _not_implemented  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 rz   )r   Z	popenfile)r   pathr   rz   rz   r{   r     s    z&Process.open_files.<locals>.<listcomp>)rs   r   r   )r   r   rz   rz   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   rz   rz   r{   num_fds  s   zProcess.num_fdsc                 C   r  r   )rs   Zproc_cpu_affinity_getr   r   rz   rz   r{   cpu_affinity_get  r  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   rs   Zproc_cpu_affinity_setr   r   r   r  ZEDEADLK)r   ZcpusZallcpusr   r   rz   rz   r{   cpu_affinity_set  s,   
zProcess.cpu_affinity_setc                 C   r  r   )rs   Zproc_memory_mapsr   r   rz   rz   r{   memory_maps  r  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)rs   Zproc_getrlimitr   r   r   r   Zproc_setrlimit)r   resourceZlimitsZsoftZhardrz   rz   r{   rlimit  s   zProcess.rlimit)r  r   )0__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   rL   r  r  r  r
  r   r  r  r   r
   r  r  Zmemory_full_infor.   r  r  r  r  r  r   r#  r   r&  r(  r   Znt_mmap_groupedZnt_mmap_extr*  r'  r,  HAS_PROC_NUM_FDSr-  r.  r0  r1  r3  rz   rz   rz   r{   r   x  s    








	










	



r   rz   )F)|r7  
contextlibr   r   r  collectionsr   r   Z	xml.etreer   r   r   r   r   rs   r	   r   r
   r   r   r   r   r   r   r   r   r   r   r   _compatr   r   r   r   Z__extra__all__ZSIDLZSTATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDZSZOMBr   ZSWAITZSTATUS_WAITINGZSLOCKZSTATUS_LOCKEDr   ZSDEADZSTATUS_WAKINGZSONPROCZ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getpagesizePAGESIZEZAF_LINKr   ZHAS_PER_CPU_TIMESr  r'  r9  dictr   rN   rZ   ra   Zpfullmemre   rh   rj   rl   r|   r~   r   r   r   r   r   r   r   r   
disk_usageZdisk_io_countersr   Znet_if_addrsr   r   r   r   r   r   r   r   r   r   r   contextmanagerr   r   rz   rz   rz   r{   <module>   sp  	




	
$
/


 






