<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZ2d                 @   s
  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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dgZejd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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<ej=e
j>ej?e
j@ejAe
jBejCe
jDejEe
jFejGe
jHejIe
jJejKe#ejLe$iZMeNddddddd d!d"ZOed#d$d%d&d'gZPed(d$d%d)d*gZQed+d,d-d.d/d0gZRed1d2d3gZSeSZTed4d5d2d6d7gZUed8d9d:jVeUjW ZXd;d< ZYd=d> ZZd?d@ Z[dAdB Z\dCdD Z]dEdF Z^dGdH Z_dIdJ Z`ejaZaejbZbd_dLdMZcejdZdejeZedadNdOZfdPdQ ZgdRdS ZhdTdU ZidVdW ZjdXdY ZkdZd[ ZlG d\d] d]emZndS )bz'Sun OS Solaris platform implementation.    N)
namedtuple)AF_INET   )_common)_psposix)_psutil_posix)_psutil_sunos)AF_INET6)isfile_strict)memoize_when_activated)sockfam_to_enum)socktype_to_enum)usage_percent)b)PY3)AccessDenied)NoSuchProcess)ZombieProcess	CONN_IDLE
CONN_BOUNDPROCFS_PATHSC_PAGE_SIZE       ZIDLEZBOUND               )ppidrssvmscreate_timenicenum_threadsstatusttynr	scputimesusersystemZidleZiowait	pcputimeschildren_userchildren_systemsvmemtotalZ	availablepercentusedfreepmemr    r!   pmmap_groupedpathZ	anonymouslocked	pmmap_extzaddr perms  c               C   s   t jd jS )z+Return updated psutil.PROCFS_PATH constant.Zpsutil)sysmodulesr    r:   r:    /usr/lib64/python3.6/_pssunos.pyget_procfs_pathq   s    r<   c              C   sF   t jdt } t j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.   r1   Zavailr0   r/   r:   r:   r;   virtual_memory{   s
    rC   c              C   s  t j \} }tjddtjd  ddgtjd}|j \}}trL|j	t
jj}|jdkrdtd|j |j jd	d
d }|stdd }}xL|D ]D}|j }|dd \}	}
|tt|	d 7 }|tt|
d 7 }qW || }t||d
d}tj||||| t |t S )zReport swap memory metrics.z/usr/bin/envzPATH=/usr/sbin:/sbin:%sPATHZswapz-l)stdoutr   z'swap -l' failed (retcode=%s)
r   Nzno swap device(s) configuredr   i   )r?   )cextZswap_mem
subprocessPopenr@   environPIPEcommunicater   decoder8   rE   encoding
returncodeRuntimeErrorstripsplitintr   r   ZsswaprB   )ZsinZsoutprE   stderrlinesr.   r1   linetfr0   r/   r:   r:   r;   swap_memory   s,    


r[   c              C   s   t j } tdd t|  D  S )z-Return system-wide CPU times as a named tuplec             S   s   g | ]}t |qS r:   )sum).0xr:   r:   r;   
<listcomp>   s    zcpu_times.<locals>.<listcomp>)rH   per_cpu_timesr'   zip)retr:   r:   r;   	cpu_times   s    rc   c              C   s   t j } dd | D S )z5Return system per-CPU times as a list of named tuplesc             S   s   g | ]}t | qS r:   )r'   )r]   r^   r:   r:   r;   r_      s    z!per_cpu_times.<locals>.<listcomp>)rH   r`   )rb   r:   r:   r;   r`      s    r`   c               C   s$   y
t jdS  tk
r   dS X dS )z0Return the number of logical CPUs in the system.SC_NPROCESSORS_ONLNN)r@   rA   
ValueErrorr:   r:   r:   r;   cpu_count_logical   s    
rf   c               C   s   t j S )z1Return the number of physical CPUs in the system.)rH   Zcpu_count_physr:   r:   r:   r;   cpu_count_physical   s    rg   c              C   s$   t j \} }}}d}tj| |||S )z*Return various CPU stats as a named tuple.r   )rH   	cpu_statsr   Z	scpustats)Zctx_switchesZ
interruptsZsyscallsZtrapsZsoft_interruptsr:   r:   r;   rh      s    
rh   Fc       	      C   s`   g }t j }xN|D ]F}|\}}}}|dkr.d}| s>t|js>qtj||||}|j| qW |S )zReturn system disk partitions.Znone )rH   disk_partitions
disk_usager.   r   Z	sdiskpartappend)	allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeZoptsZntupler:   r:   r;   rj      s    

rj   c          	   C   s  t jj }|dkr|jdd | |krFtd| djdd |D f t j|  \}}tj|}t }x|D ]}|\}}	}
}}}}|	|krqj|
|krqj|	t	t
fkr|rt j| }|rt j| }t| }t|	}	t|
}
|d	krt j||	|
||||}nt j||	|
|||}|j| qjW t|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   s   g | ]}t |qS r:   )repr)r]   r^   r:   r:   r;   r_      s    z#net_connections.<locals>.<listcomp>rr   )r   Z	conn_tmapcopypopre   joinrH   net_connectionssetr   r	   addrTCP_STATUSESr   r   Zsconnpconnaddlist)kind_pidZcmapZfamiliestypesrawlistrb   itemfdZfamZtype_ZladdrZraddrr%   pidntr:   r:   r;   rv      s8    




rv   c              C   sV   t j } xH| j D ]<\}}|\}}}}ttdr:tj|}tj||||| |< qW | S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex)rH   net_if_statsitemshasattrr   r   Z	snicstats)rb   namer   ZisupZduplexZspeedZmtur:   r:   r;   r     s    

r   c               C   s   t j S )z:The system boot time expressed in seconds since the epoch.)rH   	boot_timer:   r:   r:   r;   r   )  s    r   c              C   s`   g } t j }d}xJ|D ]B}|\}}}}}}	|s0q||kr<d}tj|||||	}
| j|
 qW | S )z:Return currently connected users as a list of namedtuples.:0.0:0	localhost)r   r   )rH   usersr   Zsuserrl   )rn   r   r   r   r(   ttyZhostnameZtstampZuser_processr   r   r:   r:   r;   r   .  s    
r   c               C   s   dd t jtt D S )z7Returns a list of PIDs currently running on the system.c             S   s   g | ]}|j  rt|qS r:   )isdigitrT   )r]   r^   r:   r:   r;   r_   H  s    zpids.<locals>.<listcomp>)r@   listdirr   r<   r:   r:   r:   r;   pidsF  s    r   c             C   s
   t j| S )z&Check for the existence of a unix pid.)r   
pid_exists)r   r:   r:   r;   r   K  s    r   c                s    fdd}|S )zCall callable into a try/except clause and translate ENOENT,
    EACCES and EPERM in NoSuchProcess or AccessDenied exceptions.
    c                s   y | f||S  t k
r } z| jdkrHdt krFt| j| jn |jtjtjfkrt| jstt	| j| jnt
| j| j| j|jtjtjfkrt| j| j W Y d d }~X nX d S )Nr   )EnvironmentErrorr   r   r   _nameerrnoENOENTESRCHr   r   r   _ppidZEPERMZEACCES)selfargskwargserr)funr:   r;   wrapperU  s    


z wrap_exceptions.<locals>.wrapperr:   )r   r   r:   )r   r;   wrap_exceptionsP  s    r   c               @   s  e Zd ZdZddddgZ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- Zed.d/ Zed0d1 ZeZed2d3 Zed4d5 Zed6d7 Z d8d9 Z!edId;d<Z"e#d=d>Z$e#d=d?Z%ed@dA Z&edBdC Z'edDdE Z(edJdGdHZ)dFS )KProcessz1Wrapper class around underlying C implementation.r   r   r   _procfs_pathc             C   s   || _ d | _d | _t | _d S )N)r   r   r   r<   r   )r   r   r:   r:   r;   __init__q  s    zProcess.__init__c             C   s"   | j j  | jj  | jj  d S )N)_proc_name_and_argsZcache_activate_proc_basic_info
_proc_cred)r   r:   r:   r;   oneshot_enterw  s    

zProcess.oneshot_enterc             C   s"   | j j  | jj  | jj  d S )N)r   Zcache_deactivater   r   )r   r:   r:   r;   oneshot_exit|  s    

zProcess.oneshot_exitc             C   s   t j| j| jS )N)rH   Zproc_name_and_argsr   r   )r   r:   r:   r;   r     s    zProcess._proc_name_and_argsc             C   s(   t j| j| j}t|ttks$t|S )N)rH   Zproc_basic_infor   r   lenproc_info_mapAssertionError)r   rb   r:   r:   r;   r     s    zProcess._proc_basic_infoc             C   s   t j| j| jS )N)rH   Z	proc_credr   r   )r   r:   r:   r;   r     s    zProcess._proc_credc             C   s   | j  d S )Nr   )r   )r   r:   r:   r;   r     s    zProcess.namec             C   s8   yt jd| j| jf S  tk
r*   Y nX | j  dS )Nz%s/%s/path/a.outri   )r@   readlinkr   r   OSErrorcmdline)r   r:   r:   r;   exe  s    zProcess.exec             C   s   | j  d jdS )Nr   r7   )r   rS   )r   r:   r:   r;   r     s    zProcess.cmdlinec             C   s   t j| j| jS )N)rH   Zproc_environr   r   )r   r:   r:   r;   rK     s    zProcess.environc             C   s   | j  td  S )Nr"   )r   r   )r   r:   r:   r;   r"     s    zProcess.create_timec             C   s   | j  td  S )Nr$   )r   r   )r   r:   r:   r;   r$     s    zProcess.num_threadsc             C   sb   yt j| jS  tk
r\ } z4|jtjtjdfkrJt| jrJt| j| j	 W Y d d }~X nX d S )N0   )

cext_posixgetpriorityr   r   r   r   r   r   r   r   )r   r   r:   r:   r;   nice_get  s    
zProcess.nice_getc             C   s&   | j dkrt| j | jtj| j |S )Nr   r   )r   r   )r   r   r   r   setpriority)r   valuer:   r:   r;   nice_set  s    
zProcess.nice_setc             C   s   | j  td  | _| jS )Nr   )r   r   r   )r   r:   r:   r;   r     s    zProcess.ppidc             C   s"   | j  \}}}}}}tj|||S )N)r   r   puids)r   real	effectivesaved_r:   r:   r;   uids  s    zProcess.uidsc             C   s"   | j  \}}}}}}tj|||S )N)r   r   r   )r   r   r   r   r   r:   r:   r;   gids  s    zProcess.gidsc             C   s\   yt j| j| j}W n< tk
rP } z |jtjkr>t r>d}n W Y d d }~X nX tj	| S )N        )r   r   r   r   )
rH   Zproc_cpu_timesr   r   r   r   	EOVERFLOW	IS_64_BITr   r*   )r   timesr   r:   r:   r;   rc     s    zProcess.cpu_timesc             C   s   t j| j| jS )N)rH   Zproc_cpu_numr   r   )r   r:   r:   r;   cpu_num  s    zProcess.cpu_numc             C   s   | j }d}t| j td  }|tjkrxZd
D ]R}ytjd|| j|f S  t	k
r~ } z|j
t
jkrld}w. W Y d d }~X q.X q.W |rtjd	|| jf  d S )NFr&   r   r   r      z%s/%d/path/%dTz%s/%s)r   r   r   r   )r   r   r   r   rH   ZPRNODEVr@   r   r   r   r   r   stat)r   procfs_path
hit_enoentr   r^   r   r:   r:   r;   terminal  s     

zProcess.terminalc             C   sh   | j }ytjd|| jf S  tk
rb } z,|jtjkrPtjd|| jf  d S  W Y d d }~X nX d S )Nz%s/%s/path/cwdz%s/%s)r   r@   r   r   r   r   r   r   )r   r   r   r:   r:   r;   cwd  s    zProcess.cwdc             C   s2   | j  }|td  d }|td  d }t||S )Nr    i   r!   )r   r   r2   )r   rb   r    r!   r:   r:   r;   memory_info  s    zProcess.memory_infoc             C   s   | j  td  }tj|dS )Nr%   ?)r   r   PROC_STATUSESget)r   coder:   r:   r;   r%   $  s    zProcess.statusc       
      C   s   | j }g }tjd|| jf }d}x|D ]}t|}ytj| j||\}}W nJ tk
r } z.|jtj	krrt
 rrw(|jtjkrd}w( W Y d d }~X q(X tj|||}	|j|	 q(W |rtjd|| jf  |S )Nz	%s/%d/lwpFTz%s/%s)r   r@   r   r   rT   rH   Zquery_process_threadr   r   r   r   r   r   Zpthreadrl   r   )
r   r   rb   Ztidsr   tidutimeZstimer   r   r:   r:   r;   threads*  s*    
zProcess.threadsc       	      C   s   g }d}| j }d|| jf }xtjd|| jf D ]}tjj||}tjj|r2ytj|}W n6 tk
r } z|j	t	j
krd}w2 W Y d d }~X q2X t|r2|jtj|t| q2W |rtjd|| jf  |S )NFz
%s/%d/pathz%s/%d/fdTz%s/%s)r   r   r@   r   r4   ru   islinkr   r   r   r   r
   rl   r   Z	popenfilerT   r   )	r   rn   r   r   Zpathdirr   r4   filer   r:   r:   r;   
open_filesL  s&    zProcess.open_filesc             c   s,  d| }t j|dt jt jd}|j \}}trDdd ||fD \}}|jdkrd|j krht| j| j	d|j krt
| j| j	td	||f |jd
dd }xt|D ]v\}}|j }|jdr|jddd }	||d  j }
|
dkrtj}
n|
dkr
tj}
nd}
dtj|
|	dtjfV  qW dS )z<Get UNIX sockets used by process by parsing 'pfiles' output.z	pfiles %sT)shellrE   rV   c             S   s   g | ]}|j tjjqS r:   )rN   r8   rE   rO   )r]   r^   r:   r:   r;   r_   n  s   z-Process._get_unix_sockets.<locals>.<listcomp>r   zpermission deniedzno such processz%r command error
%srF   r   Nzsockname: AF_UNIXr7   SOCK_STREAM
SOCK_DGRAMr   ri   rr   rr   )rI   rJ   rL   rM   r   rP   lowerr   r   r   r   rQ   rS   	enumeratelstrip
startswithrR   socketr   r   ZAF_UNIXr   	CONN_NONE)r   r   cmdrU   rE   rV   rW   irX   r4   typer:   r:   r;   _get_unix_socketse  s2    



zProcess._get_unix_socketsinetc             C   sP   t || jd}|s(tjd| j| jf  |dkrL|jdd | j| jD  |S )N)r~   z%s/%srm   rp   c             S   s   g | ]}t j| qS r:   )r   rz   )r]   Zconnr:   r:   r;   r_     s    z'Process.connections.<locals>.<listcomp>)rm   rp   )rv   r   r@   r   r   extendr   )r   r}   rb   r:   r:   r;   connections  s    
zProcess.connectionsZmmapzpath rss anon lockedzaddr perms path rss anon lockedc          $   C   s.  dd }| j }g }ytj| j|}W n: tk
r^ } z|jtjkrLt rLg S  W Y d d }~X nX d}x|D ]}|\}}	}
}}}}|||	}|jdsyt	j
d|| j|f }W nF tk
r } z*|jtjkrd|| j|f }d}n W Y d d }~X nX |j||
||||f qjW |r*t	jd|| jf  |S )Nc             S   s0   dt | dd  jdt |dd  jdf S )Nz%s-%sr   L)hexrR   )startendr:   r:   r;   toaddr  s    z#Process.memory_maps.<locals>.toaddrF[z%s/%s/path/%sTz%s/%s)r   rH   Zproc_memory_mapsr   r   r   r   r   r   r@   r   r   rl   r   )r   r   r   rn   r   r   r   r   rx   ZaddrsizeZpermr   r    Zanonr5   r:   r:   r;   memory_maps  s4    


zProcess.memory_mapsc             C   s   t tjd| j| jf S )Nz%s/%s/fd)r   r@   r   r   r   )r   r:   r:   r;   num_fds  s    zProcess.num_fdsc             C   s   t jtj| j| j S )N)r   ZpctxswrH   Zproc_num_ctx_switchesr   r   )r   r:   r:   r;   num_ctx_switches  s    zProcess.num_ctx_switchesNc             C   s   t j| j|| jS )N)r   Zwait_pidr   r   )r   Ztimeoutr:   r:   r;   wait  s    zProcess.wait)r   )N)*__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r   r   r   r   rK   r"   r$   r   r   r   r   r   rc   r   r   r   r   Zmemory_full_infor%   r   r   r   r   r   Znt_mmap_groupedZnt_mmap_extr   r   r   r   r:   r:   r:   r;   r   l  sL   
" 

0r   l        )Frr   )rr   )or   r   r@   r   rI   r8   collectionsr   r   ri   r   r   r   r   r   rH   r	   r
   r   r   r   r   Z_compatr   r   _exceptionsr   r   r   Z__extra__all__rA   rB   ZAF_LINKmaxsizer   r   r   ZSSLEEPZSTATUS_SLEEPINGZSRUNZSTATUS_RUNNINGZSZOMBZSTATUS_ZOMBIEZSSTOPZSTATUS_STOPPEDZSIDLZSTATUS_IDLEZSONPROCZSWAITZSTATUS_WAITINGr   ZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZTCPS_SYN_SENTZCONN_SYN_SENTZTCPS_SYN_RCVDZ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_NONEr   Z	TCPS_IDLEZ
TCPS_BOUNDry   dictr   r'   r*   r-   r2   Zpfullmemr3   ru   _fieldsr6   r<   rC   r[   rc   r`   rf   rg   rh   Zdisk_io_countersrk   rj   Znet_io_countersZnet_if_addrsrv   r   r   r   r   r   r   objectr   r:   r:   r:   r;   <module>   s   



	
&	

$