????

Your IP : 3.145.50.71


Current Path : /lib/python3.9/site-packages/iotop/__pycache__/
Upload File :
Current File : //lib/python3.9/site-packages/iotop/__pycache__/data.cpython-39.opt-1.pyc

a

��Jc,;�@s�ddlmZddlZddlZddlZddlZddlZddlZddlZddl	Z	ej
�d�Zzddl
mZe�ZWndZYn0dZer�es�ed�ed�es�ed	�es�ed
�e�d�ddlmZmZdd
lmZmZmZmZddlmZmZGdd�de�ZGdd�de�Z dZ!dZ"dZ#dZ$dZ%Gdd�de�Z&dd�Z'dd�Z(dd�Z)Gdd�de�Z*Gdd �d e�Z+Gd!d"�d"e�Z,d#d$�Z-dS)%�)�print_functionNz
/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, kernel.task_delayacct sysctl)z0  - VM event counters (CONFIG_VM_EVENT_COUNTERS)�)�ioprio�vmstat)�
Connection�NETLINK_GENERIC�U32Attr�
NLM_F_REQUEST)�
Controller�GeNlMessagec@seZdZdZdd�ZdS)�DumpableObjectzFBase class for all objects that allows easy introspection when printedcCs$dtt|��dd�t�|j�fS)Nz%s: %s>���)�str�type�pprintZpformat�__dict__��self�r�./usr/lib/python3.9/site-packages/iotop/data.py�__repr__>szDumpableObject.__repr__N)�__name__�
__module__�__qualname__�__doc__rrrrrr
<sr
c@sFeZdZgd�ZdZdd�Zddd�Zdd	�Zd
d�Ze	dd
��Z
dS)�Stats))�blkio_delay_total�()�swapin_delay_total�8)�
read_bytes�)�write_bytes�)Zcancelled_write_bytesiNcCsL|j}tjD],\}}|||d�}t�d|�d||<qtjsHt�t_dS)N��Qr)rr�members_offsets�struct�unpack�has_blkio_delay_total�sysctl_task_delayacct)rZtask_stats_buffer�sd�name�offset�datarrr�__init__QszStats.__init__rc	Cs>|j}|j}|j}tjD] \}}|||||||<qdS)z3Update destination from operator(self, other_stats)N�rrr')	r�other_stats�destination�coeff�ddr,Zod�memberr.rrr�
accumulate\s
zStats.accumulatecCs|j||dd�S)z*Update destination with self - other_statsr)r4)r7)rr2r3rrr�deltadszStats.deltacCs,|j}tjD]\}}||dkrdSqdS)NrFTr1)rr,r-r.rrr�is_all_zerohs
zStats.is_all_zerocCs,t�t�}|j}tjD]\}}d||<q|S)Nr)r�__new__rr')�statsZstdr-r.rrr�build_all_zeroos


zStats.build_all_zero)r)rrrr'r*r0r7r8r9�staticmethodr<rrrrrFs
r��c@s$eZdZdd�Zdd�Zdd�ZdS)�TaskStatsNetlinkcCs*||_tt�|_t|j�}|�d�|_dS)NZ	TASKSTATS)�optionsrr�
connectionrZ
get_family_id�	family_id)rrAZ
controllerrrrr0�s

zTaskStatsNetlink.__init__cCst|jttt|�gtd�S)N)�cmd�attrs�flags)rrC�TASKSTATS_CMD_GETr	�TASKSTATS_CMD_ATTR_PIDr
)r�tidrrr�
build_request�s
�zTaskStatsNetlink.build_requestc
Cs�|j�|j�zt�|j�}Wn@ty^}z(|jtjkrHWYd}~dS�WYd}~n
d}~00|j�	�D]\}}|t
krj|��}q�qjdS|tj
}t|�dkr�dSt�d|dd��d}t|�S)Ni�H�r)�task_stats_request�sendrBrZrecv�OSError�errnoZESRCHrE�items�TASKSTATS_TYPE_AGGR_PID�nested�TASKSTATS_TYPE_STATSr/�lenr(r)r)r�threadZreply�eZ	attr_typeZ
attr_valueZtaskstats_dataZtaskstats_versionrrr�get_single_task_stats�s"
z&TaskStatsNetlink.get_single_task_statsN)rrrr0rJrXrrrrr@�sr@cCs�g|_d}|jpgD]p}zt|�}WnNtyrzt�|�}Wn&tyftd|tj	d�d}Yn0|j
}Yn0|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�stderr�pw_uid�append�exit)rA�error�u�uid�passwdrrr�	find_uids�s 
rjcCsNi}z2td|�D] }|�dd�\}}|��||<qWntyHYn0|S)Nz/proc/%d/statusz:	r)�open�split�strip�IOError)�pidZresult_dict�line�key�valuerrr�parse_proc_pid_status�srscCsBz|�d�WSty(|�d�YSty<|YS0dS)Nzutf-8Z
string_escape)�decode�UnicodeDecodeError�encode�AttributeError)�srrr�safe_utf8_decode�sryc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�
ThreadInfozStats for a single threadcCs.||_d|_d|_t�t�|_|�|�|_dS)NT)rI�mark�stats_totalrr:�stats_deltarJrM)rrI�taskstats_connectionrrrr0�s
zThreadInfo.__init__cCst�|j�S�N)r�getrIrrrr�
get_ioprio�szThreadInfo.get_iopriocCst�tj|j||�Sr)r�
set_ioprioZIOPRIO_WHO_PROCESSrI)r�ioprio_class�ioprio_datarrrr��s�zThreadInfo.set_iopriocCs&|js||_|�|j|j�||_dSr)r|r8r})rr;rrr�update_stats�szThreadInfo.update_statsN)rrrrr0r�r�r�rrrrrz�s
rzc@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)
rorh�user�threadsrr<r}�stats_accum�timeZstats_accum_timestamp)rrorrrr0�s

zProcessInfo.__init__cCs8|jr|js|j|jvrdS|jr4|��|jvr4dSdS)NFT)�pids�	processesrorZ�get_uid)rrArrr�is_monitored�s
�zProcessInfo.is_monitoredcCsX|jr|jSzt�d|j�tj}Wnty<d}Yn0||jkrTd|_||_|S)Nz/proc/%d)rh�os�statro�ST_UIDrOr��rrhrrrr�s

zProcessInfo.get_uidc	CsX|��}|durN|jsNztt�|�j�|_Wn ttfyLt|�|_Yn0|jpVdS)Nz{none})	r�r�ryr]�getpwuid�pw_namer_rwrr�rrr�get_userszProcessInfo.get_usercCs
ztd|j�}|�d�}Wnty0YdS0t|j�}|sb|�dd�}|rZd|}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� )
rkro�readrnrsr�r[rl�
startswith�rfind�joinrmry)rZproc_cmdlineZcmdlineZproc_statusZproc_status_name�suffix�tgidZ	tgid_nameZthread_name�partsZfirst_command_charrrr�get_cmdlines2



zProcessInfo.get_cmdlinecCs4|r|j��S|j��D]}|j��sdSqdS)NTF)r�r9r��valuesr})rZaccumulated�trrr�did_some_io;s
zProcessInfo.did_some_iocCs0tdd�|j��D��}t|�dkr,|��SdS)Ncss|]}|��VqdSr)r�)�.0r�rrr�	<genexpr>D�z)ProcessInfo.get_ioprio.<locals>.<genexpr>rz?dif)�setr�r�rU�pop)rZ
prioritiesrrrr�CszProcessInfo.get_iopriocCs |j��D]}|�||�q
dSr)r�r�r�)rr�r�rVrrrr�IszProcessInfo.set_iopriocCst�|���Sr)rZsort_keyr�rrrr�ioprio_sort_keyMszProcessInfo.ioprio_sort_keycCs*|j�|d�}|s&t||�}||j|<|Sr)r�r�rz)rrIr~rVrrr�
get_threadPs


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�rIrVrrr�
<listcomp>\s�z,ProcessInfo.update_stats.<locals>.<listcomp>FT)rr<r�rQr{r7r}�dictrUrrr�)rr}rIrVZ
nr_threadsrrrr�Ws�

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�r~rAr��	timestamprr�update_process_counts)rr~rArrrr0ls

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�rA)rro�processrrr�get_processws
zProcessList.get_processc	Cs�|jjr|jjSt�d�}|jjr0dd�|D�Sg}|D]V}d|dkrTdkr8nq8z"|�ttt�d|d���Wq8ty�Yq80q8|S)	Nz/proccSs0g|](}d|dkr dkrnqt|��qS)�0r�9)r[)r�r�rrrr��r�z*ProcessList.list_tgids.<locals>.<listcomp>r�rr�z/proc/z/task)	rAr�r��listdirr��extend�mapr[rO)rZtgids�tidsr�rrr�
list_tgids�s
"zProcessList.list_tgidscCsh|jjs|gSztttt�d|���}Wnty@gYS0|jjrdtt	|jj��
t	|���}|S)Nz
/proc/%d/task)rAr��listr�r[r�r�rOr�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
}	||	j7}||	j7}d|_
qHq*||f|j��fS)NrF)r�r�Zdurationr�r�r�r�r~rXr�r}r!r#r{rr8)
rZ
new_timestampZ
total_readZtotal_writer�r�rIrVr;r8rrrr��s$




z!ProcessList.update_process_countscCsL|j��D]}|j��D]
}d|_qq
|��}tdd�|j��D��|_|S)NTcSs g|]\}}|��r||f�qSr)r�)r�ror�rrrr��s�z1ProcessList.refresh_processes.<locals>.<listcomp>)r�r�r�r{r�r�rQ)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�ks
r�cCs\zBtd��&}tt|������Wd�WS1s60YWntyVYdS0dS)Nz/proc/sys/kernel/task_delayacct)rk�boolr[r�rm�FileNotFoundError)�frrrr+�s

8r+).Z
__future__rrPr�rr]r�r(rar��path�existsZioaccountingZiotop.vmstatrZvmstat_fZvm_event_countersr`reZiotoprrZ
iotop.netlinkrrr	r
Ziotop.genetlinkrr�objectr
rrGrHrRZTASKSTATS_TYPE_PIDrTr@rjrsryrzr�r�r+rrrr�<module>sT



5)^