o
    adf=I                     @   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lmZ dgZe edZ!e edZ"e edZ#e$ Z%ej&Z&ej'e
j(ej)e
j*ej+e
j,ej-e
j,ej.e
j/iZ0ej1e
j2e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
jHiZIeJdddddddd d!ZKed"d#d$gZLeLZMed%g d&ZNed'g d(ZOd)d* ZPd+d, ZQd-d. ZRd/d0 ZSd1d2 ZTd3d4 ZUd5d6 ZVejWZWejXZXdKd8d9ZYejZZZe"r@ej[Z[dLd;d<Z\d=d> Z]d?d@ Z^dAdB Z_dCdD Z`dEdF ZadGdH ZbG dIdJ dJZcdS )MzAIX platform implementation.    N)
namedtuple   )_common)_psposix)_psutil_aix)_psutil_posix)NIC_DUPLEX_FULL)NIC_DUPLEX_HALF)NIC_DUPLEX_UNKNOWN)AccessDenied)NoSuchProcess)ZombieProcess)conn_to_ntuple)get_procfs_path)memoize_when_activated)usage_percent)PY3)FileNotFoundError)PermissionError)ProcessLookupErrorZPROCFS_PATHproc_threadsnet_io_countersproc_io_counters                  )ppidrssvmscreate_timenicenum_threadsstatusttynrpmemr    r!   	scputimes)usersystemidleZiowaitsvmem)total	availablepercentusedfreec                  C   s4   t  \} }}}}t| | | dd}t| ||||S )Nr   Zround_)cextZvirtual_memr   r,   )r-   Zavailr1   pinnedZinuser/    r5   V/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/psutil/_psaix.pyvirtual_memoryk   s   r7   c                  C   s:   t  \} }}}| | }t|| dd}t| |||||S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r2   )r3   Zswap_memr   r   Zsswap)r-   r1   sinZsoutr0   r/   r5   r5   r6   swap_memoryq   s   r9   c                  C   s   t  } tdd t|  D  S )z.Return system-wide CPU times as a named tuple.c                 S      g | ]}t |qS r5   )sum.0xr5   r5   r6   
<listcomp>       zcpu_times.<locals>.<listcomp>)r3   per_cpu_timesr(   zipretr5   r5   r6   	cpu_times~   s   rE   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 r5   )r(   r<   r5   r5   r6   r?      r@   z!per_cpu_times.<locals>.<listcomp>)r3   rA   rC   r5   r5   r6   rA      s   rA   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)ossysconf
ValueErrorr5   r5   r5   r6   cpu_count_logical   s
   rJ   c                  C   st   g d} t j| t jt jd}| \}}tr!dd ||fD \}}|jdkr.td| |f |  }t	|p9d S )N)Zlsdevz-Cc	processorstdoutstderrc                 s       | ]
}| tjjV  qd S NdecodesysrM   encodingr<   r5   r5   r6   	<genexpr>       
z"cpu_count_cores.<locals>.<genexpr>r   z%r command error
%s)

subprocessPopenPIPEcommunicater   
returncodeRuntimeErrorstrip
splitlineslen)cmdprM   rN   Z
processorsr5   r5   r6   cpu_count_cores   s   

rb   c                  C   s    t  \} }}}t| |||S )z*Return various CPU stats as a named tuple.)r3   	cpu_statsr   Z	scpustats)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsr5   r5   r6   rc      s   rc   Fc              	   C   sh   g }t  }|D ])}|\}}}}|dkrd}| st|jsqd }}	t||||||	}
||
 q|S )zReturn system disk partitions.none N)r3   disk_partitions
disk_usager-   r   Z	sdiskpartappend)allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeoptsZmaxfileZmaxpathntupler5   r5   r6   rf      s   
rf   c                 C   s   t j}| |vrtd| ddd |D f t j|  \}}t|}g }|D ],}|\}}	}
}}}}|	|vr7q'|
|vr<q't||	|
|||t|dkrJ|ndd}|| q'|S )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    z+invalid %r kind argument; choose between %sz, c                 S   r:   r5   )reprr<   r5   r5   r6   r?      r@   z#net_connections.<locals>.<listcomp>rn   Npid)	r   Z	conn_tmaprI   joinr3   net_connectionsr   TCP_STATUSESrh   )kind_pidZcmapZfamiliestypesrawlistrD   itemfdfamtype_laddrraddrr%   rq   ntr5   r5   r6   rs      s8   

rs   c                  C   s   t td} tdd t D }i }|D ]e}t|}t|}d}d}tjdd|gtj	tj	d}|
 \}	}
trCd	d
 |	|
fD \}	}
|jdkr^td|	}|dur^t|d}|d}d|}d|v }| |t}t|||||||< q|S )z)Get NIC stats (isup, duplex, speed, mtu).)FullZHalfc                 S   s   g | ]}|d  qS )r   r5   r<   r5   r5   r6   r?      r@   z net_if_stats.<locals>.<listcomp>re   r   z/usr/bin/entstatz-drL   c                 s   rO   rP   rQ   r<   r5   r5   r6   rU     rV   znet_if_stats.<locals>.<genexpr>z"Running: (\d+) Mbps.*?(\w+) DuplexNr   r   ,running)r   r	   setnet_if_addrs
cext_posixZ
net_if_mtuZnet_if_flagsrW   rX   rY   rZ   r   r[   researchintgrouprr   getr
   r   Z	snicstats)Z
duplex_mapnamesrD   nameZmtuflagsZduplexspeedra   rM   rN   Z	re_resultZoutput_flagsZisupr5   r5   r6   net_if_stats   s<   






r   c                   C   s   t  S )z:The system boot time expressed in seconds since the epoch.)r3   	boot_timer5   r5   r5   r6   r   "  s   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)r3   usersr   Zsuserrh   )rj   rx   r   ry   r)   ttyhostnameZtstampZuser_processrq   r   r5   r5   r6   r   '  s   r   c                   C   s   dd t t D S )z7Returns a list of PIDs currently running on the system.c                 S   s   g | ]
}|  rt|qS r5   )isdigitr   r<   r5   r5   r6   r?   A  s    zpids.<locals>.<listcomp>)rG   listdirr   r5   r5   r5   r6   pids?  s   r   c                 C   s   t jt jt t| dS )z&Check for the existence of a unix pid.Zpsinfo)rG   pathexistsrr   r   strrp   r5   r5   r6   
pid_existsD  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              	      sp   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w rP   )
r   r   r   rq   r   _namer   _ppidr   r   )selfargskwargsfunr5   r6   wrapperN  s   
z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   r5   r   r6   wrap_exceptionsI  s   r   c                   @   st  e Zd ZdZg dZdd Zdd Z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rRedd Zed=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Zed0d1 Zd2d3 Z ed4d5 Z!ed6d7 Z"ed>d9d:Z#e$red;d< Z%d8S d8S )?Processz1Wrapper class around underlying C implementation.)rq   r   r   _procfs_path_cachec                 C   s   || _ d | _d | _t | _d S rP   )rq   r   r   r   r   )r   rq   r5   r5   r6   __init__e  s   zProcess.__init__c                 C      | j |  | j|  d S rP   )_proc_basic_infoZcache_activate
_proc_credr   r5   r5   r6   oneshot_enterk     zProcess.oneshot_enterc                 C   r   rP   )r   Zcache_deactivater   r   r5   r5   r6   oneshot_exito  r   zProcess.oneshot_exitc                 C      t | j| jS rP   )r3   Zproc_basic_inforq   r   r   r5   r5   r6   r   s     zProcess._proc_basic_infoc                 C   r   rP   )r3   Z	proc_credrq   r   r   r5   r5   r6   r   x  r   zProcess._proc_credc                 C   s$   | j dkrdS t| j | jdS )Nr   Zswapper )rq   r3   Z	proc_namer   rstripr   r5   r5   r6   r   }  s   
zProcess.namec                 C   s   |   }|sdS |d }tjj|v r@tj|s%tjtj|  |}tj|r:tj|r:t	|tj
r:|S tj|}tjd dD ]}tjtj||}tj|rft	|tj
rf|  S qHdS )Nre   r   PATH:)cmdlinerG   r   sepisabsabspathrr   cwdisfileaccessX_OKbasenameenvironsplit)r   r   exer   Zpossible_exer5   r5   r6   r     s.   

zProcess.exec                 C      t | jS rP   )r3   Z	proc_argsrq   r   r5   r5   r6   r        zProcess.cmdlinec                 C   r   rP   )r3   Zproc_environrq   r   r5   r5   r6   r     r   zProcess.environc                 C      |   td  S )Nr"   r   proc_info_mapr   r5   r5   r6   r"        zProcess.create_timec                 C   r   )Nr$   r   r   r5   r5   r6   r$     r   zProcess.num_threadsc                 C   sV   t | j}g }|D ]\}}}t|||}|| q
|s)td| j| jf  |S )N%s/%s)	r3   r   rq   r   Zpthreadrh   rG   statr   )r   rx   rj   	thread_idutimeZstimerm   r5   r5   r6   threads  s   zProcess.threadsinetc                 C   s,   t || jd}|std| j| jf  |S )N)rv   r   )rs   rq   rG   r   r   )r   ru   rD   r5   r5   r6   connections  s   zProcess.connectionsc                 C   r   rP   )r   getpriorityrq   r   r5   r5   r6   nice_get  r   zProcess.nice_getc                 C   s   t | j|S rP   )r   setpriorityrq   )r   valuer5   r5   r6   nice_set  s   zProcess.nice_setc                 C   s   |   td  | _| jS )Nr   )r   r   r   r   r5   r5   r6   r     s   zProcess.ppidc                 C   s"   |   \}}}}}}t|||S rP   r   r   Zpuids)r   real	effectivesaved_r5   r5   r6   uids     zProcess.uidsc                 C   s"   |   \}}}}}}t|||S rP   r   )r   r   r   r   r   r5   r5   r6   gids  r   zProcess.gidsc                 C   s   t | j| j}tj| S rP   )r3   Zproc_cpu_timesrq   r   r   Z	pcputimes)r   tr5   r5   r6   rE     s   
zProcess.cpu_timesc                 C   sP   |   td  }|d@ d? |d@ B }tdD ]}t|j|kr%|  S qd S )Nr&   l           i  z	/dev/**/*)r   r   globrG   r   st_rdev)r   Zttydevdevr5   r5   r6   terminal  s   zProcess.terminalc                 C   sP   | j }ztd|| jf }|dW S  ty'   td|| jf  Y dS w )Nz	%s/%s/cwd/r   re   )r   rG   readlinkrq   r   r   r   )r   Zprocfs_pathresultr5   r5   r6   r     s   zProcess.cwdc                 C   s2   |   }|td  d }|td  d }t||S )Nr    i   r!   )r   r   r'   )r   rD   r    r!   r5   r5   r6   memory_info  s   
zProcess.memory_infoc                 C   s   |   td  }t|dS )Nr%   ?)r   r   PROC_STATUSESr   )r   coder5   r5   r6   r%     s   zProcess.statusc                 C   s   t jddt| jgt jt jd}| \}}tr#dd ||fD \}}d| v r0t| j| j	t
d|}g }|D ]%\}}| }|drM|d	d  }| d
krTq:|t|t| q:|S )Nz/usr/bin/procfilesz-nrL   c                 s   rO   rP   rQ   r<   r5   r5   r6   rU     rV   z%Process.open_files.<locals>.<genexpr>zno such processz (\d+): S_IFREG.*\s*.*name:(.*)\nz//r   zcannot be retrieved)rW   rX   r   rq   rY   rZ   r   lowerr   r   r   findallr]   
startswithrh   r   Z	popenfiler   )r   ra   rM   rN   Z	procfilesrj   rz   r   r5   r5   r6   
open_files  s,   

zProcess.open_filesc                 C   s(   | j dkrdS ttd| j| j f S )Nr   z%s/%s/fd)rq   r_   rG   r   r   r   r5   r5   r6   num_fds,  s   
zProcess.num_fdsc                 C   s   t jt| j S rP   )r   Zpctxswr3   Zproc_num_ctx_switchesrq   r   r5   r5   r6   num_ctx_switches2     zProcess.num_ctx_switchesNc                 C   s   t | j|| jS rP   )r   Zwait_pidrq   r   )r   timeoutr5   r5   r6   wait6  r   zProcess.waitc                 C   sR   zt | j\}}}}W n ty    t| jst| j| j w t||||S rP   )	r3   r   rq   OSErrorr   r   r   r   Zpio)r   rcwcrbwbr5   r5   r6   io_counters<  s   
zProcess.io_counters)r   rP   )&__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r   r   r   r   r"   r$   HAS_THREADSr   r   r   r   r   r   r   rE   r   r   r   Zmemory_full_infor%   r   r   r   r   HAS_PROC_IO_COUNTERSr   r5   r5   r5   r6   r   `  sz    















	



r   )F)rn   )dr   r   r   rG   r   rW   rS   collectionsr   re   r   r   r   r3   r   r   r   r	   r
   r   r   r   r   r   r   r   _compatr   r   r   r   Z__extra__all__hasattrr   ZHAS_NET_IO_COUNTERSr   ZgetpagesizeZ	PAGE_SIZEZAF_LINKZSIDLZSTATUS_IDLEZSZOMBZSTATUS_ZOMBIEZSACTIVEZSTATUS_RUNNINGZSSWAPZSSTOPZSTATUS_STOPPEDr   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_NONEZ	CONN_NONErt   dictr   r'   Zpfullmemr(   r,   r7   r9   rE   rA   rJ   rb   rc   Zdisk_io_countersrg   rf   r   r   rs   r   r   r   r   r   r   r   r5   r5   r5   r6   <module>   s   


		

!,