Your IP : 216.73.216.172


Current Path : /lib/python3/dist-packages/iotop/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/iotop/__pycache__/data.cpython-38.pyc

U

�Z�d+<�	@s�ddlmZddlZddlZddlZddlZddlZddlZddlZddl	Z	z e
e	d�sjddlmZee	_Wn ee
fk
r�e	j	e	_YnXej�d�ZzddlmZe�ZWnek
r�dZYnXdZer�e�sed	�ed
�es�ed�e�sed�e�d
�ddlmZmZddlmZmZmZmZddl m!Z!m"Z"Gdd�de#�Z$Gdd�de$�Z%d
Z&d
Z'dZ(d
Z)dZ*Gdd�de#�Z+dd�Z,dd�Z-dd�Z.Gdd �d e$�Z/Gd!d"�d"e$�Z0Gd#d$�d$e$�Z1dS)%�)�print_functionN�	monotonic)rz
/proc/self/io)�VmStatFTz<Could not run iotop as some of the requirements are not met:z- Linux >= 2.6.20 withz`  - I/O accounting support (CONFIG_TASKSTATS, CONFIG_TASK_DELAY_ACCT, CONFIG_TASK_IO_ACCOUNTING)z0  - VM event counters (CONFIG_VM_EVENT_COUNTERS)�)�ioprio�vmstat)�
Connection�NETLINK_GENERIC�U32Attr�
NLM_F_REQUEST)�
Controller�GeNlMessagec@seZdZdZdd�ZdS)�DumpableObjectzBBase class for objects that allows easy introspection when printedcCs$dtt|��dd�t�|j�fS)Nz%s: %s>���)�str�type�pprintZpformat�__dict__��self�r�,/usr/lib/python3/dist-packages/iotop/data.py�__repr__Ks
�zDumpableObject.__repr__N)�__name__�
__module__�__qualname__�__doc__rrrrrrIsrc@sLeZdZdddddgZdZdd�Zdd
d�Zdd
�Zdd�Ze	dd��Z
dS)�Stats)�blkio_delay_total�()�swapin_delay_total�8)�
read_bytes�)�write_bytes�)Zcancelled_write_bytesiFcCsP|j}tjD],\}}|||d�}t�d|�d||<qtjsL|jdkt_dS)N��Qr)rr�members_offsets�struct�unpack�has_blkio_delay_totalr)rZtask_stats_buffer�sd�name�offset�datarrr�__init___szStats.__init__rc	Cs>|j}|j}|j}tjD] \}}|||||||<qdS)z3Update destination from operator(self, other_stats)N�rrr()	r�other_stats�destination�coeffZddr,Zod�memberr.rrr�
accumulatejs
zStats.accumulatecCs|j||dd�S)z*Update destination with self - other_statsr)r4)r6)rr2r3rrr�deltarszStats.deltacCs,|j}tjD]\}}||dkrdSqdS)NrFTr1)rr,r-r.rrr�is_all_zerovs
zStats.is_all_zerocCs,t�t�}|j}tjD]\}}d||<q|S)Nr)r�__new__rr()�statsZstdr-r.rrr�build_all_zero}s


zStats.build_all_zeroN)r)rrrr(r+r0r6r7r8�staticmethodr;rrrrrTs�
r��c@s$eZdZdd�Zdd�Zdd�ZdS)�TaskStatsNetlinkcCs*||_tt�|_t|j�}|�d�|_dS)NZ	TASKSTATS)�optionsrr	�
connectionrZ
get_family_id�	family_id)rr@Z
controllerrrrr0�s

zTaskStatsNetlink.__init__cCst|jttt|�gtd�S)N)�cmd�attrs�flags)r
rB�TASKSTATS_CMD_GETr
�TASKSTATS_CMD_ATTR_PIDr)r�tidrrr�
build_request�s
�zTaskStatsNetlink.build_requestc
Cs�|j�|j�zt�|j�}Wn:tk
rX}z|jtjkrFWY�
dS�W5d}~XYnX|j�	�D]\}}|t
krd|��}q�qddS|tj
}t|�dkr�dSt�d|dd��d}|dks�t�t|�S)Ni�H�rr=)�task_stats_request�sendrAr
Zrecv�OSError�errnoZESRCHrD�items�TASKSTATS_TYPE_AGGR_PID�nested�TASKSTATS_TYPE_STATSr/�lenr)r*�AssertionErrorr)r�threadZreply�eZ	attr_typeZ
attr_valueZtaskstats_dataZtaskstats_versionrrr�get_single_task_stats�s$

z&TaskStatsNetlink.get_single_task_statsN)rrrr0rIrXrrrrr?�sr?cCs�g|_d}|jpgD]t}zt|�}WnRtk
rvzt�|�}Wn(tk
rjtd|tj	d�d}YnX|j
}YnX|s|j�|�q|r�t�d�dS)zDBuild options.uids from options.users by resolving usernames to UIDsFz
Unknown user:)�fileTrN)
�uidsZusers�int�
ValueError�pwd�getpwnam�KeyError�print�sys�stderrZpw_uid�append�exit)r@�error�u�uidZpasswdrrr�	find_uids�s 
rhcCsTi}z6td|dd�D] }|�dd�\}}|��||<qWntk
rNYnX|S)Nz/proc/%d/status�replace)�errors�:r)�open�split�strip�IOError)�pidZresult_dict�line�key�valuerrr�parse_proc_pid_status�srtcCsFz|�d�WStk
r*|�d�YStk
r@|YSXdS)Nzutf-8Z
string_escape)�decode�UnicodeDecodeError�encode�AttributeError)�srrr�safe_utf8_decode�srzc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�
ThreadInfozStats for a single threadcCs.||_d|_d|_t�t�|_|�|�|_dS)NT)rH�mark�stats_totalrr9�stats_deltarIrL)rrH�taskstats_connectionrrrr0�s
zThreadInfo.__init__cCst�|j�S�N)r�getrHrrrr�
get_ioprio�szThreadInfo.get_iopriocCst�tj|j||�Sr�)r�
set_ioprioZIOPRIO_WHO_PROCESSrH)r�ioprio_class�ioprio_datarrrr��s�zThreadInfo.set_iopriocCs&|js||_|�|j|j�||_dSr�)r}r7r~)rr:rrr�update_stats�szThreadInfo.update_statsN)rrrrr0r�r�r�rrrrr{�s
r{c@sheZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�ProcessInfoz�Stats for a single process (a single line in the output): if
    options.processes is set, it is a collection of threads, otherwise a single
    thread.cCs:||_d|_d|_i|_t��|_t��|_t�	�|_
dSr�)rprg�user�threadsrr;r~�stats_accum�timerZstats_accum_timestamp)rrprrrr0�s

zProcessInfo.__init__cCs8|jr|js|j|jkrdS|jr4|��|jkr4dSdS)NFT)�pids�	processesrprZ�get_uid)rr@rrr�is_monitoreds
�zProcessInfo.is_monitoredcCsZ|jr|jSzt�d|j�tj}Wntk
r>d}YnX||jkrVd|_||_|S)Nz/proc/%d)rg�os�statrp�ST_UIDrNr��rrgrrrr�s

zProcessInfo.get_uidc	CsZ|��}|dk	rP|jsPztt�|�j�|_Wn"ttfk
rNt|�|_YnX|jpXdS)Nz{none})	r�r�rzr]�getpwuidZpw_namer_rxrr�rrr�get_user$szProcessInfo.get_usercCsztd|j�}|�d�}Wntk
r2YdSXt|j�}|sd|�dd�}|r\d|}nd}|Sd}t|�d|j��}||jkr�t|��dd�}|�dd�}||kr�|d	|7}|�d
�}	|	d�d�r�|	d�	d�d
}
|	d|
d�|	d<d�
|	���}t||�S)Nz/proc/%d/cmdlineiz{no such process}�Name�z[%s]z	{no name}ZTgidz [%s]�r�/r� )
rlrp�readrortr�r[rm�
startswith�rfind�joinrnrz)rZproc_cmdlineZcmdlineZproc_statusZproc_status_name�suffix�tgidZ	tgid_nameZthread_name�partsZfirst_command_charrrr�get_cmdline-s2



zProcessInfo.get_cmdlinecCs4|r|j��S|j��D]}|j��sdSqdS)NTF)r�r8r��valuesr~)rZaccumulated�trrr�did_some_ioLs
zProcessInfo.did_some_iocCs0tdd�|j��D��}t|�dkr,|��SdS)Ncss|]}|��VqdSr�)r�)�.0r�rrr�	<genexpr>Usz)ProcessInfo.get_ioprio.<locals>.<genexpr>rz?dif)�setr�r�rT�pop)rZ
prioritiesrrrr�TszProcessInfo.get_iopriocCs |j��D]}|�||�q
dSr�)r�r�r�)rr�r�rVrrrr�ZszProcessInfo.set_iopriocCst�|���Sr�)rZsort_keyr�rrrr�ioprio_sort_key^szProcessInfo.ioprio_sort_keycCs*|j�|d�}|s&t||�}||j|<|Sr�)r�r�r{)rrHrrVrrr�
get_threadas


zProcessInfo.get_threadcCs�t��}|j��D]\}}|js|�|j|�qtdd�|j��D��|_t|j�}|s\dS|j	|_	|j
|_
||_|j�|j|j�dS)NcSsg|]\}}|js||f�qSr)r|)r�rHrVrrr�
<listcomp>ms�z,ProcessInfo.update_stats.<locals>.<listcomp>FT)rr;r�rPr|r6r~�dictrTrr r�)rr~rHrVZ
nr_threadsrrrr�hs�

zProcessInfo.update_statsN)rrrrr0r�r�r�r�r�r�r�r�r�r�rrrrr��s		r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ProcessListcCs2i|_||_||_t��|_t��|_|��dSr�)	r�rr@r�r�	timestamprr�update_process_counts)rrr@rrrr0~s

zProcessList.__init__cCs8|j�|d�}|s$t|�}||j|<|�|j�r4|SdS)zyEither get the specified PID from self.processes or build a new
        ProcessInfo if we see this PID for the first timeN)r�r�r�r�r@)rrp�processrrr�get_process�s
zProcessList.get_processc	Cs�|jjr|jjSt�d�}|jjr0dd�|D�Sg}|D]X}d|dkrTdkr8nq8z"|�ttt�d|d���Wq8tk
r�Yq8Xq8|S)	Nz/proccSs0g|](}d|dkr dkrnqt|��qS)�0r�9)r[)r�r�rrrr��s
z*ProcessList.list_tgids.<locals>.<listcomp>r�rr�z/proc/z/task)	r@r�r��listdirr��extend�mapr[rN)rZtgids�tidsr�rrr�
list_tgids�s
�
zProcessList.list_tgidscCsj|jjs|gSztttt�d|���}Wntk
rBgYSX|jjrftt	|jj��
t	|���}|S)Nz
/proc/%d/task)r@r��listr�r[r�r�rNr�r��intersection)rr�r�rrr�	list_tids�s
zProcessList.list_tidsc
Cs�t��}||j|_||_d}}|��D]l}|�|�}|s>q*|�|�D]L}|�||j�}|j�	|�}|rH|�
|�|j}	||	j7}||	j
7}d|_qHq*||f|j��fS)NrF)r�rr�Zdurationr�r�r�r�rrXr�r~r"r$r|rr7)
rZ
new_timestampZ
total_readZtotal_writer�r�rHrVr:r7rrrr��s$




z!ProcessList.update_process_countscCsL|j��D]}|j��D]
}d|_qq
|��}tdd�|j��D��|_|S)NTcSs g|]\}}|��r||f�qSr)r�)r�rpr�rrrr��s�z1ProcessList.refresh_processes.<locals>.<listcomp>)r�r�r�r|r�r�rP)rr�rVZtotal_read_and_writerrr�refresh_processes�s
�
zProcessList.refresh_processescCs
i|_dSr�)r�rrrr�clear�szProcessList.clearN)
rrrr0r�r�r�r�r�r�rrrrr�}s
r�)2Z
__future__rrOr�rr]r�r)rar��hasattrr�ImportError�RuntimeError�path�existsZioaccountingZiotop.vmstatrZvmstat_froZvm_event_countersr`rdZiotoprrZ
iotop.netlinkrr	r
rZiotop.genetlinkrr
�objectrrrFrGrQZTASKSTATS_TYPE_PIDrSr?rhrtrzr{r�r�rrrr�<module>s^





5*