
    w&bq                     "   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKr \" \S5      (       d  S SKJr  \\l        S SKJr  S SKJrJrJrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  / SQrS r S r!S r"S r#S r$\$" 5       r% " S S\&5      r' " S S\&5      r( " S S\&5      r) " S S\&5      r* " S S\&5      r+ " S S\,5      r-S r.S r/S r0S \
Rb                  S    -  r2S! r3g! \\4 a    \R                  \l         Nf = f)"    )print_functionN	monotonic)r   )OrderedDict)	find_uidsTaskStatsNetlinkProcessListStatssysctl_task_delayacct)
ThreadInfo)VERSION)ioprio)IoprioSetError)BKMGTPEc                     U S:  a  SnOU S:  a  SnU * n Og[        [        R                  " U S-  S5      S-  5      nSU[        U 5      SSU-  -  -  [        U   4-  $ )	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    U R                   (       a  SUS-  -  $ [        U5      $ )Nz%.2f Kg      @)	kilobytesr%   )optionsbytess     r$   format_sizer+   I   s%    56>**er&   c                 H    [        X=(       a    [        U5      U-  5      S-   $ )Nz/s)r+   r   )r)   r!   durations      r$   format_bandwidthr.   O   s     w ?tx)?@4GGr&   c                   ^ ^ U4S jnT R                   (       a5  UR                  nU 4S jn[        R                  " 5       UR                  -
  mOUR
                  nU 4S jnU" UR                  5      nU" UR                  5      nU" UR                  T5      nUR                  UR                  -
  n	[        SU	5      n	U" U	T5      n
XgX4$ )Nc                 .   > S[        SU TS-  -  5      -  $ )Nz%.2f %%g(\X@g    cA)min)delayr-   s    r$   delay2percent#format_stats.<locals>.delay2percentV   s    3uex*/D&EFFFr&   c                    > [        TU 5      $ N)r+   r!   r-   r)   s     r$   <lambda>format_stats.<locals>.<lambda>Z   s    GT0Jr&   c                    > [        TX5      $ r6   )r.   r7   s     r$   r8   r9   ^   s    0@7>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_delayrB   written_bytesrC   s   ` `        r$   format_statsrL   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                       [        [        S5      R                  5       R                  5       5      $ ! [         a  n [        U 5         S n A gS n A ff = f)Nz/proc/sys/kernel/pid_max   )lenopenreadstrip	Exceptionprint)es    r$   get_max_pid_widthrV   i   sD    42388:@@BCC as   /2 
AAAc                       \ rS rSrSrg)CancelInputx    N__name__
__module____qualname____firstlineno____static_attributes__rZ   r&   r$   rX   rX   x       r&   rX   c                       \ rS rSrSrg)
InvalidInt|   rZ   Nr[   rZ   r&   r$   rc   rc   |   ra   r&   rc   c                       \ rS rSrSrg)
InvalidPid   rZ   Nr[   rZ   r&   r$   rf   rf      ra   r&   rf   c                       \ rS rSrSrg)
InvalidTid   rZ   Nr[   rZ   r&   r$   ri   ri      ra   r&   ri   c                       \ rS rSrSrg)InvalidIoprioData   rZ   Nr[   rZ   r&   r$   rl   rl      ra   r&   rl   c            	           \ rS rSrS S4S S4S S4S S4S S4S	 S4S
 S4S S4/rS rS rS rS rS r	S r
S S jrS S jrS rS rS rS rS!S jrS"S jrS rS rS rS rSrg)#IOTopUI   c                     U R                   $ r6   )pidpss     r$   r8   IOTopUI.<lambda>   s    aeer&   Fc                 "    U R                  5       $ r6   )ioprio_sort_keyrs   s     r$   r8   rv      s    a'')r&   c                 "    U R                  5       $ r6   )get_userrs   s     r$   r8   rv      s
    ajjlr&   c                     UR                   $ r6   )rB   rs   s     r$   r8   rv      s    allr&   Tc                 4    UR                   UR                  -
  $ r6   )rC   rD   rs   s     r$   r8   rv      s    amma&=&==r&   c                     UR                   $ r6   )rA   rs   s     r$   r8   rv      s
    a**r&   c                     UR                   =(       d,    [        UR                  =(       d    UR                  (       5      $ r6   )r@   r   rB   rC   rs   s     r$   r8   rv      s.    a)) C!,,"?!--@BCr&   c                 "    U R                  5       $ r6   )get_cmdliners   s     r$   r8   rv      s
    ammor&   c                    X l         X0l        SU l        [        R                  U R                     S   U l        U R                  R                  (       dX  Xl        U R                  5          [        R                  " 5         [        R                  " 5         [        R                  " S5        g g ! [        R                   a     g f = f)N   r   r   )process_listr)   sorting_keyro   sorting_keyssorting_reversebatchwinresizecursesuse_default_colorsstart_colorcurs_seterror)selfr   r   r)   s       r$   __init__IOTopUI.__init__   s    (&33D4D4DEaH||!!HKKM))+""$" " <<  s   +A B- -CCc                 R    U R                   R                  5       u  U l        U l        g r6   )r   getmaxyxheightwidthr   s    r$   r   IOTopUI.resize   s    "&(("3"3"5TZr&   c                 .   Sn[         R                  " 5       nU R                  R                  (       dM  UR	                  [
        R                  R                  5       [         R                  [         R                  -  5        U R                  R                  b  XR                  R                  :  Ga  U R                  R                  5       u  p4U R                  US:H  X4U R                  R                  5        U R                  R                  b   US-  nXR                  R                  :  a  g OUS:X  a  Sn UR                  U R                  R                  S-  5      nU HF  u  pxU[         R(                  [         R*                  -  -  (       d  M0  [
        R,                  " S5        MH     U R                  R                  (       d  U R/                  5         U(       a+  U R0                  R3                  5       n	U R5                  U	5        U R                  R                  c  GMq  XR                  R                  :  a  GM  g g ! [         R                    a@  nUR"                  (       a)  UR"                  S   [$        R&                  :X  a  / n S nAGN/e S nAff = f)Nr   r   g     @@)selectpollr)   r   registersysstdinfilenoPOLLINPOLLPRI
iterationsr   refresh_processesrefresh_displayr-   delay_secondsr   argserrnoEINTRPOLLERRPOLLHUPexitr   r   getch
handle_key)
r   r   r   totalcurrenteventsrU   fdeventkeys
             r$   runIOTopUI.run   s   
{{}||!!MM#))**,fmmfnn.LMll%%-<<222!..@@BNE  q%!%!2!2!;!;=||&&2a
!8!88 9q
4<<#=#=#FG  &FNNV^^;<<HHQK  & <<%%hhnn&$5 ll%%-<<2222 << 66affQi5;;6F	s   7(I   J4JJJc                 0    U R                   (       + U l         g r6   )r   r   s    r$   reverse_sortingIOTopUI.reverse_sorting   s    #'#7#77r&   c                     U R                   nU R                  U5      U l         X R                   :w  a&  [        R                  U R                      S   U l        g g Nr   )r   get_sorting_keyro   r   r   )r   deltaorig_sorting_keys      r$   adjust_sorting_keyIOTopUI.adjust_sorting_key   sP    ++//6///#*#7#78H8H#I!#LD  0r&   c                     U R                   nX!-  n[        SU5      n[        [        [        R
                  5      S-
  U5      nU R                  (       d  US;   a  US::  a  SnU$ US:  a  SnU$ )Nr   r   rN   r         )r   rE   r1   rO   ro   r   has_swapin_io)r   r   new_sorting_keys      r$   r   IOTopUI.get_sorting_key   sv    ** a1c'"6"67!;_M!!&(A:&'O  QY&'Or&   Nc                 >   U R                   R                  SS[        S5      [        R                  -  U R
                  5        U R                   R                  SSU[        R                  5        U R                   R                  5         [        R                  " 5         [        R                  " S5        U R                   R                  S[        U5      5      n[        R                  " S5        [        R                  " 5         US;  a  U$ U(       a
  [        5       eU$ )Nr   r    )Nr   )r   hlineordr   A_NORMALr   addstrA_BOLDrefreshechor   getstrrO   noechorX   r   promptdefaultempty_is_cancelinps        r$   
prompt_strIOTopUI.prompt_str   s    q!SX7D1ffmm4hhooaV-j J-r&   c                 n    U R                  XU5      n [        U5      $ ! [         a    [        5       ef = fr6   )r   r   
ValueErrorrc   r   s        r$   
prompt_intIOTopUI.prompt_int   s7    oof?	s8O 	,	s   
 4c                 j     U R                  S5      $ ! [         a    [        5       e[         a    e f = f)NzPID to ionice: )r   rc   rf   rX   r   s    r$   
prompt_pidIOTopUI.prompt_pid  9    	??#455 	, 		    2c                 j     U R                  S5      $ ! [         a    [        5       e[         a    e f = f)NzTID to ionice: )r   rc   ri   rX   r   s    r$   
prompt_tidIOTopUI.prompt_tid  r   r   c                      Ub  U R                  SU-  US5      nOU R                  SS S5      n US:  d  US:  a
  [        5       eU$ ! [         a    [        5       ef = f)Nz'I/O priority data (0-7, currently %s): FzI/O priority data (0-7): r   r   )r   rc   rl   )r   ioprio_datar   s      r$   prompt_dataIOTopUI.prompt_data  sx    	&&oo&O(3'45@%I oo&A4O 7cAg#%%
	  	&#%%	&s   A A Ac           	          UR                  U5      n[        U5      S-
  n U R                  R	                  SS[        S5      [        R                  -  U R                  5        U R                  R                  SSU[        R                  5        [        U5      n[        U5       HZ  u  pxSU-  n	XtL a  [        R                  n
O[        R                  n
U R                  R                  SXiU
5        U[        U	5      -  nM\      U R                  R                  5       nU[        R                  [        S5      4;   a  US:  a  US-  nOU[        R                  [        S5      4;   a  XE:  a  US-  nOU[        R                   [        S5      [        S	5      4;   a  X4   $ US
[        R"                  [        R$                  [        R&                  [        S5      [        S5      4;   a
  [)        5       eM  GM  ! [         a    Sn GNf = f)Nr   r   r    %s lr
   qQ)indexr   rO   r   r   r   r   r   r   insstrr   	enumerate	A_REVERSEr   KEY_LEFT	KEY_RIGHT	KEY_ENTER
KEY_CANCEL	KEY_CLOSEKEY_EXITrX   )r   r   display_listret_listselectedset_lenoffsetiitemdisplayattrr   s               r$   
prompt_setIOTopUI.prompt_set   s   	~~h/H l#a'HHNN1aSFOO!;TZZHHHOOAq&&--8[F$\2 4-=!++D!??D6D9#g,& 3 hhnn&6??CH55(Q,MHf..C99(MHV--s4y#d)DD#--R!2!2F4D4D#__c#hCB B%-'    	H	s   G8 8HHc                 H    Sn/ SQn/ SQnUc  SnU R                  X#XA5      nU$ )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_classIOTopUI.prompt_classA  s4    '=*Loof)9
r&   c                 F   U R                   R                  SS[        S5      [        R                  -  U R
                  5        U R                   R                  SSSU-  [        R                  5        U R                   R                  5         [        R                  " S5        g )Nr   r   r   z  %s  )r   r   r   r   r   r   r   r   r   r=   sleep)r   r   s     r$   prompt_errorIOTopUI.prompt_errorK  se    q!SX7D1h.0@0@A

1r&   c                     U R                   R                  SS[        S5      [        R                  -  U R
                  5        U R                   R                  5         g )Nr   r   r   )r   r   r   r   r   r   r   r   s    r$   prompt_clearIOTopUI.prompt_clearQ  s9    q!SX7Dr&   c                 J  ^  U 4S jnU 4S jnU 4S jnU 4S jn0 [        S5      S _[        S5      S _[        S	5      U 4S
 j_[        S5      U 4S j_[        S5      U_[        S5      U_[        S5      U_[        S5      U_[        S5      U_[        S5      U_[        S5      U_[        S5      U_[        R                  U 4S j_[        R                  U 4S j_[        R                  U 4S j_[        R
                  U 4S j_nUR                  US 5      nU" 5         g )Nc                  D   > T R                   =R                  S-  sl        g NT)r)   r;   r   s   r$   toggle_accumulated.IOTopUI.handle_key.<locals>.toggle_accumulatedV  s    LL$$,$r&   c                  D   > T R                   =R                  S-  sl        g r  )r)   onlyr   s   r$   toggle_only_io*IOTopUI.handle_key.<locals>.toggle_only_ioY  s    LL%r&   c                     > T R                   =R                  S-  sl        T R                  R                  5         T R                  R	                  5         g r  )r)   	processesr   clearr   r   s   r$   toggle_processes,IOTopUI.handle_key.<locals>.toggle_processes\  s<    LL""d*"##%//1r&   c                    >  TR                   R                  (       a,  TR                  5       n TR                  R	                  U 5      nO0TR                  5       n[        UTR                  R                  5      nUR                  5       n[        R                  " U5      u  pETR                  U5      nUS:X  a  SnOTR                  U5      nUR                  XE5        TR                  R                  5         TR                  R                  5         TR!                  5         g ! ["         a(  nTR%                  SUR&                  -  5         S nAg S nAf[(         a    TR%                  S5         g [*         a    TR%                  S5         g [,         a    TR%                  S5         g [.         a    TR%                  S5         g [0         a    TR!                  5          g f = f)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   r   get_processr   r   taskstats_connection
get_ioprior   to_class_and_datar  r   
set_ioprior#  r   r  r   r  errrf   ri   rl   rc   rX   )rr   	exec_unittidioprio_valuer  r   rU   r   s          r$   ionice"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 0G G (G G G r   c                  .    [         R                  " S5      $ Nr   r   r   rZ   r&   r$   r8   $IOTopUI.handle_key.<locals>.<lambda>      r&   r   c                  .    [         R                  " S5      $ r3  r4  rZ   r&   r$   r8   r5    r6  r&   r   c                  $   > T R                  5       $ r6   r   r   s   r$   r8   r5        ,,.r&   Rc                  $   > T R                  5       $ r6   r9  r   s   r$   r8   r5    r:  r&   aAoOrt   r   r  Ic                  &   > T R                  S5      $ )Nr   r   r   s   r$   r8   r5    s    //3r&   c                  &   > T R                  S5      $ r   rC  r   s   r$   r8   r5    s    //2r&   c                  V   > T R                  [        [        R                  5      * 5      $ r6   r   rO   ro   r   r   s   r$   r8   r5    s    //W5I5I1J0JKr&   c                  T   > T R                  [        [        R                  5      5      $ r6   rF  r   s   r$   r8   r5    s    //G4H4H0IJr&   c                      g r6   rZ   rZ   r&   r$   r8   r5    s    tr&   )r   r   r   r   KEY_HOMEKEY_ENDget)r   r   r  r  r$  r0  key_bindingsactions   `       r$   r   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                 x  ^ ^^ U 4S jnU 4S jn[        [        UT R                  R                  R	                  5       5      5      n[
        R                  T R                     S   mT R                  R                  (       a  S mOS mUR                  UU4S jT R                  S9  [        [        X5      5      $ )Nc                   > [        TR                  U TR                  R                  5      nUu  p#pES[        -  nU R
                  4nUS-  nXpR                  5       4-  nUS-  nXpR                  5       S S 4-  nUS-  nXtU4-  nTR                  (       a  US-  nXsU4-  nO%TR                  R                  (       a
  US-  nUS-  nUS	-  nXg-  nU R                  5       n	TR                  R                  (       dN  TR                  [        U5      -
  n
S
U
s=:  a  [        U	5      :  a   O  OU
S-
  S
-  nX-
  S-
  * nU	S U S-   XS  -   n	X-  nTR                  R                  (       d  US TR                   nU$ )Nz%%%ddz %4sz %-8s   z
 %11s %11sz %7s %7sr   )z?unavailable?r   r   r   ~)rL   r)   r   r-   MAX_PID_WIDTHrr   r)  rz   r   r   r   r   rO   )rt   rG   rI   rJ   rB   rC   formatparamslinecmdlineremaining_lengthlen1offset2r   s                r$   rT   IOTopUI.get_data.<locals>.format  s    q$2C2C2L2LME>C;HJ},FUUVFfFllno%FgFjjl2A&''Fl"F+--F!!*$00##& **cMF$DmmoG<<%%#'::D	#9 '6#g,6,q0Q6D 0 7! ;<G%etns2WX5FFGOD<<%%KTZZ(Kr&   c                    > TR                   R                  (       + =(       d%    U R                  TR                   R                  5      $ r6   )r)   r  did_some_ior;   )rt   r   s    r$   should_format'IOTopUI.get_data.<locals>.should_format  s3    ||((( ;==!9!9:;r&   r   c                     U R                   $ r6   )r<   rt   s    r$   r8   "IOTopUI.get_data.<locals>.<lambda>      Q]]r&   c                     U R                   $ r6   )r?   ra  s    r$   r8   rb    rc  r&   c                 "   > T" U T" U 5      5      $ r6   rZ   )rt   r   stats_lambdas    r$   r8   rb    s    SLO%<r&   )r   reverse)listfilterr   r"  valuesro   r   r   r)   r;   sortr   map)r   rT  r^  r"  r   rf  s   `   @@r$   get_dataIOTopUI.get_data  s    	>	;  $ 1 1 ; ; B B DF G	""4#3#34Q7<<##2L2L<#33 	 	5C*++r&   c                   ^ ^!^"^# S[        T R                  US   U5      R                  S5      < S[        T R                  US   U5      R                  S5      < 3S[        T R                  US   U5      R                  S5      < S[        T R                  US   U5      R                  S5      < 3/n[        S[        S-
  5      S	-  nT R                  R
                  (       a  US
-  nOUS-  nUSSSSSSS/n[        R                  T l        T R                  (       a  [        5       S:X  a  ST l        T R                  S5        T R                  5       nT R                  R                  (       aD  S/U-   n[        R                  " S5      n	U V
s/ s H  oU
-   PM	     nn
U Vs/ s H  oU-   PM	     nnT R                  R                  (       a  T R                  R                  S::  aQ  U H  n[!        U5        M     T R                  R                  [#        U5      ::  a  [!        SR%                  U5      5        U H  n
[!        U
5        M     [&        R(                  R+                  5         g T R,                  R/                  5         T R                  (       a  S nOSn/ n/ nT R                  R0                  (       Ga  T R3                  S5      nT R3                  S5      n[5        SSSSST R                  R6                  (       a  SOS 4S!T R                  R
                  (       a  S"OS#4S$T R                  R8                  (       a  S%OS&4S'S(T R:                  (       a  S)OS*4S+X   R=                  5       4S,UU   R=                  5       4S-US   R=                  5       4S.US   R=                  5       4/5      nSnUR?                  5        H  u  nnU(       a#  S/US0U/nSUS1:X  a  SO[@        RB                  SS/nO	S/US2/n/ S3QnU(       aD  U(       a=  [E        SR%                  UU   5      SR%                  U5      -   5      T RF                  :  a)  URI                  U5        URI                  U5        US-  nM  UU==   U-  ss'   UU==   U-  ss'   M     [E        U5      m"[#        [K        U5      5      m#[#        [K        U5      5      n[E        U5      nT RL                  T"-
  T#-
  U-
  U-
  nUS4:  a  / nSm#US5:  a  / nSm"US6:  a  S nSnUS7:  a  / n/ nSnT RL                  T"-
  T#-
  U-
  U-
  n[O        [E        U5      U5      n[Q        U5       H0  u  m!nT R,                  RS                  T!SUS T RF                   5        M2     U(       aB  T R,                  RU                  T"S[W        S	5      [@        RX                  -  T RF                  5        SnT RF                  n[[        [E        U5      5       H  m!T R                  (       d  T!S8;   a  M  [@        RX                  nUT!   nT!T R\                  :X  a  USS  nT!T R\                  :X  a4  U[@        R^                  -  nUT R:                  =(       a    S9=(       d    S:-  nUS U nU[E        U5      -  nU(       a  T R,                  RS                  T"UUU5        U[E        U5      -  nM     [[        U5       H  m! U!U"U#U 4S; jn U" UT!   5        M     [[        U5       H  nT RL                  U-
  U-
  U-   n T R,                  RU                  U S[W        S	5      [@        RX                  -  T RF                  5        Sn[[        [E        UU   5      5       HR  m!T R,                  Rg                  U UUU   T!   [@        RX                  UU   T!   -  5        U[E        UU   T!   5      -  nMT     M     U(       a9  T R,                  Rg                  T RL                  S-
  SU[@        R^                  5        T R,                  Ri                  5         g s  sn
f s  snf ! [`         a    U" UT!   Rc                  S<5      5         GM  f = f! [@        Rd                   a     GM  f = f)=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  r0  r?  allactivert   threadsprocsr=  	bandwidthaccum)rk  r   r   ascdescleftrighthomeendz  z: ru  :)r   r   r   rN   r   r   rQ  r   ><c                 L   > TR                   R                  TT-   T-   SU 5        g r3  )r   r   )rV  r  len_summary
len_titlesr   s    r$   
print_line+IOTopUI.refresh_display.<locals>.print_line]  s     K*(DaNr&   zutf-8)5r.   r)   rjustrE   rS  r"  r	   has_blkio_delay_totalr   r
   r   rm  r=   strftimer   quietrT   r   joinr   stdoutflushr   erasehelpr   r   r  r;   r   rR   itemsr   A_UNDERLINErO   r   appendboolr   r1   r   r   r   r   r   ranger   r   UnicodeEncodeErrorencoder   r   r   )$r   
first_timer   r   r-   summaryrr   titleslinescurrent_timer   ru   
status_msg
help_lines
help_attrsprevnextr  	help_liner   	help_item	help_attrlen_status_msglen_help	max_lines	num_linesposremaining_colsr  titler  lnrV  r  r  r  s$   `                                @@@r$   r   IOTopUI.refresh_display  sb    !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5u!A%uE5189Aa'G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V\//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!'*11an5 +{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 O="58, & Ho{{^3h>CtQC63C3C(CTZZPs:b>23AHHOOD#z"~a/@&BRBRU_`bUcdeUfBfg3z"~a011C 4	 & aJ &/HHu 69R . = #58??7#;<<= || s<   `&`	a`##$aaaaa('a()r   r   r)   r   r   r   r   r   r  r6   )zError!)r\   r]   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   rm  r   r`   rZ   r&   r$   ro   ro      s     
U#	)51	"E*	"D)	=tD	*D1
CDH	J	%u-L"6%B8M(BSj-,^Xr&   ro   c                    UR                   (       a4  [        R                  " [        R                  [        R                  5        OMS n[        R                  " [        R                  U5        [        R                  " [        R
                  U5        [        U5      n[        X15      n[        XU5      nUR                  5         g )Nc                  0    [         R                  " S5        g r3  r4  )r   kwargss     r$   
clean_exit$run_iotop_window.<locals>.clean_exitx  s    HHQKr&   )
r   signalSIGPIPESIG_DFLSIGINTSIGTERMr   r   ro   r   )r   r)   r  r(  r   uis         r$   run_iotop_windowr  t  ss    }}fnnfnn5	fmmZ0fnnj1+G43=L	G	,BFFHr&   c                     U R                   (       a  [        S U 5      $ [        R                  " [        U 5      $ ! [        R                   a9  n[        SU[        R                  S9  [        R                  " S5         S nAg S nAf[         a  nUR                  [        R                  :X  aF  [        U[        R                  S9  [        S[        R                  S9  [        R                  " S5        UR                  [        R                  :X  a5  [        U[        R                  S9  [        S[        R                  S9   S nAg e S nAff = f)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   rT   r   stderrr   OSErrorr   EPERMENOENT)r)   rU   s     r$   	run_iotopr    s    ==#D'22>>"2G<<<< &

; 77ekk!!#**% 0 7:jjB HHQK77ell"!#**% 0 7:jjB -s,   : : E/BEB2EEEc                 ,   Sn SS K nSS Kn[        S5        UR                  S[	        5       [        5       U5        UR                  U5      nUR                  5         UR!                  SS	5        UR#                  S
5        UR%                  S
5        [&        R(                  " U5        g ! [         ab    SS KnSS K	nUR                  USS9n[        S5        UR                  U 5        UR                  5         UR                  R                  U5      n Nf = f)Nz
iotop.profr   zProfiling using cProfilezcontinuation()r   )
lineeventszProfiling using hotshotr=   calls2   )cProfilepstatsrT   runctxglobalslocalsr	   ImportErrorhotshothotshot.statsProfileruncallcloserG   load
strip_dirs
sort_statsprint_statsprint_calleesosremove)continuation	prof_filer  r  rG   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            
        ^^  [         R                  " [         R                  S5        [
        R                  " [        S[        -   S9n U R                  SSSSS	S
S9  U R                  SSSSSS9  U R                  SSSSSSS9  U R                  SSSSSSSS9  U R                  S S!SS"S#S$S%S&9  U R                  S'S(S)S*S#S+S,S&9  U R                  S-S.SS/S	S0S9  U R                  S1S2SS3S	S4S9  U R                  S5S6SS7S	S8S9  U R                  S9S:SS;S<S9  U R                  S=S>S?S@SASBS9  U R                  SCSSDS	[
        R                  S9  U R                  SESFSGSHSIS9  U R                  5       u  mnU(       a#  U R                  SJSKR                  U5      -   5        [        T5        TR                  =(       d    / Tl        TR                   =(       d    TR"                  =(       d    TR$                  Tl        U4SL jmTR&                  (       a  U4SM jn[)        U5        g T" 5         g ! [         R                   a    [	        S5         GNf = f)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)rM  destr   r  z-bz--batchr   znon-interactive mode)rM  r  r  z-nz--iterr   r   NUMz-number of iterations before ending [infinite])typer  metavarr  z-dz--delayr   r   z#delay between iterations [1 second]SECr   )r  r  r  r  r   z-pz--pidpidsr  z"processes/threads to monitor [all]rr  )r  r  rM  r  r  z-uz--userstruserszusers to monitor [all]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	--no-helpstore_falser  Tzsuppress listing of shortcutszUnexpected arguments: r   c                     > [        T 5      $ r6   )r  )r)   s   r$   r8   main.<locals>.<lambda>  s
    	'*r&   c                  6   >  T " 5         g ! [          a     g f = fr6   )rS   )	main_loops   r$   safe_main_loopmain.<locals>.safe_main_loop  s     s    
)locale	setlocaleLC_ALLErrorrT   optparseOptionParserUSAGEr   
add_optionSUPPRESS_HELP
parse_argsr   r  r   r  r   r=   r  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   %H$ $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.   rL   rV   rS  rS   rX   rc   rf   ri   rl   objectro   r  r  r  argvr  r   rZ   r&   r$   <module>r     s!  ( &      	   
 4%%'" $ ] ] ! !  ' 	,?H;, "#	) 		 		 		 			 	af aHL4
	+ .1XXa[
	99M 	\" YYDNs   C2 2DD