Ñò þIc@s2ddkZddkZddkZddkZddkZddkZddkZddkZddkZddk Z ddk l Z l Z l Z ddklZdddddd d gZd „Zd „Zd „Zd„Zdefd„ƒYZd„Zd„Zd„ZdeidZd„ZdS(iÿÿÿÿN(t find_uidstTaskStatsNetlinkt ProcessList(tVERSIONtBtKtMtGtTtPtEcCssxTtttƒdddƒD]*}dd|>}d||joPqqWd}d}dt|ƒ|t|fS(Niiiÿÿÿÿi is%.2f %s(txrangetlentUNITStfloat(tsizetitbase((s,/usr/lib/python2.6/site-packages/iotop/ui.pyt human_sizes cCs!|io d|dSt|ƒS(Ns%.2f Kg@(t kilobytesR(toptionstbytes((s,/usr/lib/python2.6/site-packages/iotop/ui.pyt format_sizes  cCs"t||ot|ƒ|ƒdS(Ns/s(RR(RRtduration((s,/usr/lib/python2.6/site-packages/iotop/ui.pytformat_bandwidth$sc s·fd†}ˆio/|i}‡fd†}tiƒ|i‰n|i}‡fd†}||iƒ}||iƒ}||iˆƒ}|i|i } t d| ƒ} || ˆƒ} |||| fS(Ncsdtd|ˆdƒS(Ns%.2f %%gÂõ(\ÿX@gÐcA(tmin(tdelay(R(s,/usr/lib/python2.6/site-packages/iotop/ui.pyt delay2percent*scs tˆ|ƒS((R(RR(R(s,/usr/lib/python2.6/site-packages/iotop/ui.pyt.scstˆ||ƒS((R(RR(R(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR2si( t accumulatedt stats_accumttimetstats_accum_timestampt stats_deltatblkio_delay_totaltswapin_delay_totalt read_bytest write_bytestcancelled_write_bytestmax( RtprocessRRtstatstdisplay_formattio_delayt swapin_delayR$t written_bytesR%((RRs,/usr/lib/python2.6/site-packages/iotop/ui.pyt format_stats's   tIOTopUIc Bs¶eZd„efd„efd„efd„efd„efd„efd„efd„efgZd„Zd „Zd „Zd „Zd „Z d „Z d„Z d„Z RS(cCs|iS((tpid(tp((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRCscCs |iƒS((tioprio_sort_key(R1((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRDscCs |iƒS((tget_user(R1((s,/usr/lib/python2.6/site-packages/iotop/ui.pyREscCs |iiS((R!R$(R1((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRFscCs|ii|iiS((R!R%R&(R1((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRGs cCs |iiS((R!R#(R1((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRIscCs,|iipt|iip |ii ƒS((R!R"tintR$R%(R1((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRLs cCs |iƒS((t get_cmdline(R1((s,/usr/lib/python2.6/site-packages/iotop/ui.pyROscCs˜||_||_d|_ti|id|_|iipU||_|iƒy%t i ƒt i ƒt i dƒWq”t i j oq”XndS(Niii(t process_listRt sorting_keyR/t sorting_keystsorting_reversetbatchtwintresizetcursestuse_default_colorst start_colortcurs_setterror(tselfR;R6R((s,/usr/lib/python2.6/site-packages/iotop/ui.pyt__init__Rs        cCs|iiƒ\|_|_dS(N(R;tgetmaxyxtheighttwidth(RB((s,/usr/lib/python2.6/site-packages/iotop/ui.pyR<csc Cs­d}tiƒ}|iip'|itiiƒtiti Bƒnx`|ii djp||ii jo9|i i ƒ}|\}}|i|dj|||i iƒ|ii dj o&|d7}||ii joPqün|djo d}ny|i|iidƒ}WnFtij o7}|io!|idtijo d}qb‚nX|iip|iƒn|o |iiƒ}|i|ƒqIqIWdS(Niig@@(tselecttpollRR:tregistertsyststdintfilenotPOLLINtPOLLPRIt iterationstNoneR6trefresh_processestrefresh_displayRt delay_secondsRAtargsterrnotEINTRR<R;tgetcht handle_key( RBRORHttotalt total_readt total_writeteventstetkey((s,/usr/lib/python2.6/site-packages/iotop/ui.pytrunfs8  '      !  cCs|i |_dS(N(R9(RB((s,/usr/lib/python2.6/site-packages/iotop/ui.pytreverse_sorting…scCs~|i}|i|7_td|iƒ|_tttiƒd|iƒ|_||ijoti|id|_ndS(Nii(R7R'RR R/R8R9(RBtdeltatorig_sorting_key((s,/usr/lib/python2.6/site-packages/iotop/ui.pytadjust_sorting_keyˆs  "c s9‡fd†}‡fd†}‡fd†}hd„tdƒ6d„tdƒ6‡fd†td ƒ6‡fd †td ƒ6|td ƒ6|td ƒ6|tdƒ6|tdƒ6|tdƒ6|tdƒ6‡fd†ti6‡fd†ti6‡fd†ti6‡fd†ti6}|i|d„ƒ}|ƒdS(Ncs#ˆiitN_ˆiiƒdS(N(RRtTrueR6tclear((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyttoggle_accumulated‘scsˆiitN_dS(N(RtonlyRd((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyttoggle_only_io”scs0ˆiitN_ˆiiƒˆiiƒdS(N(Rt processesRdR6ReRQ((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyttoggle_processes–s cSs tidƒS(i(RJtexit(((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRœstqcSs tidƒS(i(RJRk(((s,/usr/lib/python2.6/site-packages/iotop/ui.pyRžstQcs ˆiƒS((R`((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR strcs ˆiƒS((R`((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR¢stRtatAtotOR1R cs ˆidƒS(iÿÿÿÿ(Rc((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR°scs ˆidƒS(i(Rc((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR²scsˆittiƒ ƒS((RcR R/R8((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR´scsˆittiƒƒS((RcR R/R8((RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR¶scSsdS(N(RP(((s,/usr/lib/python2.6/site-packages/iotop/ui.pyR¹s(tordR=tKEY_LEFTt KEY_RIGHTtKEY_HOMEtKEY_ENDtget(RBR^RfRhRjt key_bindingstaction((RBs,/usr/lib/python2.6/site-packages/iotop/ui.pyRXs(      cs’‡fd†}‡fd†}t|ˆiiiƒƒ}tiˆid}|id|dˆiƒˆi i p|ˆi d3nt ||ƒS(Nc s•tˆi|ˆiiƒ}|\}}}}d|i|iƒ|iƒd ||||f}||iƒ7}ˆiip|ˆi d }n|S(Ns%5d %4s %-8s %11s %11s %7s %7s ii( R.RR6RR0t get_ioprioR3R5R:RF(R1R)R+R,R$R%tline(RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pytformat½s csˆii p |iƒS(N(RRgt did_some_io(R1(RB(s,/usr/lib/python2.6/site-packages/iotop/ui.pyt should_formatÈsiR^treversei( tfilterR6RitvaluesR/R8R7tsortR9RR:REtmap(RBR~R€RiR^((RBs,/usr/lib/python2.6/site-packages/iotop/ui.pytget_data¼s  c Csðdt|i||ƒt|i||ƒf}|iio d}nd}|dddddd d g}|iƒ}|iioEd g|}tid ƒ} g} |D]} | | | q©~ }n|iion|iid jo4|GH|iit|ƒjodi |ƒGHqnx|D] } | GHq"Wt i i ƒn«|i iƒ|i i|ƒ|i iddtdƒtiB|iƒxštt|ƒƒD]†} ti} || }| |ijo|d}n| |ijo,| tiO} ||iodpd7}n|i i|| ƒq›Wx·tt|ƒƒD]£} y+|i i| d d|| idƒƒWq8tij o`t iƒ\}}}d||i iƒ| || f}t|ƒidƒ}|||‚q8Xq8W|i iƒdS(Ns*Total DISK READ: %s | Total DISK WRITE: %ss PIDs TIDs PRIOs USERs DISK READs DISK WRITEs SWAPINs IOs COMMANDs TIMEs %H:%M:%S itiit t>tdd?d d@d dAƒ|idBddd dCd td ti ƒ|i ƒ\‰}|o|i dDdEi |ƒƒnt ˆƒˆipgˆ_ˆipˆipˆiˆ_‡fdF†‰ˆio‡fdG†}t|ƒnˆƒdS(HNR‡tusagetversionsiotop s-os--onlyR{t store_truetdestRgtdefaultthelps1only show processes or threads actually doing I/Os-bs--batchR:snon-interactive modes-ns--iterttypeR4ROtmetavartNUMs-number of iterations before ending [infinite]s-ds--delayRRSs#delay between iterations [1 second]tSECis-ps--pidtpidstappends"processes/threads to monitor [all]tPIDs-us--userR˜tuserssusers to monitor [all]tUSERs-Ps --processesRis$only show processes, not all threadss-as --accumulatedRs)show accumulated I/O instead of bandwidths-ks --kilobytesRs.use kilobytes instead of a human friendly units-ts--timeRs.add a timestamp on each line (implies --batch)s-qs--quiettcountRs/suppress some lines of header (implies --batch)s --profiletprofilesUnexpected arguments: Rˆcs tˆƒS((R­((R(s,/usr/lib/python2.6/site-packages/iotop/ui.pyR_scsy ˆƒWnnXdS(N(((t main_loop(s,/usr/lib/python2.6/site-packages/iotop/ui.pytsafe_main_loopbs (tlocalet setlocaletLC_ALLtoptparset OptionParsertUSAGERt add_optionR¨t SUPPRESS_HELPt parse_argsRARŽRRÑR:RRR×RÆ(tparserRTRÙ((RØRs,/usr/lib/python2.6/site-packages/iotop/ui.pytmain6sV  ! !       (R=RURÚRÝRÁtpwdRGtstructRJRt iotop.dataRRRt iotop.versionRR RRRR.tobjectR/R«R­RÆtargvRßRä(((s,/usr/lib/python2.6/site-packages/iotop/ui.pyts,             Á  #