ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
bfb                 @   sz  d dl m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Zd dl	Z	d dl
Z
d dlZd dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ dd	d
ddddgZdd Zdd Zdd Zdd Zdd Ze ZG dd de Z!G dd de Z"G dd de Z#G dd  d e Z$G d!d" d"e Z%G d#d$ d$e&Z'd%d& Z(d'd( Z)d)d* Z*d+e
j+d   Z,d,d- Z-dS ).    )print_functionN)	find_uidsTaskStatsNetlinkProcessListStatssysctl_task_delayacct)
ThreadInfo)VERSION)ioprio)IoprioSetErrorBKMGTPEc             C   s`   | dkrd}n| dk r"d}|  } ndS t tj| d dd }d|t| dd| >  t| f S )	Nr    -z0.00 B   
   z	%s%.2f %s   )intmathlogfloatUNITS)sizeZsignZexpo r   /usr/lib/python3.6/ui.py
human_size-   s    r    c             C   s   | j rd|d  S t|S )Nz%.2f Kg      @)	kilobytesr    )optionsbytesr   r   r   format_size9   s    r$   c             C   s   t | |ot|| d S )Nz/s)r$   r   )r"   r   durationr   r   r   format_bandwidth>   s    r&   c                s    fdd}j r4|j}fdd}tj |j  n|j}fdd}||j}||j}||j }|j|j	 }	t
d|	}	||	 }
||||
fS )Nc                s   dt d|  d   S )Nz%.2f %%g(\X@g    cA)min)Zdelay)r%   r   r   delay2percentD   s    z#format_stats.<locals>.delay2percentc                s
   t  | S )N)r$   )r   r%   )r"   r   r   <lambda>H   s    zformat_stats.<locals>.<lambda>c                s   t  | |S )N)r&   )r   r%   )r"   r   r   r)   L   s   r   )accumulatedstats_accumtimeZstats_accum_timestampstats_deltablkio_delay_totalswapin_delay_total
read_byteswrite_bytescancelled_write_bytesmax)r"   Zprocessr%   r(   statsZdisplay_formatio_delayswapin_delayr0   Zwritten_bytesr1   r   )r%   r"   r   format_statsA   s    



r7   c              C   sB   yt tdj j S  tk
r< }  zt|  dS d } ~ X nX d S )Nz/proc/sys/kernel/pid_max   )lenopenreadstrip	Exceptionprint)er   r   r   get_max_pid_widthV   s
    r@   c               @   s   e Zd ZdS )CancelInputN)__name__
__module____qualname__r   r   r   r   rA   d   s    rA   c               @   s   e Zd ZdS )
InvalidIntN)rB   rC   rD   r   r   r   r   rE   e   s    rE   c               @   s   e Zd ZdS )
InvalidPidN)rB   rC   rD   r   r   r   r   rF   f   s    rF   c               @   s   e Zd ZdS )
InvalidTidN)rB   rC   rD   r   r   r   r   rG   g   s    rG   c               @   s   e Zd ZdS )InvalidIoprioDataN)rB   rC   rD   r   r   r   r   rH   h   s    rH   c            	   @   s   e Zd Zdd dfdd dfdd dfdd dfdd dfd	d dfd
d dfdd dfgZdd Zdd Zdd Zdd Zdd Zd0ddZ	d1ddZ
dd Zdd Zdd  Zd!d" Zd2d#d$Zd3d&d'Zd(d) Zd*d+ Zd,d- Zd.d/ ZdS )4IOTopUIc             C   s   | j S )N)pid)psr   r   r   r)   q   s    zIOTopUI.<lambda>Fc             C   s   | j  S )N)Zioprio_sort_key)rK   rL   r   r   r   r)   r   s    c             C   s   | j  S )N)get_user)rK   rL   r   r   r   r)   s   s    c             C   s   |j S )N)r0   )rK   rL   r   r   r   r)   t   s    Tc             C   s   |j |j S )N)r1   r2   )rK   rL   r   r   r   r)   u   s    c             C   s   |j S )N)r/   )rK   rL   r   r   r   r)   v   s    c             C   s   |j pt|jp|j  S )N)r.   r   r0   r1   )rK   rL   r   r   r   r)   y   s   c             C   s   | j  S )N)get_cmdline)rK   rL   r   r   r   r)   {   s    c             C   st   || _ || _d| _tj| j d | _| jjsp|| _| j  yt	j
  t	j  t	jd W n t	jk
rn   Y nX d S )N   r   r   )process_listr"   sorting_keyrI   sorting_keyssorting_reversebatchwinresizecursesZuse_default_colorsZstart_colorcurs_seterror)selfrU   rP   r"   r   r   r   __init__~   s    zIOTopUI.__init__c             C   s   | j j \| _| _d S )N)rU   Zgetmaxyxheightwidth)rZ   r   r   r   rV      s    zIOTopUI.resizec       
      C   s^  d}t j }| jjs.|jtjj t jt j	B  x(| jj
d ksL|| jj
k rX| jj \}}| j|dk||| jj | jj
d k	r|d7 }|| jj
krP n|dkrd}y|j| jjd }W nB t jk
r } z$|jr|jd tjkrg }n W Y d d }~X nX x.|D ]&\}}|t jt jB @ rtjd qW | jjs>| j  |r2| jj }	| j|	 q2W d S )Nr   r   g     @@)selectpollr"   rT   registersysstdinfilenoZPOLLINZPOLLPRI
iterationsrP   refresh_processesrefresh_displayr%   delay_secondsrY   argserrnoZEINTRZPOLLERRZPOLLHUPexitrV   rU   getch
handle_key)
rZ   rd   r_   totalactualZeventsr?   fdZeventkeyr   r   r   run   s:    


zIOTopUI.runc             C   s   | j  | _ d S )N)rS   )rZ   r   r   r   reverse_sorting   s    zIOTopUI.reverse_sortingc             C   s   | j }|  j |7  _ td| j | _ tttjd | j | _ | jsh| j dkrh|dkrZd| _ n|dkrhd| _ || j krtj| j  d | _d S )Nr   r   r8   rO         )r8   rO   )rQ   r3   r'   r9   rI   rR   has_swapin_iorS   )rZ   ZdeltaZorig_sorting_keyr   r   r   adjust_sorting_key   s    

zIOTopUI.adjust_sorting_keyNc             C   s   | j jddtdtjB | j | j jdd|tj | j j  tj	  tj
d | j jdt|}tj
d tj  |dkr~|S |rt |S )Nr   r    r   )Nr   )rU   hlineordrW   A_NORMALr]   addstrA_BOLDrefreshZechorX   Zgetstrr9   ZnoechorA   )rZ   promptdefaultempty_is_cancelinpr   r   r   
prompt_str   s    


zIOTopUI.prompt_strc             C   s6   | j |||}yt|S  tk
r0   t Y nX d S )N)r   r   
ValueErrorrE   )rZ   r~   r   r   r   r   r   r   
prompt_int   s
    zIOTopUI.prompt_intc             C   s>   y
| j dS  tk
r$   t Y n tk
r8    Y nX d S )NzPID to ionice: )r   rE   rF   rA   )rZ   r   r   r   
prompt_pid   s    

zIOTopUI.prompt_pidc             C   s>   y
| j dS  tk
r$   t Y n tk
r8    Y nX d S )NzTID to ionice: )r   rE   rG   rA   )rZ   r   r   r   
prompt_tid   s    

zIOTopUI.prompt_tidc             C   sd   y.|d k	r| j d| |d}n| j dd d}W n tk
rH   t Y nX |dk sZ|dkr`t |S )Nz'I/O priority data (0-7, currently %s): FzI/O priority data (0-7): r   rt   )r   rE   rH   )rZ   ioprio_datar   r   r   r   prompt_data   s    zIOTopUI.prompt_datac             C   sv  y|j |}W n tk
r&   d}Y nX t|d }x:| jjddtdtjB | j | jj	dd|tj
 t|}xPt|D ]D\}}d| }	||krtj}
ntj}
| jj	d||	|
 |t|	7 }q|W x| jj }|tjtdfkr|dkr|d8 }P q|tjtdfkr ||k r |d7 }P q|tjtdtdfkrB|| S |d	tjtjtjtd
tdfkrt qW q8W d S )Nr   r   rw   z %s lr
   qQ)indexr   r9   rU   rx   ry   rW   rz   r]   insstrr|   	enumerate	A_REVERSErk   KEY_LEFT	KEY_RIGHTZ	KEY_ENTERZ
KEY_CANCELZ	KEY_CLOSEZKEY_EXITrA   )rZ   r~   Zdisplay_listZret_listZselectedZset_lenoffsetiitemZdisplayattrrp   r   r   r   
prompt_set   s:    

zIOTopUI.prompt_setc             C   s8   d}dddg}dddg}|d kr$d}| j ||||}|S )	NzI/O priority class: z	Real-timezBest-effortZIdleZrtZbeidler   )r   )rZ   ioprio_classr~   Zclasses_promptZclasses_retr   r   r   r   prompt_class  s    

zIOTopUI.prompt_classError!c             C   sN   | j jddtdtjB | j | j jddd| tj | j j  t	j
d d S )Nr   r   rw   z  %s  )rU   rx   ry   rW   rz   r]   r   r   r}   r,   Zsleep)rZ   rY   r   r   r   prompt_error"  s    
zIOTopUI.prompt_errorc             C   s,   | j jddtdtjB | j | j j  d S )Nr   r   rw   )rU   rx   ry   rW   rz   r]   r}   )rZ   r   r   r   prompt_clear(  s    zIOTopUI.prompt_clearc          "      s    fdd} fdd} fdd} fdd}t d	d
d t ddd t d fddt d fddt d|t d|t d|t d|t d|t d|t d|t d|tj fddtj fddtj fddtj fddi}|j|dd }|  d S )Nc                  s    j  jdN  _d S )NT)r"   r*   r   )rZ   r   r   toggle_accumulated-  s    z.IOTopUI.handle_key.<locals>.toggle_accumulatedc                  s    j  jdN  _d S )NT)r"   onlyr   )rZ   r   r   toggle_only_io/  s    z*IOTopUI.handle_key.<locals>.toggle_only_ioc                  s(    j  jdN  _ jj   jj  d S )NT)r"   	processesrP   clearre   r   )rZ   r   r   toggle_processes1  s    
z,IOTopUI.handle_key.<locals>.toggle_processesc                 s`  y j jr  j }  jj| }n j }t| jj}|j }t	j
|\}} j|}|dkrdd}n
 j|}|j||  jj   jj  W n tk
r } z jd|j  W Y d d }~X n tk
r    jd Y n~ tk
r    jd Y nb tk
r    jd Y nD tk
r6    jd Y n& tk
rR    j  Y n
X  j  d S )Nr   r   zError setting I/O priority: %szInvalid process id!zInvalid thread id!zInvalid I/O priority data!zInvalid integer!)r"   r   r   rP   Zget_processr   r   taskstats_connection
get_ioprior
   Zto_class_and_datar   r   Z
set_ioprior   re   r   r   errrF   rG   rH   rE   rA   r   )rJ   Z	exec_unittidZioprio_valuer   r   r?   )rZ   r   r   ionice5  s:    



 z"IOTopUI.handle_key.<locals>.ionicer   c               S   s
   t jdS )Nr   )ra   rj   r   r   r   r   r)   Z  s    z$IOTopUI.handle_key.<locals>.<lambda>r   c               S   s
   t jdS )Nr   )ra   rj   r   r   r   r   r)   \  s    r   c                  s    j  S )N)rr   r   )rZ   r   r   r)   ^  s    Rc                  s    j  S )N)rr   r   )rZ   r   r   r)   `  s    aAoOrK   r   r   Ic                  s
    j dS )Nr   r   )rv   r   )rZ   r   r   r)   r  s    c                  s
    j dS )Nr   )rv   r   )rZ   r   r   r)   t  s    c                  s    j ttj S )N)rv   r9   rI   rR   r   )rZ   r   r   r)   v  s    c                  s    j ttjS )N)rv   r9   rI   rR   r   )rZ   r   r   r)   x  s    c               S   s   d S )Nr   r   r   r   r   r)   {  s    )ry   rW   r   r   ZKEY_HOMEZKEY_ENDget)rZ   rp   r   r   r   r   Zkey_bindingsactionr   )rZ   r   rl   ,  sL    $




zIOTopUI.handle_keyc                s   fdd}fdd}t t|jjj }tjj d  jj	rPdd ndd |j
 fd	djd
 jjs|jd d = t t||S )Nc                sR  t  j|  jj}|\}}}}dt }| jf}|d7 }|| j f7 }|d7 }|| j d d f7 }|d7 }|||f7 } jr|d7 }|||f7 }n jj	r|d7 }|d7 }|d	7 }|| }| j
 }	 jj	s. jt| }
d
|
  k ot|	k n  r.|
d d
 }|
| d  }|	d | d |	|d   }	||	7 } jj	sN|d  j }|S )Nz%%%ddz %4sz %-8s   z
 %11s %11sz %7s %7sz %s ?unavailable?rw   r   r   ~)r   )r7   r"   rP   r%   MAX_PID_WIDTHrJ   r   rM   ru   rT   rN   r]   r9   )rK   r4   r5   r6   r0   r1   formatZparamslineZcmdlineZremaining_lengthZlen1Zoffset2)rZ   r   r   r     s:    

z IOTopUI.get_data.<locals>.formatc                s    j j p| j j jS )N)r"   r   Zdid_some_ior*   )rK   )rZ   r   r   should_format  s    
z'IOTopUI.get_data.<locals>.should_formatr   c             S   s   | j S )N)r+   )rK   r   r   r   r)     s    z"IOTopUI.get_data.<locals>.<lambda>c             S   s   | j S )N)r-   )rK   r   r   r   r)     s    c                s    | | S )Nr   )rK   )rp   stats_lambdar   r   r)     s    )rp   reverser   )listfilterrP   r   valuesrI   rR   rQ   r"   r*   sortrS   rT   r\   map)rZ   r   r   r   r   )rp   rZ   r   r   get_data~  s    

zIOTopUI.get_datac                s  dt j|d |jdt j|d |jdf dt j|d |jdt j|d |jdf gtdtd d }jjr|d7 }n|d	7 }|d
ddddddg}tj_jrt	 dkrd_j
d j }jjrdg| }tjd  fdd|D } fddD jjrjjdkrjxD ]}t| q8W jjt|krjtdj| x|D ]}	t|	jd qpW tjj  njj  x0tD ]$\}jjd|d j  qW jjtdtdtj B j j}
xt!t|D ]j r$d!kr$qtj }| }j"krJ|dd  }j"krv|tj#O }|j$rpdprd7 }|d |
 }|
t|8 }
jj|| qW jdk	rd }nd}t%t|j&d tt'| }xzt!|D ]nyNfdd }y||  W n( t(k
r0   || jd Y nX W n tj)k
rL   Y nX qW |rxjj*j&t d|tj# jj+  d S )"Nz,Total DISK READ : %s | Total DISK WRITE : %sr      r   z,Actual DISK READ: %s | Actual DISK WRITE: %s   rw   PIDZTIDz  PRIOz  USERz     DISK READz  DISK WRITEz  SWAPINz      IOz    COMMANDFz    TIMEz	%H:%M:%S c                s   g | ]} | qS r   r   ).0r   )current_timer   r   
<listcomp>  s    z+IOTopUI.refresh_display.<locals>.<listcomp>c                s   g | ]} | qS r   r   )r   rL   )r   r   r   r     s    r   r   zutf-8r8   rO   ><zoCONFIG_TASK_DELAY_ACCT and kernel.task_delayacct sysctl not enabled in kernel, cannot determine SWAPIN and IO %c                s    j j t d d|  d S )Nr   r   )rU   r{   r9   )r   )r   rZ   summaryr   r   
print_line  s    z+IOTopUI.refresh_display.<locals>.print_line)r8   rO   ),r&   r"   rjustr3   r   r   r   Zhas_blkio_delay_totalru   r   rv   r   r,   ZstrftimerT   quietr>   r   joinencodera   stdoutflushrU   Zeraser   r{   r]   rx   r9   ry   rW   r   rangerQ   r|   rS   r'   r\   boolUnicodeEncodeErrorrY   r   r}   )rZ   Z
first_timerm   rn   r%   rJ   ZtitleslinesrL   r   Zremaining_colsr   titleZ
status_msgZ	num_linesr   r   )r   r   rZ   r   r   rf     s    











 
 zIOTopUI.refresh_display)NT)NT)N)r   )rB   rC   rD   rR   r[   rV   rq   rr   rv   r   r   r   r   r   r   r   r   r   rl   r   rf   r   r   r   r   rI   n   s4   





!

 
	
R1rI   c             C   sf   |j rtjtjtj n$dd }tjtj| tjtj| t|}t||}t| ||}|j	  d S )Nc              _   s   t jd d S )Nr   )ra   rj   )rh   kwargsr   r   r   
clean_exit	  s    z$run_iotop_window.<locals>.clean_exit)
rT   signalSIGPIPESIG_DFLSIGINTSIGTERMr   r   rI   rq   )rU   r"   r   r   rP   Zuir   r   r   run_iotop_window  s    
r   c             C   s   y | j rtd | S tjt| S W n tk
rx } z<|jtjkrft|tj	d tdtj	d tj
d n W Y d d }~X nZ tjk
r } z<t|}|jddkr|jddks|jddkrn W Y d d }~X nX d S )N)filea  
The Linux kernel interfaces that iotop relies on now require root priviliges
or the NET_ADMIN capability. This change occured because a security issue
(CVE-2011-2494) was found that allows leakage of sensitive data across user
boundaries. If you require the ability to run iotop as a non-root user, please
configure sudo to allow you to run iotop as root.

Please do not file bugs on iotop about this.r   ZERRr   z
nocbreak()zendwin())rT   r   rW   wrapperOSErrorri   ZEPERMr>   ra   stderrrj   rY   strfind)r"   r?   Zstrer   r   r   	run_iotop  s"    
r   c             C   s   d}y:dd l }dd l}td |jdt t | |j|}W nX tk
r   dd l}dd l	}|j
|dd}td |j|  |j  |jj|}Y nX |j  |jdd	 |jd
 |jd
 tj| d S )Nz
iotop.profr   zProfiling using cProfilezcontinuation()r   )Z
lineeventszProfiling using hotshotr,   Zcalls2   )cProfilepstatsr>   Zrunctxglobalslocalsr   ImportErrorhotshotZhotshot.statsZProfileZruncallcloser4   loadZ
strip_dirsZ
sort_statsZprint_statsZprint_calleesosremove)ZcontinuationZ	prof_filer   r   r4   r   Zprofr   r   r   _profile6  s(    


r   aF  %s [OPTIONS]

DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
period. SWAPIN and IO are the percentages of time the thread spent respectively
while swapping in and waiting on I/O more generally. PRIO is the I/O priority at
which the thread is running (set using the ionice command).

Controls: left and right arrows to change the sorting column, r to invert the
sorting order, o to toggle the --only option, p to toggle the --processes
option, a to toggle the --accumulated option, i to change I/O priority, q to
quit, any other key to force a refresh.c                 s  yt jt jd W n t jk
r0   td Y nX tjtdt d} | j	ddddd	d
d | j	dddddd | j	ddddddd | j	dddddddd | j	d d!dd"d#d$d%d& | j	d'd(d)d*d#d+d,d& | j	d-d.dd/d	d0d | j	d1d2dd3d	d4d | j	d5d6dd7d	d8d | j	d9d:dd;d<d | j	d=d>d?d@dAdBd | j	dCddDd	tj
d | j \}|rt| jdEdFj|  t jpg _jpjpj_fdGdH jṙ fdIdJ}t| n   d S )KNr   z8unable to set locale, falling back to the default localeziotop )Zusageversionz-oz--only
store_truer   Fz1only show processes or threads actually doing I/O)r   destr   helpz-bz--batchrT   znon-interactive mode)r   r   r   z-nz--iterr   rd   ZNUMz-number of iterations before ending [infinite])typer   metavarr   z-dz--delayr   rg   z#delay between iterations [1 second]ZSECr   )r   r   r   r   r   z-pz--pidpidsappendz"processes/threads to monitor [all]r   )r   r   r   r   r   z-uz--userr   Zuserszusers to monitor [all]ZUSERz-Pz--processesr   z$only show processes, not all threadsz-az--accumulatedr*   z)show accumulated I/O instead of bandwidthz-kz--kilobytesr!   z.use kilobytes instead of a human friendly unitz-tz--timer,   z.add a timestamp on each line (implies --batch)z-qz--quietcountr   r   z/suppress some lines of header (implies --batch)z	--profileprofilezUnexpected arguments: rw   c                  s   t  S )N)r   r   )r"   r   r   r)     s    zmain.<locals>.<lambda>c            	      s   y
   W n   Y nX d S )Nr   r   )	main_loopr   r   safe_main_loop  s    
zmain.<locals>.safe_main_loop)locale	setlocaleLC_ALLErrorr>   optparseZOptionParserUSAGEr	   Z
add_optionZSUPPRESS_HELP
parse_argsrY   r   r   r   rT   r,   r   r   r   )parserrh   r   r   )r   r"   r   main\  s\    








r  ).Z
__future__r   rW   ri   r   r   r  r   r^   r   ra   r,   Z
iotop.datar   r   r   r   r   r   Ziotop.versionr	   Ziotopr
   Ziotop.ioprior   r   r    r$   r&   r7   r@   r   r=   rA   rE   rF   rG   rH   objectrI   r   r   r   argvr  r  r   r   r   r   <module>   sH      $$