o
    hXa                     @   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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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 d!d"d#d$ZOed%g d&ZPed'g d(ZQed)g d*ZRed+d,d-gZSeSZTed.g d/ZUed0d1d2VeUjW ZXd3d4 ZYd5d6 ZZd7d8 Z[d9d: Z\d;d< Z]d=d> Z^d?d@ Z_ej`Z`ejaZadUdBdCZbejcZcejdZddVdEdFZedGdH ZfdIdJ ZgdKdL ZhdMdN ZidOdP ZjdQdR ZkG dSdT dTZldS )Wz'Sun OS Solaris platform implementation.    N)
namedtuple)AF_INET   )_common)_psposix)_psutil_posix)_psutil_sunos)AF_INET6)ENCODING)AccessDenied)NoSuchProcess)ZombieProcess)debug)get_procfs_path)isfile_strict)memoize_when_activated)sockfam_to_enum)socktype_to_enum)usage_percent)	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)r1   r2   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   r8   )r9   r=   availr<   r;    rM   C/var/www/vscode/kcb/lib/python3.10/site-packages/psutil/_pssunos.pyvirtual_memory{   s
   rO   c               	   C   s  t  \} }tjddtjd  ddgtjd}| \}}|t	j
j}|jdkr5d|j d	}t|| d
dd }|sHd}t|d }}|D ]"}	|	 }	|	dd \}
}|tt|
d 7 }|tt|d 7 }qN|| }t||dd}t||||| t |t S )zReport swap memory metrics.z/usr/bin/envzPATH=/usr/sbin:/sbin:PATHswapz-l)stdoutr   z'swap -l' failed (retcode=)
r   Nzno swap device(s) configuredr   r   i   rG   )cextswap_mem
subprocessPopenrI   environPIPEcommunicatedecodesysrR   encoding
returncodeRuntimeErrorstripsplitintr   r   sswaprK   )sinsoutprR   _msglinesr9   r=   linetfr<   r;   rM   rM   rN   swap_memory   s:   	
rn   c                  C   s   t  } tdd t|  D  S )z.Return system-wide CPU times as a named tuple.c                 S   s   g | ]}t |qS rM   )sum.0xrM   rM   rN   
<listcomp>       zcpu_times.<locals>.<listcomp>)rU   per_cpu_timesr0   zipretrM   rM   rN   	cpu_times   s   ry   c                  C   s   t  } dd | D S )z6Return system per-CPU times as a list of named tuples.c                 S   s   g | ]}t | qS rM   )r0   rp   rM   rM   rN   rs      rt   z!per_cpu_times.<locals>.<listcomp>)rU   ru   rw   rM   rM   rN   ru      s   ru   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)rI   rJ   
ValueErrorrM   rM   rM   rN   cpu_count_logical   s
   r|   c                   C      t  S )z-Return the number of CPU cores in the system.)rU   cpu_count_coresrM   rM   rM   rN   r~         r~   c                  C   s$   t  \} }}}d}t| |||S )z*Return various CPU stats as a named tuple.r   )rU   	cpu_statsr   	scpustats)ctx_switches
interruptssyscalls_trapssoft_interruptsrM   rM   rN   r      s
   r   Fc           
      C   s   g }t  }|D ]C}|\}}}}|dkrd}| s>z	t|js W qW n ty= } ztd|d|  W Y d}~qd}~ww t||||}	||	 q|S )zReturn system disk partitions.none z	skipping z: N)	rU   disk_partitions
disk_usager9   OSErrorr   r   	sdiskpartappend)
allretlist
partitions	partitiondevice
mountpointfstypeoptserrntuplerM   rM   rN   r      s&   
r   c              
   C   s   t j|  \}}t|}t }|D ]T}|\}}}	}
}}}||vr!q|	|vr&q|tthv r:|
r3t j|
 }
|r:t j| }t| }t	|}t
|	}	|dkrVt |||	|
|||}n
t |||	|
||}|| q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   )r   	conn_tmaprU   net_connectionssetr   r	   addrTCP_STATUSESr   r   sconnpconnaddlist)kind_pidfamiliestypesrawlistrx   itemfdfamtype_laddrraddrr*   pidntrM   rM   rN   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   )rU   net_if_statsitemshasattrr   r   	snicstats)rx   namer   isupduplexspeedmturM   rM   rN   r   "  s   

r   c                   C   r}   )z:The system boot time expressed in seconds since the epoch.)rU   	boot_timerM   rM   rM   rN   r   2  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)rU   usersr   suserr   )r   r   r   r   r1   ttyhostnametstampuser_processr   r   rM   rM   rN   r   7  s   r   c                  C   s    t  t} dd t| D S )z7Returns a list of PIDs currently running on the system.c                 S   s   g | ]
}|  rt|qS rM   )isdigitrc   rp   rM   rM   rN   rs   R  s    zpids.<locals>.<listcomp>)r   encoder
   rI   listdir)r@   rM   rM   rN   pidsO  s   r   c                 C   s
   t | S )z&Check for the existence of a unix pid.)r   
pid_exists)r   rM   rM   rN   r   U  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   | j | j| j}}}z | g|R i |W S  ttfy6 } zt|s+t|||t||||d }~w tyG } zt	|||d }~w t
yc } z|dkr^dt v r]t	|||  d }~ww Nr   )r   _ppid_nameFileNotFoundErrorProcessLookupErrorr   r   r   PermissionErrorr   r   r   )selfargskwargsr   r$   r   r   funrM   rN   wrapper_  s&   
z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rM   r   rN   wrap_exceptionsZ  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.)_cacher   r   _procfs_pathr   c                 C   s   || _ d | _d | _t | _d S N)r   r   r   r   r   )r   r   rM   rM   rN   __init__|  s   zProcess.__init__c                 C   s   t | j d| j  dS )z+Raise NSP if the process disappeared on us./N)rI   statr   r   r   rM   rM   rN   _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   rM   rM   rN   oneshot_enter     zProcess.oneshot_enterc                 C   r   r   )r   cache_deactivater   r   r   rM   rM   rN   oneshot_exit  r   zProcess.oneshot_exitc                 C      t | j| jS r   )rU   proc_name_and_argsr   r   r   rM   rM   rN   r        zProcess._proc_name_and_argsc                 C   sX   | j dkrtj| j d| j  dst| j t| j | j}t|tt	ks*J |S )Nr   r   z/psinfo)
r   rI   r@   existsr   r   rU   proc_basic_infolenproc_info_map)r   rx   rM   rM   rN   r     s   
zProcess._proc_basic_infoc                 C   r   r   )rU   	proc_credr   r   r   rM   rM   rN   r     r   zProcess._proc_credc                 C   s   |   d S r   )r   r   rM   rM   rN   r     s   zProcess.namec                 C   s<   zt | j d| j dW S  ty   Y nw |   dS )Nr   z/path/a.outr   )rI   readlinkr   r   r   cmdliner   rM   rM   rN   exe  s   zProcess.exec                 C   s   |   d dS )Nr   rD   )r   rb   r   rM   rM   rN   r        zProcess.cmdlinec                 C   r   r   )rU   proc_environr   r   r   rM   rM   rN   rY        zProcess.environc                 C      |   td  S )Nr'   r   r   r   rM   rM   rN   r'     r   zProcess.create_timec                 C   r   )Nr)   r   r   rM   rM   rN   r)     r   zProcess.num_threadsc                 C   r   )Nr(   r   r   rM   rM   rN   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   valuerM   rM   rN   nice_set  s   
zProcess.nice_setc                 C   s   |   td  | _| jS )Nr$   )r   r   r   r   rM   rM   rN   r$     s   zProcess.ppidc                 C   s^   z|   \}}}}}}W n ty'   |  td  }|  td  }d }Y nw t|||S )Nr,   r-   r   r   r   r   r   puids)r   real	effectivesavedrh   rM   rM   rN   uids     zProcess.uidsc                 C   s^   z|   \}}}}}}W n ty'   |  td  }|  td  }d }Y nw t|||S )Nr.   r/   r   )r   rh   r   r   r   rM   rM   rN   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  )
rU   proc_cpu_timesr   r   r   errno	EOVERFLOW	IS_64_BITr   r5   )r   timesr   rM   rM   rN   ry     s   
zProcess.cpu_timesc                 C   r   r   )rU   proc_cpu_numr   r   r   rM   rM   rN   cpu_num  r   zProcess.cpu_numc              	   C   s~   | j }d}t|  td  }|tjkr5dD ]}zt| d| j d| W   S  t	y4   d}Y qw |r=| 
  d S d S )NFr+   )r   r   r      r   /path/T)r   r   r   r   rU   PRNODEVrI   r   r   r   r   )r   procfs_path
hit_enoentr   rr   rM   rM   rN   terminal  s   
"zProcess.terminalc                 C   sL   | j }zt| d| j dW S  ty%   t| d| j  Y dS w )Nr   z	/path/cwdr   )r   rI   r   r   r   r   )r   r  rM   rM   rN   cwd  s   zProcess.cwdc                 C   s2   |   }|td  d }|td  d }t||S )Nr%   i   r&   )r   r   r>   )r   rx   r%   r&   rM   rM   rN   memory_info$  s   
zProcess.memory_infoc                 C   s   |   td  }t|dS )Nr*   ?)r   r   PROC_STATUSESget)r   coderM   rM   rN   r*   -  s   zProcess.statusc           
      C   s   | j }g }t| d| j d}d}|D ]H}t|}zt| j||\}}W n) tyP } z|jtj	kr=t
s=W Y d }~q|jtjkrKd}W Y d }~q d }~ww t|||}	||	 q|rd|   |S )Nr   z/lwpFT)r   rI   r   r   rc   rU   query_process_threadr   r  r  r  ENOENTr   pthreadr   r   )
r   r  rx   tidsr  tidutimestimer   r   rM   rM   rN   threads3  s0   zProcess.threadsc              	   C   s   g }d}| j }| d| j d}t| d| j dD ]1}tj||}tj|rMzt|}W n ty=   d}Y qw t	|rM|
t|t| q|rT|   |S )NFr   z/path/fdT)r   r   rI   r   r@   joinislinkr   r   r   r   r   	popenfilerc   r   )r   r   r  r  pathdirr   r@   filerM   rM   rN   
open_filesU  s&   zProcess.open_filesc                 c   s,   dt |g}tj|tjtjd}| \}}dd ||fD \}}|jdkrLd| v r4t| j| j	d| v rAt
| j| j	|d| }t||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  qYdS )z<Get UNIX sockets used by process by parsing 'pfiles' output.pfiles)rR   stderrc                 s   s    | ]
}| tjjV  qd S r   )r\   r]   rR   r^   rp   rM   rM   rN   	<genexpr>s  s    
z,Process._get_unix_sockets.<locals>.<genexpr>r   zpermission deniedzno such processz command error
rT   r   Nzsockname: AF_UNIXrD   SOCK_STREAM
SOCK_DGRAMr   r   )strrW   rX   rZ   r[   r_   lowerr   r   r   r   r`   rb   	enumeratelstrip
startswithra   socketr*  r+  AF_UNIXr   	CONN_NONE)r   r   cmdrg   rR   r(  ri   rj   irk   r@   typerM   rM   rN   _get_unix_socketsj  s<   



zProcess._get_unix_socketsinetc                 C   sR   t || jd}|st| j d| j  |dv r'|dd | | jD  |S )N)r   r   >   r   unixc                 S   s   g | ]}t j| qS rM   )r   r   )rq   connrM   rM   rN   rs     s    z+Process.net_connections.<locals>.<listcomp>)r   r   rI   r   r   extendr7  )r   r   rx   rM   rM   rN   r     s   

zProcess.net_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 ]X}|\}}	}
}}}}|||	}|dszt	
| d| j d| }W n' ty } z|jtjkru| d| j d| }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S )Nz{}-{}r   L)formathexra   )startendrM   rM   rN   toaddr  s   (z#Process.memory_maps.<locals>.toaddrF[r   r  T)r   rU   proc_memory_mapsr   r   r  r  r  r0  rI   r   r  r   r   )r   rB  r  r   r   r   r  r   r   addrsizepermr   r%   anonrB   rM   rM   rN   memory_maps  s<   

 zProcess.memory_mapsc                 C   s   t t| j d| j dS )Nr   r   )r   rI   r   r   r   r   rM   rM   rN   num_fds  s   zProcess.num_fdsc                 C   s   t jt| j| j S r   )r   pctxswrU   proc_num_ctx_switchesr   r   r   rM   rM   rN   num_ctx_switches  s   zProcess.num_ctx_switchesNc                 C   s   t | j|| jS r   )r   wait_pidr   r   )r   timeoutrM   rM   rN   wait  r   zProcess.wait)r8  r   )+__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r   r   r   r   r   rY   r'   r)   r   r   r$   r  r  ry   r  r  r  r  memory_full_infor*   r  r&  r7  r   r   nt_mmap_groupednt_mmap_extrH  rI  rL  rO  rM   rM   rM   rN   r   w  s    	







	

	
	






!
"


.

r   )F)r   )mrS  r  r   rI   r1  rW   r]   collectionsr   r   r   r   r   r   r   r   rU   r	   r
   r   r   r   r   r   r   r   r   r   r   __extra__all__getpagesizerK   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_NONEr3  	TCPS_IDLE
TCPS_BOUNDr   dictr   r0   r5   r8   r>   pfullmemr?   r!  _fieldsrC   rO   rn   ry   ru   r|   r~   r   disk_io_countersr   r   net_io_countersnet_if_addrsr   r   r   r   r   r   r   r   rM   rM   rM   rN   <module>   s   

.	

