???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
JZ$v                 @   sl  d Z ddlZddlZddlZddlZddljj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dl m#Z# g Z$erhej%ej&ej'ej(ej)ej*ej+ej,ej-ej.ej/ej0ej1ej2iZ3nesterej%ej&ej)ej*ej+ej,ej4ej.ej-ej.ej'ej5ej6ej(iZ3nBerej%ej&ej7ej(ej8ej.ej+ej,ej-ej.ej4ej9ej:ej;iZ3ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMejNejOejPejQejRejSiZTerjejUdZVn
ejUdZVejWZWeXddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1ZYe
d2d3d4d5d6d7d8d9d:d;d<d=gZZe
d>d?d@dAdBdCgZ[e
dDdEdFdGdHdIgZ\e\Z]e
dJd?dAdKdLgZ^e
dMdNZ_e
dOdPZ`erFe
dQdRdSdTdUdVdWdXgZane
dQdRdSdTdUgZadYdZ Zbd[d\ Zcd]d^ Zdeeed_rd`d_ Zfndad_ Zfdbef_gdcdd Zheserdedf Zindgdf Zidhdi ZjddjdkZkejlZlejmZmejnZnejoZodldm Zpdndo Zqerdpdq Zrdrds Zsdtdu Ztedvdw Zudxdy Zves2er<dzd{ ZwnejwZwd|d} Zxejyd~d ZzG dd de{Z|dS )z5FreeBSD, OpenBSD and NetBSD platforms implementation.    N)
namedtuple)AF_INET   )_common)_psposix)_psutil_bsd)_psutil_posix)AF_INET6)	conn_tmap)FREEBSD)memoize)memoize_when_activated)NETBSD)OPENBSD)sockfam_to_enum)socktype_to_enum)usage_percent)which)AccessDenied)NoSuchProcess)ZombieProcessSC_PAGESIZESC_PAGE_SIZE                     	   
                                             )ppidstatusreal_uideffective_uid	saved_uidreal_gideffective_gid	saved_gidttynrcreate_timectx_switches_volctx_switches_unvolread_io_countwrite_io_count	user_timesys_timech_user_timech_sys_timerssvmsmemtextmemdatamemstackcpunumnamesvmemtotalZ	availablepercentusedfreeactiveinactivebufferscachedsharedwired	scputimesusernicesystemidleirqpmemrB   rC   textdatastack	pcputimeschildren_userchildren_systempmmap_groupedz*path rss, private, ref_count, shadow_count	pmmap_extz6addr, perms path rss, private, ref_count, shadow_countsdiskioZ
read_countZwrite_countZ
read_bytesZwrite_bytesZ	read_timeZ
write_timeZ	busy_timec              C   s   t j } | \}}}}}}}}trtddR}	xJ|	D ]B}
|
jdrVt|
j d d }q2|
jdr2t|
j d d }q2W W dQ R X || | }|| | }t|| |dd}t|||||||||||S )	z&System virtual memory as a namedtuple.z/proc/meminforbs   Buffers:r   i   s
   MemShared:N)_round)	cextZvirtual_memr   open
startswithintsplitr   rI   )ZmemrJ   rM   rN   rO   rS   rQ   rP   rR   flineZavailrL   rK    rm   /usr/lib64/python3.6/_psbsd.pyvirtual_memory   s    


"ro   c              C   s4   t j \} }}}}t|| dd}tj| |||||S )z@System swap memory as (total, used, free, sin, sout) namedtuple.r   )re   )rf   Zswap_memr   r   Zsswap)rJ   rL   rM   ZsinZsoutrK   rm   rm   rn   swap_memory   s    rp   c              C   s"   t j \} }}}}t| ||||S )z+Return system per-CPU times as a namedtuple)rf   	cpu_timesrT   )rU   rV   rW   rX   rY   rm   rm   rn   rq      s    rq   per_cpu_timesc              C   sB   g } x8t j D ],}|\}}}}}t|||||}| j| qW | S )z'Return system CPU times as a namedtuple)rf   rr   rT   append)retZcpu_trU   rV   rW   rX   rY   itemrm   rm   rn   rr      s    c               C   s.   t  dkrt gS tjr tddt_t gS )z'Return system CPU times as a namedtupler   z&supported only starting from FreeBSD 8T)cpu_count_logicalrq   rr   
__called__NotImplementedErrorrm   rm   rm   rn   rr      s    
Fc               C   s   t j S )z0Return the number of logical CPUs in the system.)rf   rv   rm   rm   rm   rn   rv      s    rv   c               C   s   t  dkrdS d S )Nr   )rv   rm   rm   rm   rn   cpu_count_physical   s    ry   c           
   C   sx   d} t j }|dk	rb|jd}|dkrb|d|d  }tj|}zt|jdpRd} W d|j  X | stt dkrtdS | S )z1Return the number of physical CPUs in the system.Nz	</groups>r   r    zgroup/children/group/cpu)	rf   Zcpu_count_physrfindETZ
fromstringlenfindallclearrv   )rt   sindexrootrm   rm   rn   ry      s    



c        	      C   s   t rtj \} }}}}nttrrtj \} }}}}}}tdd.}x&|D ]}|jdrDt|j d }qDW W dQ R X ntrtj \} }}}}}}t	j
| |||S )z*Return various CPU stats as a named tuple.z
/proc/statrd   s   intrr   N)r   rf   	cpu_statsr   rg   rh   ri   rj   r   r   Z	scpustats)	ZctxswZintrsZ
soft_intrsZsyscallsZtrapsZfaultsZforksrk   rl   rm   rm   rn   r     s    

 r   c       	      C   sD   g }t j }x2|D ]*}|\}}}}tj||||}|j| qW |S )zReturn mounted disk partitions as a list of namedtuples.
    'all' argument is ignored, see:
    https://github.com/giampaolo/psutil/issues/906
    )rf   disk_partitionsr   Z	sdiskpartrs   )	allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeZoptsntuplerm   rm   rn   r   <  s    
r   c              C   sj   t  j } i }xV| D ]N}tj|}tj|}tj|\}}ttdrNtj|}tj	||||||< qW |S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex)
net_io_counterskeys
cext_posixZ
net_if_mtuZnet_if_flagsZnet_if_duplex_speedhasattrr   r   Z	snicstats)namesrt   rH   ZmtuZisupZduplexZspeedrm   rm   rn   net_if_statsW  s    





r   c             C   s  t rzg }xlt D ]b}yt|j| }W n ttfk
r@   wY qX x.|D ]&}t|}|j| |jtj	|  qHW qW |S | tj
krtd| djdd t
D f t
|  \}}t }trtjd}ntj }x|D ]}|\}	}
}}}}}|
|ko||kryt| }W n  tk
r&   ttj }Y nX |
ttfkrV|rFtj| }|rVtj| }t|
}
t|}tj	|	|
|||||}|j| qW t|S )z System-wide network connections.z+invalid %r kind argument; choose between %sz, c             S   s   g | ]}t |qS rm   )repr).0xrm   rm   rn   
<listcomp>w  s    z#net_connections.<locals>.<listcomp>r   rz   )r   pidsProcessconnectionsr   r   listrs   r   Zsconnr
   
ValueErrorjoinsetr   rf   net_connectionsTCP_STATUSESKeyErrorPSUTIL_CONN_NONEr   r	   addrr   r   add)kindrt   pidZconsZconnfamiliestypesrawlistru   fdfamtypeladdrraddrr1   ntrm   rm   rn   r   e  sJ    





r   c              C   sb   yt j \} }}W n tk
r&   dS X |dk}|r<tj}n|dkrLtj}n|d }tj| ||S )zReturn battery info.Nr   <   rz   )rf   sensors_batteryrx   r   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)rK   ZminsleftZpower_pluggedZsecsleftrm   rm   rn   r     s    r   c               C   s   t j S )z:The system boot time expressed in seconds since the epoch.)rf   	boot_timerm   rm   rm   rn   r     s    r   c        	      C   sj   g } t j }xX|D ]P}|\}}}}}|dkr8ts4td}|dkrBqtj||pNd|||}| j| qW | S )z:Return currently connected users as a list of namedtuples.r   N~rz   )rf   usersr   AssertionErrorr   Zsuserrs   )	r   r   ru   rU   ZttyZhostnameZtstampr   r   rm   rm   rn   r     s    
r   c               C   s@   yt dj  W n& tk
r$   dS  tk
r6   dS X dS d S )Nr   FT)r   rH   r   r   rm   rm   rm   rn   _pid_0_exists  s    r   c              C   s*   t j } tr&d| kr&t r&| jdd | S )z7Returns a list of PIDs currently running on the system.r   )rf   r   r   r   insert)rt   rm   rm   rn   r     s    r   c             C   s    t j| }|s| t kS dS dS )zReturn True if pid exists.TN)r   
pid_existsr   )r   existsrm   rm   rn   r     s    

r   c                s   t j  fdd}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c                s   y | f||S  t k
r } z| jdkrHdt krFt| j| jn |jtjkrt| jsnt| 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   )OSErrorr   r   r   _nameerrnoESRCHr   r   r   _ppidEPERMEACCES)selfargskwargserr)funrm   rn   wrapper  s    


z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rm   )r   rn   wrap_exceptions  s    r   c             c   s   y
dV  W n t k
r } zf|jtjtjfkrZt| jsHt| j| jnt| j| j| j	|jtj
tjfkrzt| j| j W Y dd}~X nX dS )z8Same as above, for routines relying on reading /proc fs.N)EnvironmentErrorr   ENOENTr   r   r   r   r   r   r   r   r   r   )Zinstr   rm   rm   rn   wrap_exceptions_procfs
  s    

r   c               @   s  e Zd ZdZdddgZdd Ze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  ZeZe
d!d" Ze
d#d$ Ze
d%d& Ze
d'd( Ze
dJd*d+Ze
dKd-d.Ze
d/d0 Ze
d1d2 Ze
d3d4 Ze
d5d6 Z e
d7d8 Z!e"d9d:Z#e"d9d;Z$d<d= Z%e&e'd>rxe
d?d@ Z(ne%Z(e&e'dAre
dBdC Z)ne%Z)ere
dDdE Z*e
dFdG Z+e
dHdI Z,d,S )Lr   z1Wrapper class around underlying C implementation.r   r   r   c             C   s   || _ d | _d | _d S )N)r   r   r   )r   r   rm   rm   rn   __init__"  s    zProcess.__init__c             C   s$   t j| j}t|ttks t|S )z;Retrieves multiple process info in one shot as a raw tuple.)rf   Zproc_oneshot_infor   r}   kinfo_proc_mapr   )r   rt   rm   rm   rn   oneshot'  s    zProcess.oneshotc             C   s   | j j  d S )N)r   Zcache_activate)r   rm   rm   rn   oneshot_enter.  s    zProcess.oneshot_enterc             C   s   | j j  d S )N)r   Zcache_deactivate)r   rm   rm   rn   oneshot_exit1  s    zProcess.oneshot_exitc             C   s(   | j  td  }|d k	r|S tj| jS )NrH   )r   r   rf   Z	proc_namer   )r   rH   rm   rm   rn   rH   4  s    zProcess.namec          
   C   sd   t rtj| jS trD| jdkr"dS t|  tjd| j S Q R X n| j }|r\t	|d S dS d S )Nr    z/proc/%s/exe)
r   rf   Zproc_exer   r   r   osreadlinkcmdliner   )r   r   rm   rm   rn   exe9  s    

zProcess.exec             C   s   t r| jdkrg S trytj| jS  tk
r } zB|jtjkrnt| jsZt	| j| j
qpt| j| j
| jn W Y d d }~X qX ntj| jS d S )Nr   )r   r   r   rf   Zproc_cmdliner   r   EINVALr   r   r   r   r   )r   r   rm   rm   rn   r   O  s    
zProcess.cmdlinec             C   s:   | j  td  }tj }y|| S  tk
r4   d S X d S )Nr8   )r   r   r   Zget_terminal_mapr   )r   Ztty_nrZtmaprm   rm   rn   terminale  s    zProcess.terminalc             C   s   | j  td  | _| jS )Nr0   )r   r   r   )r   rm   rm   rn   r0   n  s    zProcess.ppidc             C   s.   | j  }tj|td  |td  |td  S )Nr2   r3   r4   )r   r   Zpuidsr   )r   rawtuplerm   rm   rn   uidss  s
    

zProcess.uidsc             C   s.   | j  }tj|td  |td  |td  S )Nr5   r6   r7   )r   r   Zpgidsr   )r   r   rm   rm   rn   gids{  s
    

zProcess.gidsc             C   s8   | j  }tj|td  |td  |td  |td  S )Nr>   r?   r@   rA   )r   r   r^   r   )r   r   rm   rm   rn   rq     s    


zProcess.cpu_timesc             C   s   | j  td  S )NrG   )r   r   )r   rm   rm   rn   cpu_num  s    zProcess.cpu_numc             C   s@   | j  }t|td  |td  |td  |td  |td  S )NrB   rC   rD   rE   rF   )r   rZ   r   )r   r   rm   rm   rn   memory_info  s    



zProcess.memory_infoc             C   s   | j  td  S )Nr9   )r   r   )r   rm   rm   rn   r9     s    zProcess.create_timec             C   s&   t tdrtj| jS t| j S d S )Nproc_num_threads)r   rf   r   r   r}   threads)r   rm   rm   rn   num_threads  s    
zProcess.num_threadsc             C   s$   | j  }tj|td  |td  S )Nr:   r;   )r   r   Zpctxswr   )r   r   rm   rm   rn   num_ctx_switches  s    
zProcess.num_ctx_switchesc             C   sL   t j| j}g }x*|D ]"\}}}tj|||}|j| qW trH| j  |S )N)rf   Zproc_threadsr   r   Zpthreadrs   r   rH   )r   r   r   Z	thread_idutimeZstimer   rm   rm   rn   r     s    zProcess.threadsinetc             C   s  |t kr(td|djdd t D f trt | \}}t }tj| j}x|D ]}|\}}}	}
}}}|| jksvt||ko|	|krRyt	| }W n t
k
r   t	tj }Y nX |ttfkr|
rtj|
 }
|rtj| }t|}t|	}	tj|||	|
||}|j| qRW | j  t|S t | \}}tj| j||}g }x|D ]z}|\}}}	}
}}|ttfkr|
rttj|
 }
|rtj| }t|}t|	}	t	| }tj|||	|
||}|j| qBW tr| j  |S )Nz+invalid %r kind argument; choose between %sz, c             S   s   g | ]}t |qS rm   )r   )r   r   rm   rm   rn   r     s    z'Process.connections.<locals>.<listcomp>)r
   r   r   r   r   rf   r   r   r   r   r   r   r   r	   r   r   r   r   Zpconnr   rH   r   Zproc_connectionsrs   r   )r   r   r   r   rt   r   ru   r   r   r   r   r   r1   r   r   rm   rm   rn   r     sX    





zProcess.connectionsNc             C   s   t j| j|| jS )N)r   Zwait_pidr   r   )r   Ztimeoutrm   rm   rn   wait  s    zProcess.waitc             C   s   t j| jS )N)r   getpriorityr   )r   rm   rm   rn   nice_get  s    zProcess.nice_getc             C   s   t j| j|S )N)r   setpriorityr   )r   valuerm   rm   rn   nice_set  s    zProcess.nice_setc             C   s   | j  td  }tj|dS )Nr1   ?)r   r   PROC_STATUSESget)r   coderm   rm   rn   r1     s    zProcess.statusc             C   s(   | j  }tj|td  |td  ddS )Nr<   r=   r   rz   rz   )r   r   Zpior   )r   r   rm   rm   rn   io_counters  s    

zProcess.io_countersc          
   C   sf   t r| jdkrdS tr8t|  tjd| j S Q R X n*ttdrRtj| jpPdS t	t
r\dnddS )z)Return process current working directory.r   Nz/proc/%s/cwdproc_open_filesz&supported only starting from FreeBSD 8r   )r   r   r   r   r   r   r   rf   Zproc_cwdrx   r   )r   rm   rm   rn   cwd  s    

zProcess.cwdZmmapz*path rss, private, ref_count, shadow_countz6addr, perms path rss, private, ref_count, shadow_countc             C   s   t d S )N)rx   )r   rm   rm   rn   _not_implemented)  s    zProcess._not_implementedr   c             C   s   t j| j}dd |D S )z8Return files opened by process as a list of namedtuples.c             S   s   g | ]\}}t j||qS rm   )r   Z	popenfile)r   pathr   rm   rm   rn   r   3  s    z&Process.open_files.<locals>.<listcomp>)rf   r   r   )r   r   rm   rm   rn   
open_files/  s    zProcess.open_filesproc_num_fdsc             C   s   t j| j}tr| j  |S )z=Return the number of file descriptors opened by this process.)rf   r   r   r   rH   )r   rt   rm   rm   rn   num_fds:  s    zProcess.num_fdsc             C   s   t j| jS )N)rf   Zproc_cpu_affinity_getr   )r   rm   rm   rn   cpu_affinity_getJ  s    zProcess.cpu_affinity_getc             C   s   t ttt }x$|D ]}||krtd||f qW ytj| j| W n\ tk
r } z@|j	t	j
t	jfkrx$|D ]}||krttd||f qtW  W Y d d }~X nX d S )Nz#invalid CPU #%i (choose between %s))tupleranger}   rr   r   rf   Zproc_cpu_affinity_setr   r   r   r   ZEDEADLK)r   ZcpusZallcpusZcpur   rm   rm   rn   cpu_affinity_setN  s    

zProcess.cpu_affinity_setc             C   s   t j| jS )N)rf   Zproc_memory_mapsr   )r   rm   rm   rn   memory_mapsg  s    zProcess.memory_maps)r   )N)-__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   rH   r   r   r   r0   r   r   rq   r   r   r   Zmemory_full_infor9   r   r   r   r   r   r   r   r1   r   r   r   Znt_mmap_groupedZnt_mmap_extr   r   rf   r   r   r   r   r   rm   rm   rm   rn   r     s\   
		
6	
r   )F)}r   
contextlibr   r   r   Zxml.etree.ElementTreeZetreeZElementTreer|   collectionsr   Zsocketr   r   r   r   r   rf   r   r   r	   r
   r   r   r   r   r   r   r   r   Z_compatr   _exceptionsr   r   r   Z__extra__all__ZSIDLZSTATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDZSZOMBZSTATUS_ZOMBIEZSWAITZSTATUS_WAITINGZSLOCKZSTATUS_LOCKEDr   ZSDEADZSTATUS_WAKINGZSONPROCZSACTIVEZSDYINGZSTATUS_DEADZ
SSUSPENDEDZSTATUS_SUSPENDEDZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZTCPS_SYN_SENTZCONN_SYN_SENTZTCPS_SYN_RECEIVEDZ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_CLOSINGr   Z	CONN_NONEr   sysconfZPAGESIZEZAF_LINKdictr   rI   rT   rZ   Zpfullmemr^   ra   rb   rc   ro   rp   rq   r   rr   rw   rv   ry   r   r   Z
disk_usageZdisk_io_countersr   Znet_if_addrsr   r   r   r   r   r   r   r   r   contextmanagerr   objectr   rm   rm   rm   rn   <module>   s  




	
#
6


