U
    !h]a                     @   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 dddg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'd(d)d*d+gZPed,d(d)d-d.gZQed/d0d1d2d3d4gZRed5d6d7gZSeSZTed8d9d6d:d;gZUed<d=d>VeUjW ZXd?d@ ZYdAdB ZZdCdD Z[dEdF Z\dGdH Z]dIdJ Z^dKdL Z_ej`Z`ejaZadadNdOZbejcZcejdZddbdQdRZedSdT ZfdUdV ZgdWdX ZhdYdZ Zid[d\ Zjd]d^ ZkG d_d` d`ZldS )cz'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_BOUNDZPROCFS_PATHl        ZIDLEZBOUND                     	   
      )ppidrssvmscreate_timenicenum_threadsstatusttynruideuidgidegid	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   sF   t dt } t dt  }}| | }t|| dd}t| ||||S )zReport virtual memory metrics.SC_PHYS_PAGESSC_AVPHYS_PAGESr   Zround_)ossysconf	PAGE_SIZEr   r3   )r4   r7   Zavailr6   r5    rD   5./venv/lib/python3.8/site-packages/psutil/_pssunos.pyvirtual_memoryz   s
    rF   c               	   C   s  t  \} }tjddtjd  ddgtjd}| \}}|t	j
j}|jdkrjd|j d	}t|| d
dd }|sd}t|d }}|D ]D}	|	 }	|	dd \}
}|tt|
d 7 }|tt|d 7 }q|| }t||dd}t||||| t |t S )zReport swap memory metrics.z/usr/bin/envzPATH=/usr/sbin:/sbin:PATHZswapz-l)stdoutr   z'swap -l' failed (retcode=)
r   Nzno swap device(s) configuredr   r   i   r@   )cextZswap_mem
subprocessPopenrA   environPIPEcommunicatedecodesysrH   encoding
returncodeRuntimeErrorstripsplitintr   r   ZsswaprC   )ZsinZsoutprH   _msglinesr4   r7   linetfr6   r5   rD   rD   rE   swap_memory   sD    	
     r`   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 rD   )sum.0xrD   rD   rE   
<listcomp>   s     zcpu_times.<locals>.<listcomp>)rK   per_cpu_timesr-   zipretrD   rD   rE   	cpu_times   s    rj   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 rD   )r-   rb   rD   rD   rE   re      s     z!per_cpu_times.<locals>.<listcomp>)rK   rf   rh   rD   rD   rE   rf      s    rf   c                   C   s(   zt dW S  tk
r"   Y dS X dS )z0Return the number of logical CPUs in the system.SC_NPROCESSORS_ONLNN)rA   rB   
ValueErrorrD   rD   rD   rE   cpu_count_logical   s    rm   c                   C   s   t  S )z-Return the number of CPU cores in the system.)rK   cpu_count_coresrD   rD   rD   rE   rn      s    rn   c                  C   s$   t  \} }}}d}t| |||S )z*Return various CPU stats as a named tuple.r   )rK   	cpu_statsr   Z	scpustats)Zctx_switchesZ
interruptsZsyscallsZ_trapsZsoft_interruptsrD   rD   rE   ro      s       ro   Fc           
      C   s   g }t  }|D ]}|\}}}}|dkr,d}| szt|js@W qW n> tk
r } z td|d|  W Y qW 5 d}~X Y nX t||||}	||	 q|S )zReturn system disk partitions.Znone z	skipping z: N)	rK   disk_partitions
disk_usager4   OSErrorr   r   Z	sdiskpartappend)
allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeZoptserrZntuplerD   rD   rE   rq      s     
rq   c              
   C   s   t j|  \}}t|}t }|D ]}|\}}}	}
}}}||krBq"|	|krLq"|tthkrt|
rft j|
 }
|rtt j| }t| }t	|}t
|	}	|dkrt |||	|
|||}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).
    ry   )r   Z	conn_tmaprK   net_connectionssetr   r	   addrTCP_STATUSESr   r   Zsconnpconnaddlist)kind_pidZfamiliestypesrawlistri   itemfdZfamZtype_ZladdrZraddrr'   pidntrD   rD   rE   rz     s,    


rz   c                  C   sT   t  } |  D ]>\}}|\}}}}ttdr8t|}t||||d| |< q| S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplexrp   )rK   net_if_statsitemshasattrr   r   Z	snicstats)ri   namer   ZisupZduplexZspeedZmturD   rD   rE   r   !  s    

r   c                   C   s   t  S )z:The system boot time expressed in seconds since the epoch.)rK   	boot_timerD   rD   rD   rE   r   1  s    r   c                  C   s\   g } t  }d}|D ]B}|\}}}}}}	|s.q||kr:d}t|||||	}
| |
 q| S )z:Return currently connected users as a list of namedtuples.)z:0.0z:0	localhost)
cext_posixusersr   Zsuserrt   )rv   r   r   r   r.   ttyZhostnameZtstampZuser_processr   r   rD   rD   rE   r   6  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 rD   )isdigitrX   rb   rD   rD   rE   re   Q  s      zpids.<locals>.<listcomp>)r   encoder
   rA   listdir)r:   rD   rD   rE   pidsN  s    r   c                 C   s
   t | S )z&Check for the existence of a unix pid.)r   
pid_exists)r   rD   rD   rE   r   T  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 | f||W S  ttfk
rp } z&t|sRt|||t||||W 5 d }~X Y np tk
r } zt	|||W 5 d }~X Y nD t
k
r } z&|dkrdt krt	|||  W 5 d }~X Y nX d S Nr   )r   _ppid_nameFileNotFoundErrorProcessLookupErrorr   r   r   PermissionErrorr   rs   r   )selfargskwargsr   r!   r   rx   funrD   rE   wrapper^  s    
z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rD   r   rE   wrap_exceptionsY  s    r   c                   @   s  e Zd ZdZdddddg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/d0 Ze	d1d2 Ze	d3d4 ZeZe	d5d6 Ze	d7d8 Z e	d9d: Z!d;d< Z"e	dLd>d?Z#e$d@dAZ%e$d@dBZ&e	dCdD Z'e	dEdF Z(e	dGdH Z)e	dMdJdKZ*dIS )N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   rD   rD   rE   __init__{  s    zProcess.__init__c                 C   s   t | j d| j  dS )z+Raise NSP if the process disappeared on us./N)rA   statr   r   r   rD   rD   rE   _assert_alive  s    zProcess._assert_alivec                 C   s(   | j |  | j|  | j|  d S r   )_proc_name_and_argsZcache_activate_proc_basic_info
_proc_credr   rD   rD   rE   oneshot_enter  s    zProcess.oneshot_enterc                 C   s(   | j |  | j|  | j|  d S r   )r   Zcache_deactivater   r   r   rD   rD   rE   oneshot_exit  s    zProcess.oneshot_exitc                 C   s   t | j| jS r   )rK   Zproc_name_and_argsr   r   r   rD   rD   rE   r     s    zProcess._proc_name_and_argsc                 C   sX   | j dkr0tj| j d| j  ds0t| j t| j | j}t|tt	ksTt
|S )Nr   r   z/psinfo)r   rA   r:   existsr   r   rK   Zproc_basic_infolenproc_info_mapAssertionError)r   ri   rD   rD   rE   r     s    
zProcess._proc_basic_infoc                 C   s   t | j| jS r   )rK   Z	proc_credr   r   r   rD   rD   rE   r     s    zProcess._proc_credc                 C   s   |   d S r   )r   r   rD   rD   rE   r     s    zProcess.namec                 C   s>   zt | j d| j dW S  tk
r0   Y nX |   dS )Nr   z/path/a.outrp   )rA   readlinkr   r   rs   cmdliner   rD   rD   rE   exe  s    zProcess.exec                 C   s   |   d dS )Nr   r=   )r   rW   r   rD   rD   rE   r     s    zProcess.cmdlinec                 C   s   t | j| jS r   )rK   Zproc_environr   r   r   rD   rD   rE   rN     s    zProcess.environc                 C   s   |   td  S )Nr$   r   r   r   rD   rD   rE   r$     s    zProcess.create_timec                 C   s   |   td  S )Nr&   r   r   rD   rD   rE   r&     s    zProcess.num_threadsc                 C   s   |   td  S )Nr%   r   r   rD   rD   rE   nice_get  s    zProcess.nice_getc                 C   s&   | j dkrt| j | jt| j |S )N>   r   r   )r   r   r   r   setpriority)r   valuerD   rD   rE   nice_set  s    
zProcess.nice_setc                 C   s   |   td  | _| jS )Nr!   )r   r   r   r   rD   rD   rE   r!     s    zProcess.ppidc                 C   s`   z|   \}}}}}}W n8 tk
rP   |  td  }|  td  }d }Y nX t|||S )Nr)   r*   r   r   r   r   r   Zpuids)r   real	effectivesavedrZ   rD   rD   rE   uids  s    
zProcess.uidsc                 C   s`   z|   \}}}}}}W n8 tk
rP   |  td  }|  td  }d }Y nX t|||S )Nr+   r,   r   )r   rZ   r   r   r   rD   rD   rE   gids  s    
zProcess.gidsc              
   C   sZ   zt | j| j}W n: tk
rN } z|jtjkr<ts<d}n W 5 d }~X Y nX tj	| S )N)        r   r   r   )
rK   Zproc_cpu_timesr   r   rs   errno	EOVERFLOW	IS_64_BITr   r0   )r   timesrx   rD   rD   rE   rj     s    zProcess.cpu_timesc                 C   s   t | j| jS r   )rK   Zproc_cpu_numr   r   r   rD   rD   rE   cpu_num  s    zProcess.cpu_numc              	   C   s   | j }d}t|  td  }|tjkrrdD ]D}z"t| d| j d| W   S  t	k
rn   d}Y q,Y q,X q,|r~| 
  d S )NFr(   )r   r   r      r   /path/T)r   r   r   r   rK   ZPRNODEVrA   r   r   r   r   )r   procfs_path
hit_enoentr   rd   rD   rD   rE   terminal  s    
"zProcess.terminalc                 C   sR   | j }zt| d| j dW S  tk
rL   t| d| j  Y dS X d S )Nr   z	/path/cwdrp   )r   rA   r   r   r   r   )r   r   rD   rD   rE   cwd  s    zProcess.cwdc                 C   s2   |   }|td  d }|td  d }t||S )Nr"   i   r#   )r   r   r8   )r   ri   r"   r#   rD   rD   rE   memory_info#  s    zProcess.memory_infoc                 C   s   |   td  }t|dS )Nr'   ?)r   r   PROC_STATUSESget)r   coderD   rD   rE   r'   ,  s    zProcess.statusc           
      C   s   | j }g }t| d| j d}d}|D ]}t|}zt| j||\}}W nT tk
r } z6|jtj	krxt
sxW Y  q*|jtjkrd}W Y q* W 5 d }~X Y q*X t|||}	||	 q*|r|   |S )Nr   z/lwpFT)r   rA   r   r   rX   rK   Zquery_process_threadrs   r   r   r   ENOENTr   Zpthreadrt   r   )
r   r   ri   Ztidsr   tidutimeZstimerx   r   rD   rD   rE   threads2  s0      zProcess.threadsc              	   C   s   g }d}| j }| d| j d}t| d| j dD ]h}tj||}tj|r8zt|}W n tk
r   d}Y q8Y q8X t	|r8|
t|t| q8|r|   |S )NFr   z/path/fdT)r   r   rA   r   r:   joinislinkr   r   r   rt   r   Z	popenfilerX   r   )r   rv   r   r   Zpathdirr   r:   filerD   rD   rE   
open_filesT  s"    
zProcess.open_filesc                 c   s,  dt |g}tj|tjtjd}| \}}dd ||fD \}}|jdkrd| krft| j| j	d| krt
| j| j	|d| }t||d	d
d }t|D ]v\}}	|	 }	|	dr|	dd
d
 }
||d
   }|dkrtj}n|dkrtj}nd}dtj||
dtjfV  qdS )z<Get UNIX sockets used by process by parsing 'pfiles' output.Zpfiles)rH   stderrc                 s   s   | ]}| tjjV  qd S r   )rQ   rR   rH   rS   rb   rD   rD   rE   	<genexpr>r  s    z,Process._get_unix_sockets.<locals>.<genexpr>r   zpermission deniedzno such processz command error
rJ   r   Nzsockname: AF_UNIXr=   SOCK_STREAM
SOCK_DGRAMry   rp   )strrL   rM   rO   rP   rT   lowerr   r   r   r   rU   rW   	enumeratelstrip
startswithrV   socketr   r   ZAF_UNIXr   	CONN_NONE)r   r   cmdrY   rH   r   r[   r\   ir]   r:   typerD   rD   rE   _get_unix_socketsi  s:      



zProcess._get_unix_socketsinetc                 C   sR   t || jd}|s*t| j d| j  |dkrN|dd | | jD  |S )N)r   r   >   unixru   c                 S   s   g | ]}t j| qS rD   )r   r~   )rc   ZconnrD   rD   rE   re     s   z+Process.net_connections.<locals>.<listcomp>)rz   r   rA   r   r   extendr   )r   r   ri   rD   rD   rE   rz     s    

zProcess.net_connectionsZmmapzpath rss anon lockedzaddr perms path rss anon lockedc                 C   s4  dd }| j }g }zt| j|}W n@ tk
rd } z"|jtjkrRtsRg  W Y S  W 5 d }~X Y nX d}|D ]}|\}}	}
}}}}|||	}|ds
z t	
| d| j d| }W nN tk
r } z.|jtjkr| d| j d| }d}n W 5 d }~X Y nX |||
||||f qn|r0|   |S )Nc                 S   s0   d t| dd  dt|dd  dS )Nz{}-{}r   L)formathexrV   )startendrD   rD   rE   toaddr  s     z#Process.memory_maps.<locals>.toaddrF[r   r   T)r   rK   Zproc_memory_mapsr   rs   r   r   r   r   rA   r   r   rt   r   )r   r   r   rv   r   rx   r   r   r|   ZaddrsizeZpermr   r"   Zanonr;   rD   rD   rE   memory_maps  s2    
 zProcess.memory_mapsc                 C   s   t t| j d| j dS )Nr   r   )r   rA   r   r   r   r   rD   rD   rE   num_fds  s    zProcess.num_fdsc                 C   s   t jt| j| j S r   )r   ZpctxswrK   Zproc_num_ctx_switchesr   r   r   rD   rD   rE   num_ctx_switches  s    zProcess.num_ctx_switchesNc                 C   s   t | j|| jS r   )r   Zwait_pidr   r   )r   timeoutrD   rD   rE   wait  s    zProcess.wait)r   )N)+__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r   r   r   r   r   rN   r$   r&   r   r   r!   r   r   rj   r   r   r   r   Zmemory_full_infor'   r   r   r   rz   r   Znt_mmap_groupedZnt_mmap_extr   r   r   r   rD   rD   rD   rE   r   v  s   	







	

	
	






!
"


.

r   )F)ry   )mr  r   r   rA   r   rL   rR   collectionsr   r   rp   r   r   r   r   r   rK   r	   r
   r   r   r   r   r   r   r   r   r   r   Z__extra__all__ZgetpagesizerC   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_BOUNDr}   dictr   r-   r0   r3   r8   Zpfullmemr9   r   _fieldsr<   rF   r`   rj   rf   rm   rn   ro   Zdisk_io_countersrr   rq   Znet_io_countersZnet_if_addrsrz   r   r   r   r   r   r   r   rD   rD   rD   rE   <module>   s   

                      
 
 
.	

