ó B¢Qc@søddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z mZmZmZddl mZddlmZddlmZddlmZdd d d d d dgZd„Zd„Zd„Zd„Zd„ZeƒZdefd„ƒYZ defd„ƒYZ!defd„ƒYZ"defd„ƒYZ#defd„ƒYZ$de%fd„ƒYZ&d „Z'd!„Z(d"„Z)d#e j*d$Z+d%„Z,dS(&iÿÿÿÿ(tprint_functionN(t find_uidstTaskStatsNetlinkt ProcessListtStats(t ThreadInfo(tVERSION(tioprio(tIoprioSetErrortBtKtMtGtTtPtEcCs||dkrd}n |dkr1d}| }ndSttj|ddƒdƒ}d|t|ƒdd|>t|fS( Nitt-s0.00 Bii s %s%.2f %si(tinttmathtlogtfloattUNITS(tsizetsigntexpo((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt human_size-s     cCs|jrd|dSt|ƒS(Ns%.2f Kg@(t kilobytesR(toptionstbytes((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt format_size9s  cCs!t||ot|ƒ|ƒdS(Ns/s(RR(RRtduration((s,/usr/lib/python2.7/site-packages/iotop/ui.pytformat_bandwidth>sc ṡfd†}ˆjrF|j}‡fd†}tjƒ|j‰n|j}‡fd†}||jƒ}||jƒ}||jˆƒ}|j|j } t d| ƒ} || ˆƒ} |||| fS(Ncsdtd|ˆdƒS(Ns%.2f %%gÂõ(\ÿX@gÐcA(tmin(tdelay(R(s,/usr/lib/python2.7/site-packages/iotop/ui.pyt delay2percentDscs tˆ|ƒS(N(R(RR(R(s,/usr/lib/python2.7/site-packages/iotop/ui.pytHscstˆ||ƒS(N(R (RR(R(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$Lsi( t accumulatedt stats_accumttimetstats_accum_timestampt stats_deltatblkio_delay_totaltswapin_delay_totalt read_bytest write_bytestcancelled_write_bytestmax( RtprocessRR#tstatstdisplay_formattio_delayt swapin_delayR,t written_bytesR-((RRs,/usr/lib/python2.7/site-packages/iotop/ui.pyt format_statsAs   cCsEy ttdƒjƒjƒƒSWntk r@}t|ƒdSXdS(Ns/proc/sys/kernel/pid_maxi(tlentopentreadtstript Exceptiontprint(te((s,/usr/lib/python2.7/site-packages/iotop/ui.pytget_max_pid_widthVs   t CancelInputcBseZRS((t__name__t __module__(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR?dst InvalidIntcBseZRS((R@RA(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyRBest InvalidPidcBseZRS((R@RA(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyRCfst InvalidTidcBseZRS((R@RA(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyRDgstInvalidIoprioDatacBseZRS((R@RA(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyREhstIOTopUIc BseZd„efd„efd„efd„efd„efd„efd„efd„efgZd„Zd „Zd „Zd „Zd „Z ded „Z ded„Z d„Z d„Zd„Zd„Zdd„Zdd„Zd„Zd„Zd„Zd„ZRS(cCs|jS(N(tpid(tpts((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$qscCs |jƒS(N(tioprio_sort_key(RHRI((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$rscCs |jƒS(N(tget_user(RHRI((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$sscCs|jS(N(R,(RHRI((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$tscCs|j|jS(N(R-R.(RHRI((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$uscCs|jS(N(R+(RHRI((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$vscCs!|jp t|jp|j ƒS(N(R*RR,R-(RHRI((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$ys cCs |jƒS(N(t get_cmdline(RHRI((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR${scCs”||_||_d|_tj|jd|_|jjs||_|jƒy%t j ƒt j ƒt j dƒWqt j k rŒqXndS(Niii(t process_listRt sorting_keyRFt sorting_keystsorting_reversetbatchtwintresizetcursestuse_default_colorst start_colortcurs_setterror(tselfRRRMR((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt__init__~s        cCs|jjƒ\|_|_dS(N(RRtgetmaxyxtheighttwidth(RY((s,/usr/lib/python2.7/site-packages/iotop/ui.pyRSsc CsÎd}tjƒ}|jjsD|jtjjƒtjtj Bƒnxƒ|jj dksk||jj krÉ|j j ƒ\}}|j|dk|||j jƒ|jj dk r×|d7}||jj krìPqìn|dkrìd}ny|j|jjdƒ}WnAtjk rL}|jrF|jdtjkrFg}qM‚nXx8|D]0\}}|tjtjB@rTtjdƒqTqTW|jjs¡|jƒn|rG|jjƒ} |j| ƒqGqGWdS(Niig@@(tselecttpollRRQtregistertsyststdintfilenotPOLLINtPOLLPRIt iterationstNoneRMtrefresh_processestrefresh_displayRt delay_secondsRXtargsterrnotEINTRtPOLLERRtPOLLHUPtexitRSRRtgetcht handle_key( RYRfR_ttotaltactualteventsR=tfdteventtkey((s,/usr/lib/python2.7/site-packages/iotop/ui.pytrun’s:  &       cCs|j |_dS(N(RP(RY((s,/usr/lib/python2.7/site-packages/iotop/ui.pytreverse_sorting³scCs||j}|j|7_td|jƒ|_tttjƒd|jƒ|_||jkrxtj|jd|_ndS(Nii(RNR/R!R7RFRORP(RYtdeltatorig_sorting_key((s,/usr/lib/python2.7/site-packages/iotop/ui.pytadjust_sorting_key¶s  "cCsÁ|jjddtdƒtjB|jƒ|jjdd|tjƒ|jjƒtj ƒtj dƒ|jj dt |ƒƒ}tj dƒtj ƒ|dkr«|S|r½tƒ‚n|S(Niit R(NR(RRthlinetordRTtA_NORMALR]taddstrtA_BOLDtrefreshtechoRWtgetstrR7tnoechoRgR?(RYtprompttdefaulttempty_is_canceltinp((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_strÀs)       cCsD|j|||ƒ}yt|ƒSWntk r?tƒ‚nXdS(N(RŒRt ValueErrorRB(RYRˆR‰RŠR‹((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_intÏs  cCsEy|jdƒSWn-tk r-tƒ‚ntk r@‚nXdS(NsPID to ionice: (RŽRBRCR?(RY((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_pidÖs    cCsEy|jdƒSWn-tk r-tƒ‚ntk r@‚nXdS(NsTID to ionice: (RŽRBRDR?(RY((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_tidÞs    cCs†yA|dk r+|jd||tƒ}n|jddtƒ}Wntk r]tƒ‚nX|dksv|dkr‚tƒ‚n|S(Ns'I/O priority data (0-7, currently %s): sI/O priority data (0-7): ii(RgRŽtFalseRBRE(RYt ioprio_dataR‹((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_dataæs     c Csy|j|ƒ}Wntk r,d}nXt|ƒd}x½trü|jjddtdƒtjB|j ƒ|jj dd|tj ƒt|ƒ}xnt |ƒD]`\}}d|} ||krÒtj } n tj} |jj d|| | ƒ|t| ƒ7}q¤Wxîtrø|jjƒ} | tjtdƒfkrU|dkrU|d8}Pq | tjtdƒfkrŠ||krŠ|d7}Pq | tjtdƒtd ƒfkr¶||S| d tjtjtjtd ƒtd ƒfkr tƒ‚q q Wq@WdS( NiÿÿÿÿiiR~s %s tltrs s itqtQ(tindexRR7tTrueRRRR€RTRR]tinsstrRƒt enumeratet A_REVERSERqtKEY_LEFTt KEY_RIGHTt KEY_ENTERt KEY_CANCELt KEY_CLOSEtKEY_EXITR?( RYRˆt display_listtret_listtselectedtset_lentoffsettititemtdisplaytattrRx((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_setós:   )      ' ' $!cCsUd}dddg}dddg}|dkr9d}n|j||||ƒ}|S( NsI/O priority class: s Real-times Best-efforttIdletrttbetidlei(RgR¬(RYt ioprio_classRˆtclasses_promptt classes_retR‹((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_classs  sError!cCsg|jjddtdƒtjB|jƒ|jjddd|tjƒ|jjƒt j dƒdS(NiiR~s %s ( RRRR€RTRR]RšRœR„R'tsleep(RYRX((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_errors)  cCs:|jjddtdƒtjB|jƒ|jjƒdS(NiiR~(RRRR€RTRR]R„(RY((s,/usr/lib/python2.7/site-packages/iotop/ui.pyt prompt_clear"s)csb‡fd†}‡fd†}‡fd†}‡fd†}id„tdƒ6d„tdƒ6‡fd †td ƒ6‡fd †td ƒ6|td ƒ6|tdƒ6|tdƒ6|tdƒ6|tdƒ6|tdƒ6|tdƒ6|tdƒ6‡fd†tj6‡fd†tj6‡fd†tj6‡fd†tj6}|j|d„ƒ}|ƒdS(NcsˆjjtN_dS(N(RR%R™((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyttoggle_accumulated'scsˆjjtN_dS(N(RtonlyR™((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyttoggle_only_io)scs0ˆjjtN_ˆjjƒˆjjƒdS(N(Rt processesR™RMtclearRh((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyttoggle_processes+s cs–yЈjjr0ˆjƒ}ˆjj|ƒ}n!ˆjƒ}t|ˆjjƒ}|jƒ}t j |ƒ\}}ˆj |ƒ}|dkr–d}nˆj |ƒ}|j ||ƒˆjjƒˆjjƒWnµtk rù}ˆjd|jƒn™tk rˆjdƒn|tk r3ˆjdƒn_tk rPˆjdƒnBtk rmˆjdƒn%tk r‡ˆjƒn XˆjƒdS(NR°isError setting I/O priority: %ssInvalid process id!sInvalid thread id!sInvalid I/O priority data!sInvalid integer!(RR»RRMt get_processRRttaskstats_connectiont get_ioprioRtto_class_and_dataR´R“t set_ioprioR¼RhRR¶terrRCRDRERBR?R·(RGt exec_unitttidt ioprio_valueR±R’R=(RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pytionice/s:            cSs tjdƒS(Ni(RaRp(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$TsR–cSs tjdƒS(Ni(RaRp(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$VsR—cs ˆjƒS(N(Rz((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$XsR•cs ˆjƒS(N(Rz((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$ZstRtatAtotORHRR¨tIcs ˆjdƒS(Niÿÿÿÿ(R}((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$lscs ˆjdƒS(Ni(R}((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$nscsˆjttjƒ ƒS(N(R}R7RFRO((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$pscsˆjttjƒƒS(N(R}R7RFRO((RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$rscSsdS(N(Rg(((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$us(R€RTRRžtKEY_HOMEtKEY_ENDtget(RYRxR¸RºR½RÇt key_bindingstaction((RYs,/usr/lib/python2.7/site-packages/iotop/ui.pyRr&s.#        csɇfd†}‡fd†}tt|ˆjjjƒƒƒ}tjˆjd‰ˆjj rkd„‰n d„‰|j d‡‡fd†dˆj ƒˆjj s¶|ˆj d 3ntt||ƒƒS( Nc s<tˆj|ˆjjƒ}|\}}}}tjrId||f}nd}dt}|d|j|jƒ|j ƒd |||f}|j ƒ} ˆjj sˆj t |ƒ} d| koÔt | ƒknr| dd} | | d } | | d| | } qn|| 7}ˆjj s8|ˆj }n|S( Ns%7s %7s s ?unavailable? s%%%dds %4s %-8s %11s %11s %siiit~(R6RRMRRthas_blkio_delay_totalt MAX_PID_WIDTHRGRÀRKRLRQR]R7( RHR1R3R4R,R-t delay_statst pid_formattlinetcmdlinetremaining_lengthtlen1toffset2(RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pytformatys(     "  cs ˆjj p|jˆjjƒS(N(RR¹t did_some_ioR%(RH(RY(s,/usr/lib/python2.7/site-packages/iotop/ui.pyt should_formats icSs|jS(N(R&(RH((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$˜scSs|jS(N(R)(RH((s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$šsRxcsˆ|ˆ|ƒƒS(N((RH(Rxt stats_lambda(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$›streversei(tlisttfilterRMR»tvaluesRFRORNRR%tsortRPRQR\tmap(RYRÝRßR»((RxRYRàs,/usr/lib/python2.7/site-packages/iotop/ui.pytget_dataxs      cs)dtˆj|d|ƒjdƒtˆj|d|ƒjdƒfdtˆj|d|ƒjdƒtˆj|d|ƒjdƒfg‰tdtdƒd}ˆjjrÀ|d7}n |d 7}|d d d d dddg}ˆjƒ}ˆjjrYdg|}tjdƒ}g|D]} || ^q#}gˆD]} || ^q@‰nˆjj rîˆjj dkrÃxˆD]} t | ƒq~Wˆjj t |ƒkrÃt dj |ƒƒqÃnx|D]} t | ƒqÊWtjjƒn7ˆjjƒx7tˆƒD])\‰} ˆjjˆd| ˆj ƒqWˆjjtˆƒdtdƒtjBˆjƒˆj} x®tt|ƒƒD]š‰tj} |ˆ} ˆˆjkrµ| d} nˆˆjkrí| tjO} | ˆjrãdpæd7} n| | } | t| ƒ8} ˆjj| | ƒq€Wtj r0d}nd}t"t|ƒˆj#dt t$|ƒƒƒ}xt|ƒD]s‰yV‡‡‡fd†}y||ˆƒWn(t%k rÉ||ˆj&dƒƒnXWqotj'k ráqoXqoW|rˆjj(ˆj#tˆƒd|tjƒnˆjj)ƒdS(Ns,Total DISK READ : %s | Total DISK WRITE : %siiis,Actual DISK READ: %s | Actual DISK WRITE: %siR~tPIDtTIDs PRIOs USERs DISK READs DISK WRITEs SWAPINs IOs COMMANDs TIMEs %H:%M:%S iRt>td?dd@d dAd dBd dCƒ|j dDdd d dEd t d tj ƒ|j ƒ\‰}|ro|j dFdGj|ƒƒntˆƒˆjp…gˆ_ˆjp£ˆjp£ˆjˆ_‡fdH†‰ˆjr݇fdI†}t|ƒnˆƒdS(JNRs8unable to set locale, falling back to the default localetusagetversionsiotop s-os--onlyRÒt store_truetdestR¹R‰thelps1only show processes or threads actually doing I/Os-bs--batchRQsnon-interactive modes-ns--iterttypeRRftmetavartNUMs-number of iterations before ending [infinite]s-ds--delayRRjs#delay between iterations [1 second]tSECis-ps--pidtpidstappends"processes/threads to monitor [all]Rès-us--usertstrtuserssusers to monitor [all]tUSERs-Ps --processesR»s$only show processes, not all threadss-as --accumulatedR%s)show accumulated I/O instead of bandwidths-ks --kilobytesRs.use kilobytes instead of a human friendly units-ts--timeR's.add a timestamp on each line (implies --batch)s-qs--quiettcountRðis/suppress some lines of header (implies --batch)s --profiletprofilesUnexpected arguments: R~cs tˆƒS(N(R((R(s,/usr/lib/python2.7/site-packages/iotop/ui.pyR$bscsy ˆƒWnnXdS(N(((t main_loop(s,/usr/lib/python2.7/site-packages/iotop/ui.pytsafe_main_loopes (tlocalet setlocaletLC_ALLtErrorR<toptparset OptionParsertUSAGERt add_optionR‘t SUPPRESS_HELPt parse_argsRXRñRR1RQR'RðR7R'(tparserRkR9((R8Rs,/usr/lib/python2.7/site-packages/iotop/ui.pytmain6s\  ! !    !   (-t __future__RRTRlR:RR>R"R^RRaR't iotop.dataRRRRRt iotop.versionRtiotopRt iotop.ioprioRRRRR R6R>RÕR;R?RBRCRDREtobjectRFR RR'targvR@RE(((s,/usr/lib/python2.7/site-packages/iotop/ui.pytsD          "     ÿ}  $