w&bq<ddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z e e ds ddl m Z e e _ n#eef$re j e _ YnwxYwddlmZddlmZmZmZmZmZddlmZddlmZdd lmZdd lmZgd Zd Z d Z!dZ"dZ#dZ$e$Z%Gdde&Z'Gdde&Z(Gdde&Z)Gdde&Z*Gdde&Z+Gdde,Z-dZ.dZ/dZ0d e j1dzZ2d!Z3dS)")print_functionN monotonic)r) OrderedDict) find_uidsTaskStatsNetlink ProcessListStatssysctl_task_delayacct) ThreadInfo)VERSION)ioprio)IoprioSetError)BKMGTPEc|dkrd}n|dkrd}| }ndSttj|dz ddz }d|t|dd|zzz t|fzS) Nr-z0.00 B z %s%.2f %s)intmathlogfloatUNITS)sizesignexpos */usr/lib/python3/dist-packages/iotop/ui.py human_sizer%;s axx ux txq!$$r) * *D  uT{{aBI./%+? ??c>|jrd|dz zSt|S)Nz%.2f Kg@) kilobytesr%)optionsbytess r$ format_sizer+Is*+56>** e  r&cLt||ot||z dzS)Nz/s)r+r)r)r!durations r$format_bandwidthr.Os' w ?tx)? @ @4 GGr&cJfd}jr(|j}fd}tj|jz n |j}fd}||j}||j}||j}|j |j z } td| } || } |||| fS)Nc6dtd|dzz zS)Nz%.2f %%g(\X@gcA)min)delayr-s r$ delay2percentz#format_stats..delay2percentVs"3uex*/D&EFFFFr&c$t|SN)r+r!r-r)s r$zformat_stats..Zs GT0J0Jr&c&t||Sr5)r.r6s r$r7zformat_stats..^s0@7>h1P1Pr&r) accumulated stats_accumtimerstats_accum_timestamp stats_deltablkio_delay_totalswapin_delay_total read_bytes write_bytescancelled_write_bytesmax) r)processr-r3statsdisplay_formatio_delay swapin_delayr@ written_bytesrAs ` ` r$ format_statsrJSsGGGGGP#JJJJ>##g&CC#PPPP}U455H =!9::L 0(;;J%(CCM=))M .99K \:{ ::r&c ttdS#t$r}t |Yd}~dSd}~wwxYw)Nz/proc/sys/kernel/pid_max)lenopenreadstrip Exceptionprint)es r$get_max_pid_widthrTism423388::@@BBCCC  aqqqqqs?A A& A!!A&ceZdZdS) CancelInputN__name__ __module__ __qualname__r&r$rVrVxDr&rVceZdZdS) InvalidIntNrWr[r&r$r^r^|r\r&r^ceZdZdS) InvalidPidNrWr[r&r$r`r`r\r&r`ceZdZdS) InvalidTidNrWr[r&r$rbrbr\r&rbceZdZdS)InvalidIoprioDataNrWr[r&r$rdrdr\r&rdc eZdZddfddfddfddfddfddfd dfd dfgZd Zd Zd ZdZdZdZ ddZ ddZ dZ dZ dZdZd dZd!dZdZdZdZdZdS)"IOTopUIc|jSr5)pidpss r$r7zIOTopUI.saer&Fc*|Sr5)ioprio_sort_keyris r$r7zIOTopUI.sa''))r&c*|Sr5)get_userris r$r7zIOTopUI.sajjllr&c|jSr5)r@ris r$r7zIOTopUI.salr&Tc |j|jz Sr5)rArBris r$r7zIOTopUI.sama&==r&c|jSr5)r?ris r$r7zIOTopUI.s a*r&cJ|jpt|jp|j Sr5)r>rr@rAris r$r7zIOTopUI.s,a)C!,"?!-@ABBr&c*|Sr5) get_cmdlineris r$r7zIOTopUI.sammoor&ch||_||_d|_tj|jd|_|jjsn||_| tj tj tj ddS#tj $rYdSwxYwdS)Nrr) process_listr) sorting_keyrf sorting_keyssorting_reversebatchwinresizecursesuse_default_colors start_colorcurs_seterror)selfr}rxr)s r$__init__zIOTopUI.__init__s( &3D4DEaH|! DH KKMMM )+++"$$$"""""<      s :BB/.B/cR|j\|_|_dSr5)r}getmaxyxheightwidthrs r$r~zIOTopUI.resizes""&("3"3"5"5 TZZZr&c d}tj}|jjsI|t jtjtj z|jj ||jj kr||j \}}| |dk|||j j|jj |dz }||jj krdSn|dkrd} ||jjdz}nB#tj$r0}|jr|jdt$jkrg}nYd}~nd}~wwxYw|D]5\}}|tjtjzzrt jd6|jjs||r.|j} || |jj i||jj kzdSdS)Nrrg@@)selectpollr)r|registersysstdinfilenoPOLLINPOLLPRI iterationsrxrefresh_processesrefresh_displayr- delay_secondsrargserrnoEINTRPOLLERRPOLLHUPexitr~r}getch handle_key) rrrtotalcurrenteventsrSfdeventkeys r$runz IOTopUI.runs {}}|! N MM#)**,,fmfn.L M M Ml%-4<222!.@@BBNE7  q%!%!2!; = = =|&2a !888E9q  4<#=#FGG<   6afQi5;66FFFFFF  &  UFNV^;< HQKKK<%   %hnn&&$$$5l%-4<2222222s7"DE)&EEc |j |_dSr5)r{rs r$reverse_sortingzIOTopUI.reverse_sortings#'#77r&c|j}|||_||jkr$tj|jd|_dSdSNr)ryget_sorting_keyrfrzr{)rdeltaorig_sorting_keys r$adjust_sorting_keyzIOTopUI.adjust_sorting_keysU+//66 t/ / /#*#78H#I!#LD  0 /r&c|j}||z }td|}tttjdz |}|js|dvr|dkrd}n|dkrd}|S)NrrrLrw)ryrCr1rMrfrz has_swapin_io)rrnew_sorting_keys r$rzIOTopUI.get_sorting_keys|*5 a11c'"677!;_MM! (&((A::&'OOQYY&'Or&Nc|jddtdtjz|j|jdd|tj|jtj tj d|j dt|}tj dtj |dvr|S|rt|S)Nrr )Nr)r}hlineordrA_NORMALraddstrA_BOLDrefreshechorgetstrrMnoechorVrpromptdefaultempty_is_cancelinps r$ prompt_strzIOTopUI.prompt_strs q!SXX7DDD 1ffm444  hooaV--  j J  -- r&c||||} t|S#t$rtwxYwr5)rr ValueErrorr^rs r$ prompt_intzIOTopUI.prompt_intsLoofg?? s88O   ,,  s (Acz |dS#t$rtt$rwxYw)NzPID to ionice: )rr^r`rVrs r$ prompt_pidzIOTopUI.prompt_pidT ??#455 5   ,,      #:cz |dS#t$rtt$rwxYw)NzTID to ionice: )rr^rbrVrs r$ prompt_tidzIOTopUI.prompt_tid rrc ||d|z|d}n|ddd}n#t$rtwxYw|dks|dkrt|S)Nz'I/O priority data (0-7, currently %s): FzI/O priority data (0-7): rr)rr^rd)r ioprio_datars r$ prompt_datazIOTopUI.prompt_datas &&oo&O(3'45@%IIoo&A4OO & & &#%% % & 77cAgg#%% % s 47Ac  ||}n#t$rd}YnwxYwt|dz } |jddt dt jz|j|j dd|t j t|}t|D]V\}}d|z} ||ur t j } n t j} |j d|| | |t| z }W |j } | t jt dfvr |dkr|dz}n| t jt dfvr ||kr|dz }n| t jt d t d fvr||S| d t jt jt jt d t d fvrt))NrTrr %s lr  qQ)indexrrMr}rrrrrinsstrr enumerate A_REVERSErKEY_LEFT KEY_RIGHT KEY_ENTER KEY_CANCEL KEY_CLOSEKEY_EXITrV) rr display_listret_listselectedset_lenoffsetiitemdisplayattrrs r$ prompt_setzIOTopUI.prompt_set s ~~h//HH   HHH l##a' ( HNN1aSFO!;TZ H H H HOOAq&&- 8 8 8[[F$\22 ' '4 4-==!+DD!?D67D999#g,,& (hnn&&6?CHH555(Q,,MHf.C999((MHV-s4yy#d))DDD#H--R!2F4D#_c#hhCBBB%--' ( (s  ''cRd}gd}gd}|d}|||||}|S)NzI/O priority class: )z Real-timez Best-effortIdle)rtbeidler)r)r ioprio_classrclasses_prompt classes_retrs r$ prompt_classzIOTopUI.prompt_classAsI'===***  Loofn)<99 r&Error!c,|jddtdtjz|j|jddd|ztj|jtj ddS)Nrrrz %s ) r}rrrrrrrrr;sleep)rrs r$ prompt_errorzIOTopUI.prompt_errorKsr q!SXX7DDD 1h.0@AAA  1 r&c|jddtdtjz|j|jdS)Nrrr)r}rrrrrrrs r$ prompt_clearzIOTopUI.prompt_clearQsE q!SXX7DDD r&cfd}fd}fd}fd}itddtddtd fd td fd td |td|td|td|td|td|td|td|tjfdtjfdtjfdtjfd}||d}|dS)Nc2jxjdzc_dSNT)r)r9rsr$toggle_accumulatedz.IOTopUI.handle_key..toggle_accumulatedVs L $ $ , $ $ $ $r&c2jxjdzc_dSr)r)onlyrsr$toggle_only_ioz*IOTopUI.handle_key..toggle_only_ioYs L   %    r&cjxjdzc_jjdSr)r) processesrxclearrrsr$toggle_processesz,IOTopUI.handle_key..toggle_processes\sI L " "d * " "   # # % % %   / / 1 1 1 1 1r&c jjr/}j|}n.}t |jj}|}tj |\}} |}|dkrd}n |}| ||jjdS#t"$r(}d|jzYd}~dSd}~wt($rdYdSt*$rdYdSt,$rdYdSt.$rdYdSt0$rYdSwxYw)NrrzError setting I/O priority: %szInvalid process id!zInvalid thread id!zInvalid I/O priority data!zInvalid integer!)r)rrrx get_processrr taskstats_connection get_ioprior to_class_and_datarr set_iopriorrrrrerrr`rbrdr^rV)rh exec_unittid ioprio_valuerrrSrs r$ionicez"IOTopUI.handle_key..ioniceasd $<)P//++C $ 1 = =c B BII//++C *3(,(9(N!P!PI(3355 )/)A,)O)O,{#00>> 6))"#KK"&"2"2;"?"?K$$\;???!'')))!33555!!#####" L L L!!"BQU"JKKKKKKKKK 9 9 9!!"7888888 8 8 8!!"6777777$ @ @ @!!">?????? 6 6 6!!"4555555 $ $ $!!###### $s6DD(( G>2E"G>:G>G><G>G>=G>rc*tjdSNrrrr[r&r$r7z$IOTopUI.handle_key.. r&rc*tjdSrrr[r&r$r7z$IOTopUI.handle_key..rr&rc,Sr5rrsr$r7z$IOTopUI.handle_key..,,..r&Rc,Sr5rrsr$r7z$IOTopUI.handle_key..rr&aAoOrjrrIc.dS)Nrrrsr$r7z$IOTopUI.handle_key..s//33r&c.dSrr%rsr$r7z$IOTopUI.handle_key..s//22r&c^ttj Sr5rrMrfrzrsr$r7z$IOTopUI.handle_key..s#//W5I1J1J0JKKr&c\ttjSr5r(rsr$r7z$IOTopUI.handle_key..s //G4H0I0IJJr&cdSr5r[r[r&r$r7z$IOTopUI.handle_key..str&)rrrrKEY_HOMEKEY_ENDget)rrrrr r key_bindingsactions` r$rzIOTopUI.handle_keyUs - - - - - & & & & & 2 2 2 2 2 ! $! $! $! $! $F! HH##!  HH## ! HH.... !  HH....!  HH"!  HH"!  HH!  HH!! " HH %! & HH )! * HH-! . HH1! 2 O33335! 6  22229! : OKKKK=! > NJJJJA! F!!#||44r&chfd}fd}tt|jj}t jjdjj rdnd| fdj tt||S)Nct j| jj}|\}}}}dtz}|jf}|dz }||fz }|dz }||ddfz }|dz }|||fz } jr |dz }|||fz }n jj r |dz }|dz }|d z }||z}| } jj s] j t|z } d | cxkrt| kr,nn)| d z d z} | | z d z } | d| d z| | dz} || z } jj s|d j }|S) Nz%%%ddz %4sz %-8sz %11s %11sz %7s %7sr)z ?unavailable?rrr~) rJr)rxr- MAX_PID_WIDTHrhr rorr|rurrM)rjrErGrHr@rAformatparamslinecmdlineremaining_lengthlen1offset2rs r$r5z IOTopUI.get_data..formats q$2C2LMME>C ;HlJ },FUVF f F allnno %F g F ajjll2A2&' 'F l "F j+- -F! +*$,00# +& ** cMFV$DmmooG<% G#':D #9 '6666#g,,66666,q0Q6D 04 7! ;.should_formats,|((;==!9:: ;r&rc|jSr5)r:rjs r$r7z"IOTopUI.get_data..Q]r&c|jSr5)r=r@s r$r7z"IOTopUI.get_data..rAr&c.||Sr5r[)rjr stats_lambdas r$r7z"IOTopUI.get_data..sSSLLOO%<%<r&)rreverse) listfilterrxrvaluesrfrzryr)r9sortr{map)rr5r>rrrDs` @@r$get_datazIOTopUI.get_datas     > ; ; ; ; ; $ 1 ; B B D DFFGG "4#34Q7 < # 322LL22L<<<<<#3  5 5 5C **+++r&c !"#dtj|d|ddtj|d|ddtj|d|ddtj|d|dg}tdtdz d z}jjr|d z }n|d z }|d d dddddg}t j_jrtdkrd_ d }jj r6dg|z}tj d fd|D} fd|D}jjrjjdkrS|D]} t!| jjt#|kr"t!d||D]} t!| t&jdSjjrd} nd} g} g} jjrʉd}d}t5ddddd jjrd!nd"fd#jjrd$nd%fd&jjrd'nd(fd)d*jrd+nd,fd-||fd.||fd/|dfd0|dfg }d}|D]\}}|rd1|d2|g}d|d3krdn t@j!ddg}n d1|d4g}gd5}| rI|rGtEd| |d|zj#kr0| $|| $||dz }| |xx|z cc<| |xx|z cc<tE|"t#tK|#t#tK| }tE| }j&"z #z |z |z }|d6krg}d#|d7krg}d"|d8krd} d}|d9krg} g} d}j&"z #z |z |z }tOtE||}tQ|D].\!} j)!d| dj#/|r<j*"dtWd t@j,zj#d}j#}t[tE|D]!js!d:vrt@j,}|!}!j.kr |dd}!j.kr|t@j/z}|jrd;pdYnwxYwS#t@j2$rYdwxYwt[|D]}j&|z |z |z}j*|dtWd t@j,zj#d}t[tE| |D]b!j3||| |!t@j,| |!z|tE| |!z }c| r/j3j&dz d| t@j/j4dS)?NzTotal DISK READ: rz | Total DISK WRITE: rzCurrent DISK READ: z | Current DISK WRITE: rPIDTIDz PRIOz USERz DISK READz DISK WRITEz SWAPINz IOz COMMANDFz TIMEz %H:%M:%S cg|]}|zSr[r[).0r current_times r$ z+IOTopUI.refresh_display..s555!\A%555r&cg|]}|zSr[r[)rRrkrSs r$rTz+IOTopUI.refresh_display..s999A|a'999r&rrzoCONFIG_TASK_DELAY_ACCT and kernel.task_delayacct sysctl not enabled in kernel, cannot determine SWAPIN and IO %r)keysr)anyr)rquit)rrr!allactiverjthreadsprocsr bandwidthaccum)rIrrascdescleftrighthomeendz z: rW:)rrrrLrwrr2r>.print_line]s*K*(DaNNNNNr&zutf-8)5r.r)rjustrCr4rr has_blkio_delay_totalrr rrKr;strftimer|quietrRrjoinrstdoutflushr}erasehelprrrr9r{rPitemsr A_UNDERLINErMrappendboolrr1rrrrrrangeryrUnicodeEncodeErrorencoderrr)$r first_timerrr-summaryrhtitleslinesrkr status_msg help_lines help_attrsprevnextrt help_liner help_item help_attrlen_status_msglen_help max_lines num_linesposremaining_colsrtitlerklnr7rSrrirjs$` @@@@r$rzIOTopUI.refresh_displays !uQxBBHHLLLL uQxBBHHLLLNN!wqz8DDJJ2NNNN wqz8DDJJ2NNNP  !ma'))C/ < !  5LCC 5LCx+;^j-9"8   + %&&%//%*" """  <  : \F*F=55L5555u555E9999999G < x |!Q&& A!HHHH<%Z88"''&//***  a J        HNN   ! B! A JJ| ;++B//++A.." &!#4<#4B%%(Ct|'=J))7K)AN++wO 4#7C%%VDVD\//112fTl00223VAY__../F2J,,../$ !% ; ;IC.%)3d$; %&SE\\v?QSTVW$X %)3$4 $-II %;T;SIAV9W9WZ\ZaZabkZlZl9l5m5mptpz5z5z")))444")))444!Q "9---:---"9---:----g,,KT&\\**J j!1!122N:H k1J>ORZZI1}} 1}} 1}}! !"1}}   k1J>ORZZICJJ 22I!'** 6 611a  n5555 X{As3xx&:J/JDJWWWC!ZN3v;;'' " ")a6kk'q (((!!""IE(((FM)DT19c@S@Eo~o.#e**,CHOOKeTBBBs5zz!9%%   OOOOOOOO=" 58,,,,-===# 58??7#;#;<<<<<=|DHoo 2 2{^3h>CtQC63C(CTZPPPs:b>223322AHOOD#z"~a/@&BRU_`bUcdeUfBfggg3z"~a0111CC2 / aJ & /// H       s6(Z81ZZ8.Z41Z83Z44Z88[  [ rr5)r)rXrYrZrzrr~rrrrrrrrrrrrrrrKrr[r&r$rfrfs  U# ) )51 " "E* " "D) = =tD * *D1 C CDH J % %u- L"666%%%B888MMM          (((B SSSj-,-,-,^XXXXXr&rfcr|jr*tjtjtjnAd}tjtj|tjtj|t |}t||}t|||}| dS)Nc.tjddSrr)rkwargss r$ clean_exitz$run_iotop_window..clean_exitxs HQKKKKKr&) r|signalSIGPIPESIG_DFLSIGINTSIGTERMrrrfr)r}r)rr rxuis r$run_iotop_windowrts}2 fnfn5555    fmZ000 fnj111+G443W==L lG , ,BFFHHHHHr&c~ |jrtd|Stjt|S#tj$r;}t d|t jt jdYd}~dSd}~wt$r}|j tj krJt |t jt dt jt jd|j tj kr7t |t jt dt jnYd}~dSd}~wwxYw)Nziotop interface error:)filera 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|rrwrapperrrRrstderrrOSErrorrEPERMENOENT)r)rSs r$ run_iotoprsp = =#D'22 2>"2G<< < < & ;;;;   7ek ! ! !#* % % % % 07:j B B B B HQKKK 7el " " !#* % % % % 0 7:j  B B B B B  B B B B B Bs&33D<0A88 D<B,D77D<cd} ddl}ddl}td|dt t |||}n#t$rtddl}ddl }| |d}td| || |j |}YnwxYw||dd |d |d t'j|dS) Nz iotop.profrzProfiling using cProfilezcontinuation()r) lineeventszProfiling using hotshotr;calls2)cProfilepstatsrRrunctxglobalslocalsr ImportErrorhotshot hotshot.statsProfileruncallcloserEload strip_dirs sort_stats print_stats print_calleesosremove) continuation prof_filerrrErprofs r$_profilersUI .  ()))('))VXXyIII Y'' ...yQ77 '((( \"""  ""9--.  VW%%% b IisAA!!A;CCaF%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  tjtjdn$#tj$rt dYnwxYwt jtdtz}| ddddd d | d d ddd| dddddd| ddddddd| d d!dd"d#d$d%&| d'd(d)d*d#d+d,&| d-d.dd/d d0 | d1d2dd3d d4 | d5d6dd7d d8 | d9d:dd;d<| d=d>d?d@dAdB | dCddDd t j | dEdFdGdHdI | \}|r+| dJdK |ztjpg_jp jpj_fdLjrfdM}t)|dSdS)NNrz8unable to set locale, falling back to the default localeziotop )usageversionz-oz--only store_truerFz1only show processes or threads actually doing I/O)r/destrrtz-bz--batchr|znon-interactive mode)r/rrtz-nz--iterrrNUMz-number of iterations before ending [infinite])typermetavarrtz-dz--delayrrz#delay between iterations [1 second]SECr)rrrtrrz-pz--pidpidsrwz"processes/threads to monitor [all]rO)rrr/rtrz-uz--userstruserszusers to monitor [all]USERz-Pz --processesrz$only show processes, not all threadsz-az --accumulatedr9z)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--quietcountrorz/suppress some lines of header (implies --batch)z --profileprofilez --no-help store_falsertTzsuppress listing of shortcutszUnexpected arguments: rc"tSr5)r)r)sr$r7zmain..s '**r&c@ dS#t$rYdSwxYwr5)rQ) main_loopsr$safe_main_loopzmain..safe_main_loops9      s  )locale setlocaleLC_ALLErrorrRoptparse OptionParserUSAGEr add_option SUPPRESS_HELP parse_argsrrprrr|r;rorr)parserrrrr)s @@r$mainrsJ++++ <JJJ HIIIIIJ  "78J K K KF dH\!5NPPP dIl1333 dH5|#JLLL dIG/@#Q000 dG%fX?PPP dH5w%,D$&&& dM,&ACCC dOL(%FHHH dM,&KMMM dH\KMMM dIgGQLNNN k,Y#(*@BBB k-fd:<<<%%''MGT @ ->??? g<%2GLMBW\BW]GM****I            s$AA)4 __future__rrrrrrrrrrr;hasattrrr RuntimeError collectionsr iotop.datarrrr r r iotop.versionr iotopr iotop.iopriorr r%r+r.rJrTr4rQrVr^r`rbrdobjectrfrrrargvrrr[r&r$rs'(&%%%%%   74 % %#''''''"\"YDNNN$#####]]]]]]]]]]]]]]!!!!!!!!!!!!'''''' ,++ ? ? ? HHH;;;,"!##      )                                   aaaaafaaaH    L4 +.1Xa[ 999999sA A A