o
    ic                     @   s8  d Z ddlZddl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! g dZ"e# Z$ej%Z%ej&dkZ'dZ(dZ)ej*ej+ej,ej-ej.ej/ej0ej1ej2ej3ej4ej-ej5ej6iZ7e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jMejNejOejPe(ejQe)iZReSddddd d!d"d#d$d%d&d'd(ZTed)g d*ZUed+g d,ZVed-g d.ZWed/d0d1gZXeXZYed2g d3ZZed4d5d6[eZj\ Z]d7d8 Z^d9d: Z_d;d< Z`d=d> Zad?d@ ZbdAdB ZcdCdD ZdejeZeejfZfdYdFdGZgejhZhejiZidZdIdJZjdKdL ZkdMdN ZldOdP ZmdQdR ZndSdT ZodUdV ZpG dWdX dXeqZrdS )[z'Sun OS Solaris platform implementation.    N)
namedtuple)AF_INET   )_common)_psposix)_psutil_posix)_psutil_sunos)AF_INET6)AccessDenied)NoSuchProcess)ZombieProcess)debug)get_procfs_path)isfile_strict)memoize_when_activated)sockfam_to_enum)socktype_to_enum)usage_percent)PY3)FileNotFoundError)PermissionError)ProcessLookupError)b)	CONN_IDLE
CONN_BOUNDPROCFS_PATHl        IDLEBOUND                     	   
      )ppidrssvmscreate_timenicenum_threadsstatusttynruideuidgidegid	scputimes)usersystemidleiowait	pcputimes)r5   r6   children_userchildren_systemsvmem)total	availablepercentusedfreepmemr)   r*   pmmap_grouped)pathr)   	anonymouslocked	pmmap_extzaddr perms  c                  C   sF   t dt } t dt  }}| | }t|| dd}t| ||||S )zReport virtual memory metrics.SC_PHYS_PAGESSC_AVPHYS_PAGESr   round_)ossysconf	PAGE_SIZEr   r<   )r=   rA   availr@   r?    rQ   J/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/psutil/_pssunos.pyvirtual_memory{   s
   rS   c               	   C   s
  t  \} }tjddtjd  ddgtjd}| \}}tr&|	t
jj}|jdkr2td|j | d	d
d }|sCtdd }}|D ]"}| }|dd \}	}
|tt|	d 7 }|tt|
d 7 }qI|| }t||d
d}t||||| t |t S )zReport swap memory metrics.z/usr/bin/envzPATH=/usr/sbin:/sbin:%sPATHswapz-l)stdoutr   z'swap -l' failed (retcode=%s)
r   Nzno swap device(s) configuredr   r!   i   rK   )cextswap_mem
subprocessPopenrM   environPIPEcommunicater   decodesysrV   encoding
returncodeRuntimeErrorstripsplitintr   r   sswaprO   )sinsoutprV   stderrlinesr=   rA   linetfr@   r?   rQ   rQ   rR   swap_memory   s6   
rp   c                  C   s   t  } tdd t|  D  S )z-Return system-wide CPU times as a named tuplec                 S      g | ]}t |qS rQ   )sum.0xrQ   rQ   rR   
<listcomp>       zcpu_times.<locals>.<listcomp>)rX   per_cpu_timesr4   zipretrQ   rQ   rR   	cpu_times   s   r|   c                  C   s   t  } dd | D S )z5Return system per-CPU times as a list of named tuplesc                 S   s   g | ]}t | qS rQ   )r4   rs   rQ   rQ   rR   rv      rw   z!per_cpu_times.<locals>.<listcomp>)rX   rx   rz   rQ   rQ   rR   rx      s   rx   c                   C   s"   zt dW S  ty   Y dS w )z0Return the number of logical CPUs in the system.SC_NPROCESSORS_ONLNN)rM   rN   
ValueErrorrQ   rQ   rQ   rR   cpu_count_logical   s
   r   c                   C      t  S )z-Return the number of CPU cores in the system.)rX   cpu_count_coresrQ   rQ   rQ   rR   r         r   c                  C   s$   t  \} }}}d}t| |||S )z*Return various CPU stats as a named tuple.r   )rX   	cpu_statsr   	scpustats)ctx_switches
interruptssyscallstrapssoft_interruptsrQ   rQ   rR   r      s
   
r   Fc                 C   s   g }t  }|D ]G}|\}}}}|dkrd}| s<z	t|js W qW n ty; } ztd||f  W Y d}~qd}~ww d }	}
t|||||	|
}|| q|S )zReturn system disk partitions.none zskipping %r: %sN)	rX   disk_partitions
disk_usager=   OSErrorr   r   	sdiskpartappend)allretlist
partitions	partitiondevice
mountpointfstypeoptserrmaxfilemaxpathntuplerQ   rQ   rR   r      s,   
r   c              
   C   s  t j }|dkr|dd | |vr#td| ddd |D f t j|  \}}t|}t }|D ]T}|\}}	}
}}}}|	|vrDq4|
|vrIq4|	t	t
fv r]|rVt j| }|r]t j| }t| }t|	}	t|
}
|dkryt ||	|
||||}n
t ||	|
|||}|| q4t|S )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    Only INET sockets are returned (UNIX are not).
    r   unixr   z+invalid %r kind argument; choose between %sz, c                 S   rq   rQ   )reprrs   rQ   rQ   rR   rv     rw   z#net_connections.<locals>.<listcomp>)r   	conn_tmapcopypopr~   joinrX   net_connectionssetr   r	   addrTCP_STATUSESr   r   sconnpconnaddlist)kind_pidcmapfamiliestypesrawlistr{   itemfdfamtype_laddrraddrr.   pidntrQ   rQ   rR   r      s:   



r   c                  C   sT   t  } |  D ]\}}|\}}}}ttdrt|}t||||d| |< q| S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplexr   )rX   net_if_statsitemshasattrr   r   	snicstats)r{   namer   isupduplexspeedmturQ   rQ   rR   r   !  s   

r   c                   C   r   )z:The system boot time expressed in seconds since the epoch.)rX   	boot_timerQ   rQ   rQ   rR   r   1  r   r   c                  C   s\   g } t  }d}|D ]!}|\}}}}}}	|sq
||v rd}t|||||	}
| |
 q
| S )z:Return currently connected users as a list of namedtuples.)z:0.0z:0	localhost)rX   usersr   suserr   )r   r   r   r   r5   ttyhostnametstampuser_processr   r   rQ   rQ   rR   r   6  s   r   c                   C   s   dd t tt D S )z7Returns a list of PIDs currently running on the system.c                 S   s   g | ]
}|  rt|qS rQ   )isdigitrf   rs   rQ   rQ   rR   rv   P  s    zpids.<locals>.<listcomp>)rM   listdirr   r   rQ   rQ   rQ   rR   pidsN     r   c                 C   s
   t | S )z&Check for the existence of a unix pid.)r   
pid_exists)r   rQ   rQ   rR   r   S  s   
r   c                    s   t   fdd}|S )zCall callable into a try/except clause and translate ENOENT,
    EACCES and EPERM in NoSuchProcess or AccessDenied exceptions.
    c              	      s   z | g|R i |W S  t tfy*   t| js!t| j| jt| j| j| j ty7   t	| j| j t
yP   | jdkrOdt v rNt	| j| j  w Nr   )r   r   r   r   r   _namer   _ppidr   r
   r   r   )selfargskwargsfunrQ   rR   wrapper\  s   


z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rQ   r   rR   wrap_exceptionsX  s   r   c                   @   s  e Zd ZdZg dZdd Zdd Zdd Zd	d
 Ze	e
dd Ze	e
dd Ze	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/d0 ZeZe	d1d2 Ze	d3d4 Z e	d5d6 Z!d7d8 Z"e	dHd:d;Z#e$d<d=Z%e$d<d>Z&e	d?d@ Z'e	dAdB Z(e	dCdD Z)e	dIdFdGZ*dES )JProcessz1Wrapper class around underlying C implementation.)r   r   r   _procfs_path_cachec                 C   s   || _ d | _d | _t | _d S N)r   r   r   r   r   )r   r   rQ   rQ   rR   __init__y  s   zProcess.__init__c                 C   s   t d| j| jf  dS )z+Raise NSP if the process disappeared on us.%s/%sN)rM   statr   r   r   rQ   rQ   rR   _assert_alive  s   zProcess._assert_alivec                 C   (   | j |  | j|  | j|  d S r   )_proc_name_and_argscache_activate_proc_basic_info
_proc_credr   rQ   rQ   rR   oneshot_enter     zProcess.oneshot_enterc                 C   r   r   )r   cache_deactivater   r   r   rQ   rQ   rR   oneshot_exit  r   zProcess.oneshot_exitc                 C      t | j| jS r   )rX   proc_name_and_argsr   r   r   rQ   rQ   rR   r        zProcess._proc_name_and_argsc                 C   sT   | j dkrtjd| j| j f st| j t| j | j}t|tt	ks(J |S )Nr   z%s/%s/psinfo)
r   rM   rD   existsr   r
   rX   proc_basic_infolenproc_info_map)r   r{   rQ   rQ   rR   r     s   

zProcess._proc_basic_infoc                 C   r   r   )rX   	proc_credr   r   r   rQ   rQ   rR   r     r   zProcess._proc_credc                 C   s   |   d S r   )r   r   rQ   rQ   rR   r     s   zProcess.namec                 C   s8   zt d| j| jf W S  ty   Y nw |   dS )Nz%s/%s/path/a.outr   )rM   readlinkr   r   r   cmdliner   rQ   rQ   rR   exe  s   zProcess.exec                 C   s   |   d dS )Nr   rH   )r   re   r   rQ   rQ   rR   r        zProcess.cmdlinec                 C   r   r   )rX   proc_environr   r   r   rQ   rQ   rR   r\        zProcess.environc                 C      |   td  S )Nr+   r   r   r   rQ   rQ   rR   r+     r   zProcess.create_timec                 C   r   )Nr-   r   r   rQ   rQ   rR   r-     r   zProcess.num_threadsc                 C   r   )Nr,   r   r   rQ   rQ   rR   nice_get  s   zProcess.nice_getc                 C   s&   | j dv rt| j | jt| j |S )N)r   r   )r   r
   r   
cext_posixsetpriority)r   valuerQ   rQ   rR   nice_set  s   
zProcess.nice_setc                 C   s   |   td  | _| jS )Nr(   )r   r   r   r   rQ   rQ   rR   r(     s   zProcess.ppidc                 C   s^   z|   \}}}}}}W n ty'   |  td  }|  td  }d }Y nw t|||S )Nr0   r1   r   r
   r   r   r   puids)r   real	effectivesaved_rQ   rQ   rR   uids     zProcess.uidsc                 C   s^   z|   \}}}}}}W n ty'   |  td  }|  td  }d }Y nw t|||S )Nr2   r3   r  )r   r	  r  r  r  rQ   rQ   rR   gids  r  zProcess.gidsc              
   C   s\   z
t | j| j}W n ty( } z|jtjkrtsd}n W Y d }~nd }~ww tj	| S )N)        r  r  r  )
rX   proc_cpu_timesr   r   r   errno	EOVERFLOW	IS_64_BITr   r9   )r   timesr   rQ   rQ   rR   r|     s   
zProcess.cpu_timesc                 C   r   r   )rX   proc_cpu_numr   r   r   rQ   rQ   rR   cpu_num  r   zProcess.cpu_numc              	   C   sx   | j }d}t|  td  }|tjkr2dD ]}ztd|| j|f W   S  t	y1   d}Y qw |r:| 
  d S d S )NFr/   )r   r   r      z%s/%d/path/%dT)r   r   r   r   rX   PRNODEVrM   r   r   r   r   )r   procfs_path
hit_enoentr   ru   rQ   rQ   rR   terminal  s$   

zProcess.terminalc                 C   sF   | j }ztd|| jf W S  ty"   td|| jf  Y d S w )Nz%s/%s/path/cwdr   )r   rM   r   r   r   r   )r   r  rQ   rQ   rR   cwd  s   zProcess.cwdc                 C   s2   |   }|td  d }|td  d }t||S )Nr)   i   r*   )r   r   rB   )r   r{   r)   r*   rQ   rQ   rR   memory_info#  s   
zProcess.memory_infoc                 C   s   |   td  }t|dS )Nr.   ?)r   r   PROC_STATUSESget)r   coderQ   rQ   rR   r.   ,  s   zProcess.statusc           
      C   s   | j }g }td|| jf }d}|D ]H}t|}zt| j||\}}W n) tyN } z|jtj	kr;t
s;W Y d }~q|jtjkrId}W Y d }~q d }~ww t|||}	||	 q|rb|   |S )Nz	%s/%d/lwpFT)r   rM   r   r   rf   rX   query_process_threadEnvironmentErrorr  r  r  ENOENTr   pthreadr   r   )
r   r  r{   tidsr  tidutimestimer   r   rQ   rQ   rR   threads2  s0   zProcess.threadsc              	   C   s   g }d}| j }d|| jf }td|| jf D ]1}tj||}tj|rIzt|}W n ty9   d}Y qw t	|rI|
t|t| q|rP|   |S )NFz
%s/%d/pathz%s/%d/fdT)r   r   rM   r   rD   r   islinkr   r   r   r   r   	popenfilerf   r   )r   r   r  r  pathdirr   rD   filerQ   rQ   rR   
open_filesS  s&   zProcess.open_filesc                 c   s(   d| }t j|dt jt jd}| \}}tr#dd ||fD \}}|jdkrJd| v r5t| j| j	d| v rBt
| j| j	td	||f |d
dd }t|D ]:\}}| }|dr|ddd }	||d   }
|
dkr|tj}
n
|
dkrtj}
nd}
dtj|
|	dtjfV  qWdS )z<Get UNIX sockets used by process by parsing 'pfiles' output.z	pfiles %sT)shellrV   rk   c                 S   s   g | ]	}| tjjqS rQ   )r_   r`   rV   ra   rs   rQ   rQ   rR   rv   q  s    z-Process._get_unix_sockets.<locals>.<listcomp>r   zpermission deniedzno such processz%r command error
%srW   r   Nzsockname: AF_UNIXrH   SOCK_STREAM
SOCK_DGRAMr   r   )rZ   r[   r]   r^   r   rb   lowerr
   r   r   r   rc   re   	enumeratelstrip
startswithrd   socketr/  r0  AF_UNIXr   	CONN_NONE)r   r   cmdrj   rV   rk   rl   irm   rD   typerQ   rQ   rR   _get_unix_socketsh  s<   


zProcess._get_unix_socketsinetc                 C   sP   t || jd}|std| j| jf  |dv r&|dd | | jD  |S )N)r   r   )r   r   c                 S   s   g | ]}t j| qS rQ   )r   r   )rt   connrQ   rQ   rR   rv     s    z'Process.connections.<locals>.<listcomp>)r   r   rM   r   r   extendr;  )r   r   r{   rQ   rQ   rR   connections  s   

zProcess.connectionsmmapzpath rss anon lockedzaddr perms path rss anon lockedc                 C   s  dd }| j }g }z	t| j|}W n ty/ } z|jtjkr*ts*g W  Y d }~S  d }~ww d}|D ]R}|\}}	}
}}}}|||	}|ds{zt	
d|| j|f }W n$ tyz } z|jtjkrod|| j|f }d}n W Y d }~nd }~ww |||
||||f q4|r|   |S )Nc                 S   s0   dt | dd  dt |dd  df S )Nz%s-%sr   L)hexrd   )startendrQ   rQ   rR   toaddr  s   z#Process.memory_maps.<locals>.toaddrF[z%s/%s/path/%sT)r   rX   proc_memory_mapsr   r   r  r  r  r4  rM   r   r"  r   r   )r   rE  r  r   r   r   r  r   r   addrsizepermr   r)   anonrF   rQ   rQ   rR   memory_maps  s@   

zProcess.memory_mapsc                 C   s   t td| j| jf S )Nz%s/%s/fd)r   rM   r   r   r   r   rQ   rQ   rR   num_fds  r   zProcess.num_fdsc                 C   s   t jt| j| j S r   )r   pctxswrX   proc_num_ctx_switchesr   r   r   rQ   rQ   rR   num_ctx_switches  s   zProcess.num_ctx_switchesNc                 C   s   t | j|| jS r   )r   wait_pidr   r   )r   timeoutrQ   rQ   rR   wait  r   zProcess.wait)r<  r   )+__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r   r   r   r   r   r\   r+   r-   r   r  r(   r
  r  r|   r  r  r  r  memory_full_infor.   r(  r-  r;  r?  r   nt_mmap_groupednt_mmap_extrK  rL  rO  rR  rQ   rQ   rQ   rR   r   t  s    







	

	
	






 
 


.

r   )F)r   )srV  r  r   rM   r5  rZ   r`   collectionsr   r   r   r   r   r   r   r   rX   r	   r
   r   r   r   r   r   r   r   r   r   _compatr   r   r   r   r   __extra__all__getpagesizerO   AF_LINKmaxsizer  r   r   SSLEEPSTATUS_SLEEPINGSRUNSTATUS_RUNNINGSZOMBSTATUS_ZOMBIESSTOPSTATUS_STOPPEDSIDLSTATUS_IDLESONPROCSWAITSTATUS_WAITINGr  TCPS_ESTABLISHEDCONN_ESTABLISHEDTCPS_SYN_SENTCONN_SYN_SENTTCPS_SYN_RCVD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_NONEr7  	TCPS_IDLE
TCPS_BOUNDr   dictr   r4   r9   r<   rB   pfullmemrC   r   _fieldsrG   rS   rp   r|   rx   r   r   r   disk_io_countersr   r   net_io_countersnet_if_addrsr   r   r   r   r   r   r   objectr   rQ   rQ   rQ   rR   <module>   s   
	&	
!
%