
    w&bq                        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	  eed      sd dlmZ ee_        d dlm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 g dZd Z d Z!d Z"d Z#d Z$ e$       Z% G d de&      Z' G d de&      Z( G d de&      Z) G d de&      Z* G d de&      Z+ G d de,      Z-d Z.d Z/d Z0d e
jb                  d    z  Z2d! Z3y# eef$ r ej                  e_        Y w xY w)"    )print_functionN	monotonic)r   )OrderedDict)	find_uidsTaskStatsNetlinkProcessListStatssysctl_task_delayacct)
ThreadInfo)VERSION)ioprio)IoprioSetError)BKMGTPEc                     | dkD  rd}n| dk  rd}|  } nyt        t        j                  | dz  d      dz        }d|t        |       dd|z  z  z  t        |   fz  S )	Nr    -z0.00 B   
   z	%s%.2f %s   )intmathlogfloatUNITS)sizesignexpos      */usr/lib/python3/dist-packages/iotop/ui.py
human_sizer%   ;   sq    ax	utxxq!$r)*DuT{aBI./%+? ? ?    c                 @    | j                   rd|dz  z  S t        |      S )Nz%.2f Kg      @)	kilobytesr%   )optionsbytess     r$   format_sizer+   I   s%    56>**er&   c                 @    t        | |xr t        |      |z        dz   S )Nz/s)r+   r   )r)   r!   durations      r$   format_bandwidthr.   O   s"    w ?tx)?@4GGr&   c                     fd} j                   r3|j                  } fd}t        j                         |j                  z
  n|j
                  } fd} ||j                        } ||j                        } ||j                        }|j                  |j                  z
  }	t        d|	      }	 ||	      }
||||
fS )Nc                 .    dt        d| dz  z        z  S )Nz%.2f %%g(\X@g    cA)min)delayr-   s    r$   delay2percentz#format_stats.<locals>.delay2percentV   s    3uex*/D&EFFFr&   c                     t        |       S N)r+   r!   r-   r)   s     r$   <lambda>zformat_stats.<locals>.<lambda>Z   s    GT0J r&   c                     t        | |      S r5   )r.   r6   s     r$   r7   zformat_stats.<locals>.<lambda>^   s    0@7>h1P r&   r   )accumulatedstats_accumtimer   stats_accum_timestampstats_deltablkio_delay_totalswapin_delay_total
read_byteswrite_bytescancelled_write_bytesmax)r)   processr-   r3   statsdisplay_formatio_delayswapin_delayr@   written_bytesrA   s   ` `        r$   format_statsrJ   S   s    G##J>>#g&C&CC##PU445H !9!9:L 0 0(;J%%(C(CCM=)M 9K\:{::r&   c                      	 t        t        d      j                         j                               S # t        $ r} t        |        Y d } ~ yd } ~ ww xY w)Nz/proc/sys/kernel/pid_max   )lenopenreadstrip	Exceptionprint)es    r$   get_max_pid_widthrT   i   sD    42388:@@BCC as   /2 	AAAc                       e Zd Zy)CancelInputN__name__
__module____qualname__ r&   r$   rV   rV   x       r&   rV   c                       e Zd Zy)
InvalidIntNrW   r[   r&   r$   r^   r^   |   r\   r&   r^   c                       e Zd Zy)
InvalidPidNrW   r[   r&   r$   r`   r`      r\   r&   r`   c                       e Zd Zy)
InvalidTidNrW   r[   r&   r$   rb   rb      r\   r&   rb   c                       e Zd Zy)InvalidIoprioDataNrW   r[   r&   r$   rd   rd      r\   r&   rd   c            	           e Zd Zd dfd dfd dfd dfd dfd dfd	 dfd
 dfgZd Zd Zd Zd Zd Zd Z	ddZ
ddZd Zd Zd Zd ZddZd dZd Zd Zd Zd Zy)!IOTopUIc                     | j                   S r5   )pidpss     r$   r7   zIOTopUI.<lambda>   s
    aee r&   Fc                 "    | j                         S r5   )ioprio_sort_keyri   s     r$   r7   zIOTopUI.<lambda>   s    a'') r&   c                 "    | j                         S r5   )get_userri   s     r$   r7   zIOTopUI.<lambda>   s    ajjl r&   c                     |j                   S r5   )r@   ri   s     r$   r7   zIOTopUI.<lambda>   s
    all r&   Tc                 4    |j                   |j                  z
  S r5   )rA   rB   ri   s     r$   r7   zIOTopUI.<lambda>   s    amma&=&== r&   c                     |j                   S r5   )r?   ri   s     r$   r7   zIOTopUI.<lambda>   s    a** r&   c                 h    |j                   xs% t        |j                  xs |j                          S r5   )r>   r   r@   rA   ri   s     r$   r7   zIOTopUI.<lambda>   s0    a)) C!,,"?!--@AB r&   c                 "    | j                         S r5   )get_cmdlineri   s     r$   r7   zIOTopUI.<lambda>   s    ammo r&   c                    || _         || _        d| _        t        j                  | j                     d   | _        | j                  j                  sV|| _        | j                          	 t        j                          t        j                          t        j                  d       y y # t        j                  $ r Y y w xY w)N   r   r   )process_listr)   sorting_keyrf   sorting_keyssorting_reversebatchwinresizecursesuse_default_colorsstart_colorcurs_seterror)selfr}   rx   r)   s       r$   __init__zIOTopUI.__init__   s    (&33D4D4DEaH||!!DHKKM))+""$" " <<  s   )=B( (B>=B>c                 R    | j                   j                         \  | _        | _        y r5   )r}   getmaxyxheightwidthr   s    r$   r~   zIOTopUI.resize   s    "&(("3"3"5TZr&   c                    d}t        j                         }| j                  j                  sM|j	                  t
        j                  j                         t         j                  t         j                  z         | j                  j                  || j                  j                  k  rx| j                  j                         \  }}| j                  |dk(  ||| j                  j                         | j                  j                  |dz  }|| j                  j                  k\  ry |dk(  rd}	 |j                  | j                  j                  dz        }|D ]?  \  }}|t         j(                  t         j*                  z  z  s+t        j,                  d       A | j                  j                  s| j/                          |r+| j0                  j3                         }	| j5                  |	       | j                  j                  \|| j                  j                  k  rwy y # t         j                   $ r;}|j"                  r#|j"                  d   t$        j&                  k(  rg }n Y d }~d }~ww xY w)Nr   r   g     @@)selectpollr)   r|   registersysstdinfilenoPOLLINPOLLPRI
iterationsrx   refresh_processesrefresh_displayr-   delay_secondsr   argserrnoEINTRPOLLERRPOLLHUPexitr~   r}   getch
handle_key)
r   r   r   totalcurrenteventsrS   fdeventkeys
             r$   runzIOTopUI.run   s   
{{}||!!MM#))**,fmmfnn.LMll%%-4<<222!..@@BNE7  q%!%!2!2!;!;=||&&2a
!8!88q
4<<#=#=#FG  &  UFNNV^^;<HHQK  <<%%hhnn&$5 ll%%-4<<222 << 66affQi5;;6F s   /(H# #I160I,,I1c                 (    | j                    | _         y r5   )r{   r   s    r$   reverse_sortingzIOTopUI.reverse_sorting   s    #'#7#77r&   c                     | j                   }| j                  |      | _         || j                   k7  r&t        j                  | j                      d   | _        y y Nr   )ry   get_sorting_keyrf   rz   r{   )r   deltaorig_sorting_keys      r$   adjust_sorting_keyzIOTopUI.adjust_sorting_key   sR    ++//6t///#*#7#78H8H#I!#LD  0r&   c                     | j                   }||z  }t        d|      }t        t        t        j
                        dz
  |      }| j                  s|dv r|dk  rd}|S |dkD  rd}|S )Nr   r   rL   rw         )ry   rC   r1   rM   rf   rz   has_swapin_io)r   r   new_sorting_keys      r$   r   zIOTopUI.get_sorting_key   sx    **5 a1c'"6"67!;_M!!&(A:&'O  QY&'Or&   Nc                 (   | j                   j                  ddt        d      t        j                  z  | j
                         | j                   j                  dd|t        j                         | j                   j                          t        j                          t        j                  d       | j                   j                  dt        |            }t        j                  d       t        j                          |dvr|S |r
t               |S )Nr   r    )Nr   )r}   hlineordr   A_NORMALr   addstrA_BOLDrefreshechor   getstrrM   noechorV   r   promptdefaultempty_is_cancelinps        r$   
prompt_strzIOTopUI.prompt_str   s    q!SX7D1ffmm4hhooaV-j J-r&   c                 n    | j                  |||      }	 t        |      S # t        $ r t               w xY wr5   )r   r   
ValueErrorr^   r   s        r$   
prompt_intzIOTopUI.prompt_int   s9    oofg?	s8O 	,	s   
  4c                 f    	 | j                  d      S # t        $ r t               t        $ r  w xY w)NzPID to ionice: )r   r^   r`   rV   r   s    r$   
prompt_pidzIOTopUI.prompt_pid  9    	??#455 	, 		    0c                 f    	 | j                  d      S # t        $ r t               t        $ r  w xY w)NzTID to ionice: )r   r^   rb   rV   r   s    r$   
prompt_tidzIOTopUI.prompt_tid  r   r   c                     	 || j                  d|z  |d      }n| j                  dd d      }|dk  s|dkD  r
t               |S # t        $ r t               w xY w)Nz'I/O priority data (0-7, currently %s): FzI/O priority data (0-7): r   r   )r   r^   rd   )r   ioprio_datar   s      r$   prompt_datazIOTopUI.prompt_data  sx    	&&oo&O(3'45@%I oo&A4O 7cAg#%%
	  	&#%%	&s   ,A Ac           	          	 |j                  |      }t        |      dz
  }	 | j                  j	                  ddt        d      t        j                  z  | j                         | j                  j                  dd|t        j                         t        |      }t        |      D ][  \  }}d|z  }	||u rt        j                  }
nt        j                  }
| j                  j                  d||	|
       |t        |	      z  }] 	 | j                  j                         }|t        j                  t        d      fv r|dkD  r|dz  }n|t        j                  t        d      fv r||k  r|dz  }n}|t        j                   t        d      t        d	      fv r||   S |d
t        j"                  t        j$                  t        j&                  t        d      t        d      fv r
t)               # t        $ r d}Y w xY w)Nr   r   r    %s lr
   qQ)indexr   rM   r}   r   r   r   r   r   insstrr   	enumerate	A_REVERSEr   KEY_LEFT	KEY_RIGHT	KEY_ENTER
KEY_CANCEL	KEY_CLOSEKEY_EXITrV   )r   r   display_listret_listselectedset_lenoffsetiitemdisplayattrr   s               r$   
prompt_setzIOTopUI.prompt_set   s   	~~h/H l#a'HHNN1aSFOO!;TZZHHHOOAq&&--8[F$\2 '4 4-=!++D!??D67D9#g,&' hhnn&6??CH55(Q,MHf..C99(MHV--s4y#d)DD#H--R!2!2F4D4D#__c#hCB B%-'    	H	s   G. .G=<G=c                 J    d}g d}g d}|d}| j                  ||||      }|S )NzI/O priority class: )z	Real-timezBest-effortIdle)rtbeidler   )r   )r   ioprio_classr   classes_promptclasses_retr   s         r$   prompt_classzIOTopUI.prompt_classA  s8    '=*Loofn)<9
r&   c                 D   | j                   j                  ddt        d      t        j                  z  | j
                         | j                   j                  ddd|z  t        j                         | j                   j                          t        j                  d       y )Nr   r   r   z  %s  )r}   r   r   r   r   r   r   r   r   r;   sleep)r   r   s     r$   prompt_errorzIOTopUI.prompt_errorK  se    q!SX7D1h.0@0@A

1r&   c                     | j                   j                  ddt        d      t        j                  z  | j
                         | j                   j                          y )Nr   r   r   )r}   r   r   r   r   r   r   r   s    r$   prompt_clearzIOTopUI.prompt_clearQ  s9    q!SX7Dr&   c                 6     fd} fd} fd} fd}i t        d      d t        d      d t        d	       fd
t        d       fdt        d      |t        d      |t        d      |t        d      |t        d      |t        d      |t        d      |t        d      |t        j                   fdt        j                   fdt        j                   fdt        j
                   fd}|j                  |d       } |        y )Nc                  D     j                   xj                  dz  c_        y NT)r)   r9   r   s   r$   toggle_accumulatedz.IOTopUI.handle_key.<locals>.toggle_accumulatedV  s    LL$$,$r&   c                  D     j                   xj                  dz  c_        y r   )r)   onlyr   s   r$   toggle_only_ioz*IOTopUI.handle_key.<locals>.toggle_only_ioY  s    LL%r&   c                       j                   xj                  dz  c_         j                  j                           j                  j	                          y r   )r)   	processesrx   clearr   r   s   r$   toggle_processesz,IOTopUI.handle_key.<locals>.toggle_processes\  s<    LL""d*"##%//1r&   c                     	 j                   j                  r,j                         } j                  j	                  |       }n0j                         }t        |j                  j                        }|j                         }t        j                  |      \  }}j                  |      }|dk(  rd}nj                  |      }|j                  ||       j                  j                          j                  j                          j!                          y # t"        $ r(}j%                  d|j&                  z         Y d }~y d }~wt(        $ r j%                  d       Y y t*        $ r j%                  d       Y y t,        $ r j%                  d       Y y t.        $ r j%                  d       Y y t0        $ r j!                          Y y w xY w)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   rx   get_processr   r   taskstats_connection
get_ioprior   to_class_and_datar   r   
set_ioprior  r   r   r   r   errr`   rb   rd   r^   rV   )rh   	exec_unittidioprio_valuer   r   rS   r   s          r$   ionicez"IOTopUI.handle_key.<locals>.ionicea  s    $<<))//+C $ 1 1 = =c BI//+C *3(,(9(9(N(N!PI(335)/)A)A,)O ,{#00>6)"#K"&"2"2;"?K$$\;?!!'')!!335 !!# " L!!"BQUU"JKK 9!!"78 8!!"67$ @!!">? 6!!"45 $!!#$s6   D
D 	G'E

G)GGG:GGr   c                  ,    t        j                  d      S Nr   r   r   r[   r&   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>       r&   r   c                  ,    t        j                  d      S r  r  r[   r&   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>  r  r&   r   c                  $     j                         S r5   r   r   s   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>      ,,. r&   Rc                  $     j                         S r5   r  r   s   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>  r  r&   aAoOrj   r   r   Ic                  &     j                  d      S )Nr   r   r   s   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>  s    //3 r&   c                  &     j                  d      S r   r$  r   s   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>  s    //2 r&   c                  V     j                  t        t        j                               S r5   r   rM   rf   rz   r   s   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>  s     //W5I5I1J0JK r&   c                  T     j                  t        t        j                              S r5   r'  r   s   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>  s    //G4H4H0IJ r&   c                       y r5   r[   r[   r&   r$   r7   z$IOTopUI.handle_key.<locals>.<lambda>  s    r&   )r   r   r   r   KEY_HOMEKEY_ENDget)r   r   r  r  r  r  key_bindingsactions   `       r$   r   zIOTopUI.handle_keyU  sJ   	-	&	2
!	$F!
H#!
 H#	!

 H.!
 H.!
 H"!
 H"!
 H!
 H!!
" H %!
& H )!
* H-!
. H1!
2 OO35!
6 29!
: OOK=!
> NNJA!
F !!#|4r&   c                 p     fd} fd}t        t        | j                  j                  j	                                     }t
        j                   j                     d    j                  j                  rd nd |j                  fd j                         t        t        ||            S )Nc                    t        j                  | j                  j                        }|\  }}}}dt        z  }| j
                  f}|dz  }|| j                         fz  }|dz  }|| j                         d d fz  }|dz  }|||fz  }j                  r|dz  }|||fz  }n j                  j                  r
|dz  }|dz  }|d	z  }||z  }| j                         }	j                  j                  sNj                  t        |      z
  }
d
|
cxk  rt        |	      k  r"n n|
dz
  d
z  }|
|z
  dz
   }|	d | dz   |	|d  z   }	||	z  }j                  j                  s|d j                   }|S )Nz%%%ddz %4sz %-8s   z
 %11s %11sz %7s %7sr   )z?unavailable?r   r   r   ~)rJ   r)   rx   r-   MAX_PID_WIDTHrh   r  ro   r   r|   ru   r   rM   )rj   rE   rG   rH   r@   rA   formatparamslinecmdlineremaining_lengthlen1offset2r   s                r$   r4  z IOTopUI.get_data.<locals>.format  s    q$2C2C2L2LME>C;HlJ},FUUVFfFallno%FgFajjl2A&''Fl"Fj+--F!!*$,00##& **cMFV$DmmoG<<%%#'::D	#9 '6#g,6,q0Q6D 04 7! ;<G%etns2WWX5FFGGOD<<%%KTZZ(Kr&   c                     j                   j                   xs% | j                  j                   j                        S r5   )r)   r  did_some_ior9   )rj   r   s    r$   should_formatz'IOTopUI.get_data.<locals>.should_format  s3    ||((( ;==!9!9:;r&   r   c                     | j                   S r5   )r:   rj   s    r$   r7   z"IOTopUI.get_data.<locals>.<lambda>  
    Q]] r&   c                     | j                   S r5   )r=   r?  s    r$   r7   z"IOTopUI.get_data.<locals>.<lambda>  r@  r&   c                 "     |  |             S r5   r[   )rj   r   stats_lambdas    r$   r7   z"IOTopUI.get_data.<locals>.<lambda>  s    SLO%< r&   )r   reverse)listfilterrx   r  valuesrf   rz   ry   r)   r9   sortr{   map)r   r4  r=  r  r   rC  s   `   @@r$   get_datazIOTopUI.get_data  s    	>	;  $ 1 1 ; ; B B DF G	""4#3#34Q7<<##2L2L<#33 	 	5C	*++r&   c                    !"# dt         j                  |d   |      j                  d      dt         j                  |d   |      j                  d      dt         j                  |d   |      j                  d      dt         j                  |d   |      j                  d      g}t        dt        dz
        d	z  } j                  j
                  r|d
z  }n|dz  }|dddddddg}t        j                   _         j                  rt               dk(  rd _         j                  d        j                         } j                  j                  r?dg|z   }t        j                  d      }	|D 
cg c]  }
|	|
z   	 }}
|D cg c]  }|	|z   	 }} j                  j                  r j                  j                  dk  rN|D ]  }t!        |         j                  j                  t#        |      k  rt!        dj%                  |             |D ]  }
t!        |
        t&        j(                  j+                          y  j,                  j/                           j                  rd }nd}g }g } j                  j0                  r j3                  d      } j3                  d      }t5        ddddd j                  j6                  rdnd fd! j                  j
                  rd"nd#fd$ j                  j8                  rd%nd&fd'd( j:                  rd)nd*fd+||   j=                         fd,||   j=                         fd-|d   j=                         fd.|d   j=                         fg      }d}|j?                         D ]  \  }}|r"d/|d0|g}d|d1k(  rdnt@        jB                  ddg}n	d/|d2g}g d3}|r>|r<tE        dj%                  ||         dj%                  |      z          jF                  kD  r(|jI                  |       |jI                  |       |dz  }||xx   |z  cc<   ||xx   |z  cc<    tE        |      "t#        tK        |            #t#        tK        |            }tE        |      } jL                  "z
  #z
  |z
  |z
  }|d4k  rg }d#|d5k  rg }d"|d6k  rd }d}|d7k  rg }g }d} jL                  "z
  #z
  |z
  |z
  }tO        tE        |      |      }tQ        |      D ]/  \  !} j,                  jS                  !d|d  jF                          1 |rB j,                  jU                  "dtW        d	      t@        jX                  z   jF                         d} jF                  }t[        tE        |            D ]  ! j                  s!d8v rt@        jX                  }|!   }! j\                  k(  r|dd  }! j\                  k(  r*|t@        j^                  z  }| j:                  xr d9xs d:z  }|d | }|tE        |      z  }|r j,                  jS                  "|||       |tE        |      z  } t[        |      D ]  !	 !"# fd;}	  ||!           t[        |      D ]  } jL                  |z
  |z
  |z   }  j,                  jU                  | dtW        d	      t@        jX                  z   jF                         d}t[        tE        ||               D ]Q  ! j,                  jg                  | |||   !   t@        jX                  ||   !   z         |tE        ||   !         z  }S  |r9 j,                  jg                   jL                  dz
  d|t@        j^                          j,                  ji                          y c c}
w c c}w # t`        $ r  ||!   jc                  d<             Y \w xY w# t@        jd                  $ r Y w xY w)=NzTotal DISK READ:   r      z | Total DISK WRITE:   r   zCurrent DISK READ: z | Current DISK WRITE:    r   PIDTIDz  PRIOz  USERz     DISK READz  DISK WRITEz  SWAPINz      IOz    COMMANDFz    TIMEz	%H:%M:%S r   r   zoCONFIG_TASK_DELAY_ACCT and kernel.task_delayacct sysctl not enabled in kernel, cannot determine SWAPIN and IO %r   )keysr   )anyr   )r   quit)r   r  r   allactiverj   threadsprocsr  	bandwidthaccum)rH  r   r   ascdescleftrighthomeendz  z: rQ  :)r   r   r   rL   rw   r   r1  r   ><c                 L    j                   j                  z   z   d|        y r  )r}   r   )r6  r   len_summary
len_titlesr   s    r$   
print_linez+IOTopUI.refresh_display.<locals>.print_line]  s     K*(DaNr&   zutf-8)5r.   r)   rjustrC   r3  r  r	   has_blkio_delay_totalr   r
   r   rJ  r;   strftimer|   quietrR   r   joinr   stdoutflushr}   erasehelpr   r   r  r9   r{   rP   itemsr   A_UNDERLINErM   r   appendboolr   r1   r   r   r   r   r   rangery   r   UnicodeEncodeErrorencoder   r   r   )$r   
first_timer   r   r-   summaryrh   titleslinescurrent_timer   rk   
status_msg
help_lines
help_attrsprevnextrn  	help_liner   	help_item	help_attrlen_status_msglen_help	max_lines	num_linesposremaining_colsr   titlere  lnr6  r   rc  rd  s$   `                                @@@r$   r   zIOTopUI.refresh_display  s    !uQxBHHL uQxBHHLN !wqz8DJJ2N wqz8DJJ2NP	
 !ma')C/<<!!5LC5LCx+;^j-9"88
 %&%/%*""<< \F*F==5L/45!\A%5E5189A|a'9G9<<||!!Q&  A!H<<%%Z8"''&/* aJJHHNN!!!
A

 JJ||  ++B/++A." &!#4<<#4#4%(Ct||'='=)7K)A)A+wO 4#7#7%VDVD\//12fTl0023VAY__./F2J,,./$  	!% ;IC%)3d$;	%&SE\v?Q?QSTVW$X	%)3$4	$-	%TSIAV9WZ\ZaZabkZl9l5mptpzpz5z")))4")))4!Q	"9-:-"9-:-; g,KT&\*J j!12N:Hk1J>ORZZI1}
1}1}!
!"1}

k1J>ORZZICJ	2I!'* 611an56{As3x&:J:J/JDJJWC!ZZN3v;' "))a6k''q	(((!!"IE(((FMM)DT119c@S@Eo~.#e*,HHOOKeTBs5z!" 9% 
O="58, Ho 2{{^3h>CtQC63C3C(CTZZPs:b>23 2AHHOOD#z"~a/@&BRBRU_`bUcdeUfBfg3z"~a011C2	2 aJ &/HHu 69R . = #58??7#;<= || s<   =^^_^#_?_____r   r5   )zError!)rX   rY   rZ   rz   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rJ  r   r[   r&   r$   rf   rf      s     
U#	)51	"E*	"D)	=tD	*D1
CDH	J	%u-L"6%B8M(BSj-,^Xr&   rf   c                    |j                   r3t        j                  t        j                  t        j                         nKd }t        j                  t        j                  |       t        j                  t        j
                  |       t        |      }t        ||      }t        | ||      }|j                          y )Nc                  .    t        j                  d       y r  r  )r   kwargss     r$   
clean_exitz$run_iotop_window.<locals>.clean_exitx  s    HHQKr&   )
r|   signalSIGPIPESIG_DFLSIGINTSIGTERMr   r   rf   r   )r}   r)   r  r  rx   uis         r$   run_iotop_windowr  t  sw    }}fnnfnn5	fmmZ0fnnj1+G43W=L	lG	,BFFHr&   c                    	 | j                   rt        d |       S t        j                  t        |       S # t        j                  $ r;}t        d|t        j                         t        j                  d       Y d }~y d }~wt        $ r}|j                  t        j                  k(  rKt        |t        j                         t        dt        j                         t        j                  d       |j                  t        j                  k(  r7t        |t        j                         t        dt        j                         n Y d }~y d }~ww xY w)Nziotop interface error:)filer   a  
The Linux kernel interfaces that iotop relies on now require root privileges
or the NET_ADMIN capability. This change occurred 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.a/  
The Linux kernel interfaces that iotop relies on for process I/O statistics
were not found. Please enable CONFIG_TASKSTATS in your Linux kernel build
configuration, use iotop outside a container and or share the host's
network namespace with the container.

Please do not file bugs on iotop about this.)r|   r  r   wrapperr   rR   r   stderrr   OSErrorr   EPERMENOENT)r)   rS   s     r$   	run_iotopr    s    ==#D'22>>"2G<<<< &

; 77ekk!!#**% 0 7:jjB HHQK77ell"!#**% 0 7:jjB Bs&   4 4 E1A==E	B=EEc                 .   d}	 dd l }dd l}t        d       |j                  dt	               t               |       |j                  |      }|j                          |j!                  dd	       |j#                  d
       |j%                  d
       t'        j(                  |       y # t        $ re dd l}dd l	}|j                  |d      }t        d       |j                  |        |j                          |j                  j                  |      }Y w xY w)Nz
iotop.profr   zProfiling using cProfilezcontinuation()r   )
lineeventszProfiling using hotshotr;   calls2   )cProfilepstatsrR   runctxglobalslocalsr	   ImportErrorhotshothotshot.statsProfileruncallcloserE   load
strip_dirs
sort_statsprint_statsprint_calleesosremove)continuation	prof_filer  r  rE   r  profs          r$   _profiler    s    I.()(')VXyIY' 
	VW%	b	IIi  .yQ7'(\"

""9-.s   AB& &A+DD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            	         	 t        j                  t         j                  d       t        j                  t        dt        z         } | j                  ddddd	d
       | j                  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%&       | j                  d'd(d)d*d#d+d,&       | j                  d-d.dd/d	d0       | j                  d1d2dd3d	d4       | j                  d5d6dd7d	d8       | j                  d9d:dd;d<       | j                  d=d>d?d@dAdB       | j                  dCddDd	t
        j                         | j                  dEdFdGdHdI       | j                         \  }|r#| j                  dJdKj                  |      z          t               j                  xs g _        j                   xs j"                  xs j$                  _        fdLj&                  rfdM}t)        |       y          y # t         j                  $ r t	        d       Y *w xY w)NNr   z8unable to set locale, falling back to the default localeziotop )usageversionz-oz--only
store_truer  Fz1only show processes or threads actually doing I/O)r.  destr   rn  z-bz--batchr|   znon-interactive mode)r.  r  rn  z-nz--iterr   r   NUMz-number of iterations before ending [infinite])typer  metavarrn  z-dz--delayr   r   z#delay between iterations [1 second]SECr   )r  r  rn  r  r   z-pz--pidpidsrq  z"processes/threads to monitor [all]rN  )r  r  r.  rn  r  z-uz--userstruserszusers to monitor [all]USERz-Pz--processesr  z$only show processes, not all threadsz-az--accumulatedr9   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countri  r   z/suppress some lines of header (implies --batch)z	--profileprofilez	--no-helpstore_falsern  Tzsuppress listing of shortcutszUnexpected arguments: r   c                      t               S r5   )r  )r)   s   r$   r7   zmain.<locals>.<lambda>  s    	'* r&   c                  4    	           y # t         $ r Y y w xY wr5   )rQ   )	main_loops   r$   safe_main_loopzmain.<locals>.safe_main_loop  s     s    	)locale	setlocaleLC_ALLErrorrR   optparseOptionParserUSAGEr   
add_optionSUPPRESS_HELP
parse_argsr   rj  r   r  r|   r;   ri  r  r  )parserr   r  r  r)   s      @@r$   mainr    s   J+ ""78JKF
dH\!5N  P dIl1  3
dH5|#J  L dIG/@#Q  0 dG%fX?  P
dH5w%,D$  & dM,&A  C dOL(%F  H dM,&K  M dH\K  M
dIgGQL  N
k,Y#(*@*@  B
k-fd:  < %%'MGT->?g<<%2GLMMBW\\BW]]GM*I	
 	 m << JHIJs   $H1 1II)4
__future__r   r   r   r  r   r  r  r   r  r   r;   hasattrr   r  RuntimeErrorcollectionsr   
iotop.datar   r   r   r	   r
   r   iotop.versionr   iotopr   iotop.ioprior   r    r%   r+   r.   rJ   rT   r3  rQ   rV   r^   r`   rb   rd   objectrf   r  r  r  argvr  r  r[   r&   r$   <module>r     s  ( &      	   
 4%'" $ ] ] ! !  ' 	,?H;, "#	) 		 		 		 			 	af aHL4
	+ .1XXa[
	99M 	\" YYDNs   C- -DD