???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
JZK                 @   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gZ e!edZ"ej#d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Z/ej0e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jGiZHeIdddddddddZJed d!d"gZKeKZLed#d$d%d&d'gZMed(d)d*d+d,d-gZNed.d/d!d0d1gZOed2d3d4jPeOjQ ZRd5d6 ZSd7d8 ZTd9d: ZUd;d< ZVd=d> ZWd?d@ ZXdAdB ZYdCdD ZZej[Z[ej\Z\dXdFdGZ]ej^Z^ej_Z_dZdHdIZ`dJdK ZadLdM ZbdNdO ZcdPdQ ZddRdS ZedTdU ZfG dVdW dWegZhdS )[zAIX platform implementation.    N)
namedtuple)AF_INET   )_common)_psposix)_psutil_aix)_psutil_posix)AF_INET6)memoize_when_activated)NIC_DUPLEX_FULL)NIC_DUPLEX_HALF)NIC_DUPLEX_UNKNOWN)sockfam_to_enum)socktype_to_enum)usage_percent)PY3)AccessDenied)NoSuchProcess)ZombieProcessPROCFS_PATHproc_threadsSC_PAGE_SIZE                  )ppidrssvmscreate_timenicenum_threadsstatusttynrpmemr   r    	scputimesusersystemZidleZiowaitsvmemtotalZ	availablepercentusedfreepmmap_groupedpathZanonlocked	pmmap_extzaddr perms  c               C   s   t jd jS )z+Return updated psutil.PROCFS_PATH constant.Zpsutil)sysmodulesr    r6   r6   /usr/lib64/python3.6/_psaix.pyget_procfs_pathl   s    r8   c              C   s4   t j \} }}}}t| | | dd}t| ||||S )Nr   )_round)cextZvirtual_memr   r*   )r+   Zavailr.   ZpinnedZinuser,   r6   r6   r7   virtual_memoryv   s    r;   c              C   s:   t j \} }}}| | }t|| dd}tj| |||||S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   )r9   )r:   Zswap_memr   r   Zsswap)r+   r.   ZsinZsoutr-   r,   r6   r6   r7   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 r6   )sum).0xr6   r6   r7   
<listcomp>   s    zcpu_times.<locals>.<listcomp>)r:   per_cpu_timesr'   zip)retr6   r6   r7   	cpu_times   s    rD   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 r6   )r'   )r>   r?   r6   r6   r7   r@      s    z!per_cpu_times.<locals>.<listcomp>)r:   rA   )rC   r6   r6   r7   rA      s    rA   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)ossysconf
ValueErrorr6   r6   r6   r7   cpu_count_logical   s    
rI   c              C   sr   d} t j| dt jt jd}|j \}}tr@dd ||fD \}}|jdkrZtd| |f |j j }t	|ppd S )Nzlsdev -Cc processorT)shellstdoutstderrc             S   s   g | ]}|j tjjqS r6   )decoder4   rK   encoding)r>   r?   r6   r6   r7   r@      s   z&cpu_count_physical.<locals>.<listcomp>r   z%r command error
%s)

subprocessPopenPIPEcommunicater   
returncodeRuntimeErrorstrip
splitlineslen)cmdprK   rL   Z
processorsr6   r6   r7   cpu_count_physical   s    

rZ   c              C   s    t j \} }}}tj| |||S )z*Return various CPU stats as a named tuple.)r:   	cpu_statsr   Z	scpustats)Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsr6   r6   r7   r[      s    r[   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 )r:   disk_partitions
disk_usager+   r   Z	sdiskpartappend)	allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeZoptsntupler6   r6   r7   r]      s    

r]   c          	   C   s  t j}| |kr.td| djdd |D f t j|  \}}tj|}t }x|D ]}|\}}	}
}}}}|	|krrqR|
|kr|qRt| }|	tt	fkr|rt j
| }|rt j
| }t|	}	t|
}
|dkrt j||	|
||||}nt j||	|
|||}|j| qRW t|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   s   g | ]}t |qS r6   )repr)r>   r?   r6   r6   r7   r@      s    z#net_connections.<locals>.<listcomp>r   )r   Z	conn_tmaprH   joinr:   net_connectionssetTCP_STATUSESr   r	   Zaddrr   r   ZsconnZpconnaddlist)kind_pidZcmapZfamiliestypesrawlistrC   itemfdZfamZtype_ZladdrZraddrr$   pidntr6   r6   r7   rg      s4    



rg   c              C   s   t td} tdd t D }i }x|D ]}tj|\}}d}d}tjdd|gtjtjd}|j	 \}	}
t
rd	d |	|
fD \}	}
|jdkrtjd
|	}|dk	rt|jd}|jd}| j|t}tj||||||< q(W |S )z)Get NIC stats (isup, duplex, speed, mtu).)ZFullZHalfc             S   s   g | ]}|d  qS )r   r6   )r>   r?   r6   r6   r7   r@      s    z net_if_stats.<locals>.<listcomp>r\   r   z/usr/bin/entstatz-d)rK   rL   c             S   s   g | ]}|j tjjqS r6   )rM   r4   rK   rN   )r>   r?   r6   r6   r7   r@     s   z"Running: (\d+) Mbps.*?(\w+) DuplexNr   r   )r   r   rh   net_if_addrsr:   net_if_statsrO   rP   rQ   rR   r   rS   researchintgroupgetr   r   Z	snicstats)Z
duplex_mapnamesrC   nameZisupZmtuZduplexZspeedrY   rK   rL   Z	re_resultr6   r6   r7   ru      s,    


ru   c               C   s   t j S )z:The system boot time expressed in seconds since the epoch.)r:   	boot_timer6   r6   r6   r7   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   )r:   usersr   Zsuserr_   )ra   ro   r   rp   r(   ZttyZhostnameZtstampZuser_processrr   rs   r6   r6   r7   r   $  s    
r   c               C   s   dd t jt D S )z7Returns a list of PIDs currently running on the system.c             S   s   g | ]}|j  rt|qS r6   )isdigitrx   )r>   r?   r6   r6   r7   r@   >  s    zpids.<locals>.<listcomp>)rF   listdirr8   r6   r6   r6   r7   pids<  s    r   c             C   s   t jjt jjt t| dS )z&Check for the existence of a unix pid.Zpsinfo)rF   r0   existsrf   r8   str)rr   r6   r6   r7   
pid_existsA  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 } ztd ks:td ks:td kr< |jtjtjfkrzt| jsht| 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 )N)EnvironmentErrorr   r   r   errnoENOENTZESRCHr   rr   _name_ppidZEPERMZEACCES)selfargskwargserr)funr6   r7   wrapperK  s    
z wrap_exceptions.<locals>.wrapperr6   )r   r   r6   )r   r7   wrap_exceptionsF  s    r   c               @   sh  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re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/d0 Zed1d2 ZeZed3d4 Zd5d6 Z ed7d8 Z!ed9d: Z"edAd<d=Z#ed>d? Z$d;S )BProcessz1Wrapper class around underlying C implementation.rr   r   r   _procfs_pathc             C   s   || _ d | _d | _t | _d S )N)rr   r   r   r8   r   )r   rr   r6   r6   r7   __init__f  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   r6   r6   r7   oneshot_enterl  s    

zProcess.oneshot_enterc             C   s"   | j j  | jj  | jj  d S )N)r   Zcache_deactivater   r   )r   r6   r6   r7   oneshot_exitq  s    

zProcess.oneshot_exitc             C   s   t j| j| jS )N)r:   Zproc_name_and_argsrr   r   )r   r6   r6   r7   r   v  s    zProcess._proc_name_and_argsc             C   s   t j| j| jS )N)r:   Zproc_basic_inforr   r   )r   r6   r6   r7   r   z  s    zProcess._proc_basic_infoc             C   s   t j| j| jS )N)r:   Z	proc_credrr   r   )r   r6   r6   r7   r   ~  s    zProcess._proc_credc             C   s    | j dkrdS | j d jdS )Nr   Zswapper )rr   r   rstrip)r   r6   r6   r7   r|     s    
zProcess.namec             C   s   | j  d }tjj|krttjj|s>tjjtjj| j |}tjj|rhtjj|rhtj	|tj
rh|S tjj|}xLtjd jdD ]8}tjjtjj||}tjj|rtj	|tj
r|S qW dS )Nr   PATH:r\   )cmdlinerF   r0   sepisabsabspathrf   cwdisfileaccessX_OKbasenameenvironsplit)r   exer0   Zpossible_exer6   r6   r7   r     s    zProcess.exec             C   s   | j  d jdS )Nr   r3   )r   r   )r   r6   r6   r7   r     s    zProcess.cmdlinec             C   s   | j  td  S )Nr!   )r   proc_info_map)r   r6   r6   r7   r!     s    zProcess.create_timec             C   s   | j  td  S )Nr#   )r   r   )r   r6   r6   r7   r#     s    zProcess.num_threadsc             C   sZ   t j| j}g }x*|D ]"\}}}tj|||}|j| qW |sVtjd| j| jf  |S )Nz%s/%s)	r:   r   rr   r   Zpthreadr_   rF   statr   )r   ro   ra   Z	thread_idutimeZstimerc   r6   r6   r7   threads  s    zProcess.threadsinetc             C   s,   t || jd}|s(tjd| j| jf  |S )N)rm   z%s/%s)rg   rr   rF   r   r   )r   rl   rC   r6   r6   r7   connections  s    zProcess.connectionsc             C   s   t j| jS )N)
cext_posixgetpriorityrr   )r   r6   r6   r7   nice_get  s    zProcess.nice_getc             C   s   t j| j|S )N)r   setpriorityrr   )r   valuer6   r6   r7   nice_set  s    zProcess.nice_setc             C   s   | j  td  | _| jS )Nr   )r   r   r   )r   r6   r6   r7   r     s    zProcess.ppidc             C   s"   | j  \}}}}}}tj|||S )N)r   r   puids)r   real	effectivesaved_r6   r6   r7   uids  s    zProcess.uidsc             C   s"   | j  \}}}}}}tj|||S )N)r   r   r   )r   r   r   r   r   r6   r6   r7   gids  s    zProcess.gidsc             C   s   t j| j| j}tj| S )N)r:   Zproc_cpu_timesrr   r   r   Z	pcputimes)r   rD   r6   r6   r7   rD     s    zProcess.cpu_timesc             C   sP   | j  td  }|d@ d? |d@ B }x&tjdD ]}tj|j|kr0|S q0W d S )Nr%   l           i  z	/dev/**/*)r   r   globrF   r   st_rdev)r   ZttydevZdevr6   r6   r7   terminal  s    zProcess.terminalc             C   sr   | j }ytjd|| jf }|jdS  tk
rl } z,|jtjkrZtjd|| jf  d S  W Y d d }~X nX d S )Nz	%s/%s/cwd/z%s/%s)	r   rF   readlinkrr   r   OSErrorr   r   r   )r   Zprocfs_pathresultr   r6   r6   r7   r     s    
zProcess.cwdc             C   s2   | j  }|td  d }|td  d }t||S )Nr   i   r    )r   r   r&   )r   rC   r   r    r6   r6   r7   memory_info  s    zProcess.memory_infoc             C   s   | j  td  }tj|dS )Nr$   ?)r   r   PROC_STATUSESrz   )r   coder6   r6   r7   r$     s    zProcess.statusc             C   s   t jddt| jgt jt jd}|j \}}trFdd ||fD \}}d|j kr`t| j| j	t
jd|}g }xR|D ]J\}}|j }|jdr|d	d  }|j d
krqv|jtj|t| qvW |S )Nz/usr/bin/procfilesz-n)rK   rL   c             S   s   g | ]}|j tjjqS r6   )rM   r4   rK   rN   )r>   r?   r6   r6   r7   r@     s   z&Process.open_files.<locals>.<listcomp>zno such processz(\d+): S_IFREG.*\s*.*name:(.*)
z//r   zcannot be retrieved)rO   rP   r   rr   rQ   rR   r   lowerr   r   rv   findallrU   
startswithr_   r   Z	popenfilerx   )r   rY   rK   rL   Z	procfilesra   rq   r0   r6   r6   r7   
open_files  s$    
zProcess.open_filesc             C   s(   | j dkrdS ttjd| j| j f S )Nr   z%s/%s/fd)rr   rW   rF   r   r   )r   r6   r6   r7   num_fds$  s    
zProcess.num_fdsc             C   s   t jtj| j S )N)r   Zpctxswr:   Zproc_num_ctx_switchesrr   )r   r6   r6   r7   num_ctx_switches*  s    zProcess.num_ctx_switchesNc             C   s   t j| j|| jS )N)r   Zwait_pidrr   r   )r   Ztimeoutr6   r6   r7   wait/  s    zProcess.waitc             C   sX   yt j| j\}}}}W n. tk
rF   t| js@t| j| j Y nX tj||||S )N)	r:   Zproc_io_countersrr   r   r   r   r   r   Zpio)r   ZrcZwcrbwbr6   r6   r7   io_counters3  s    
zProcess.io_counters)r   )N)%__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   rD   r   r   r   Zmemory_full_infor$   r   r   r   r   r   r6   r6   r6   r7   r   a  sD   r   )Fre   )re   )ir   r   r   rF   rv   rO   r4   collectionsr   Zsocketr   r\   r   r   r   r:   r   r   r	   r
   r   r   r   r   r   r   Z_compatr   _exceptionsr   r   r   Z__extra__all__hasattrr   rG   Z	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_NONEri   dictr   r&   Zpfullmemr'   r*   r/   rf   _fieldsr2   r8   r;   r<   rD   rA   rI   rZ   r[   Zdisk_io_countersr^   r]   rt   Znet_io_countersrg   ru   r}   r   r   r   r   objectr   r6   r6   r6   r7   <module>   s   

	
	

!$