Ñò þIc@søddkZddkZddkZddkZddkZddkZddkZddkZddkZddk Z ddk l Z l Z ddk lZlZlZlZddklZlZyeieZWnej o eZnXeiidƒZe pe o=d„ZdGHdGeeƒGHd GeeƒGHeid ƒnd efd „ƒYZ d e fd„ƒYZ!d Z"d Z#defd„ƒYZ$d„Z%d„Z&de fd„ƒYZ'de fd„ƒYZ(de fd„ƒYZ)dS(iÿÿÿÿN(tiopriotvmstat(t ConnectiontNETLINK_GENERICtU32Attrt NLM_F_REQUEST(t Controllert GeNlMessages /proc/self/iocCs|odpdS(NtFounds Not found((tboolean((s./usr/lib/python2.6/site-packages/iotop/data.pytboolean2stringss<Could not run iotop as some of the requirements are not met:s'- Python >= 2.5 for AF_NETLINK support:st- Linux >= 2.6.20 with I/O accounting support (CONFIG_TASKSTATS, CONFIG_TASK_DELAY_ACCT, CONFIG_TASK_IO_ACCOUNTING):itDumpableObjectcBseZdZd„ZRS(sFBase class for all objects that allows easy introspection when printedcCs*dtt|ƒƒd ti|iƒfS(Ns%s: %s>iÿÿÿÿ(tstrttypetpprinttpformatt__dict__(tself((s./usr/lib/python2.6/site-packages/iotop/data.pyt__repr__*s(t__name__t __module__t__doc__R(((s./usr/lib/python2.6/site-packages/iotop/data.pyR (stStatscBsSeZdddddgZd „Zed „Zd „Zd „Zed„ƒZ RS(tblkio_delay_totali(tswapin_delay_totali8t read_bytesiøt write_bytesitcancelled_write_bytesicCsOxHtiD]=\}}|||d!}t||tid|ƒdƒq WdS(NitQi(Rtmembers_offsetstsetattrtstructtunpack(Rttask_stats_buffertnametoffsettdata((s./usr/lib/python2.6/site-packages/iotop/data.pyt__init__;s cCsgtitƒ}xQtiD]F\}}t||ƒ}t||ƒ}t|||||fƒƒqW|S(sAReturns a new Stats object built from operator(self, other_stats)(Rt__new__RtgetattrR(Rt other_statstoperatort delta_statsR"R#t self_valuet other_value((s./usr/lib/python2.6/site-packages/iotop/data.pyt accumulate@s  cCsd„}|i|d|ƒS(sReturns self - other_statscSs|\}}||S(N((t.0tmetother((s./usr/lib/python2.6/site-packages/iotop/data.pytsubtractKs R)(R-(RR(R1((s./usr/lib/python2.6/site-packages/iotop/data.pytdeltaIs cCs9x2tiD]'\}}t||ƒdjotSq WtS(Ni(RRR'tFalsetTrue(RR"R#((s./usr/lib/python2.6/site-packages/iotop/data.pyt is_all_zeroOs   cCs=titƒ}x'tiD]\}}t||dƒqW|S(Ni(RR&RR(tstatsR"R#((s./usr/lib/python2.6/site-packages/iotop/data.pytbuild_all_zeroUs  (sblkio_delay_totali((sswapin_delay_totali8(Riø(Ri(Ri( RRRR%tsumR-R2R5t staticmethodR7(((s./usr/lib/python2.6/site-packages/iotop/data.pyR2s    tTaskStatsNetlinkcBseZd„Zd„ZRS(cCs=||_ttƒ|_t|iƒ}|idƒ|_dS(Nt TASKSTATS(toptionsRRt connectionRt get_family_idt family_id(RR<t controller((s./usr/lib/python2.6/site-packages/iotop/data.pyR%fs c Cs7t|idtdtt|ƒgdtƒ}|i|iƒy|iiƒ}Wn0t j o$}|i t i jodS‚nXt |i ƒdjodS|i d}tid|i dd!ƒ\}}tid |i dd !ƒd }|d jpt‚|td jpt‚|djpt‚t|ƒS(Ntcmdtattrstflagsi$itHHiitHiii i(RR?tTASKSTATS_CMD_GETRtTASKSTATS_CMD_ATTR_PIDRtsendR=trecvtOSErrorterrnotESRCHtlentpayloadRR tAssertionErrorR( Rtpidtrequesttreplytet reply_datat reply_lengtht reply_typet reply_version((s./usr/lib/python2.6/site-packages/iotop/data.pytget_single_task_statsls&  " (RRR%RX(((s./usr/lib/python2.6/site-packages/iotop/data.pyR:cs cCsÒg|_t}x¤|ipgD]’}yt|ƒ}Wn^tj oRyti|ƒ}Wn,tj o ti dI|IJt }q—X|i }nX|p|ii |ƒq q W|oti dƒndS(sDBuild options.uids from options.users by resolving usernames to UIDss Unknown user:iN(tuidsR3tuserstintt ValueErrortpwdtgetpwnamtKeyErrortsyststderrR4tpw_uidtappendtexit(R<terrortutuidtpasswd((s./usr/lib/python2.6/site-packages/iotop/data.pyt find_uidsˆs"  cCs5y|idƒSWntj o|idƒSXdS(Nsutf-8t string_escape(tdecodetUnicodeDecodeErrortencode(ts((s./usr/lib/python2.6/site-packages/iotop/data.pytsafe_utf8_decodeœst ThreadInfocBs)eZdZd„Zd„Zd„ZRS(sStats for a single threadcCs(||_t|_d|_d|_dS(N(ttidR4tmarktNonet stats_totalt stats_delta(RRq((s./usr/lib/python2.6/site-packages/iotop/data.pyR%¤s   cCsti|iƒS(N(RtgetRq(R((s./usr/lib/python2.6/site-packages/iotop/data.pyt get_ioprioªscCs9|ip ||_n|i|iƒ|_||_dS(N(RtR2Ru(RR6((s./usr/lib/python2.6/site-packages/iotop/data.pyt update_stats­s  (RRRR%RwRx(((s./usr/lib/python2.6/site-packages/iotop/data.pyRp¢s  t ProcessInfocBsqeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z RS( s˜Stats for a single process (a single line in the output): if options.processes is set, it is a collection of threads, otherwise a single thread.cCsU||_d|_d|_h|_tiƒ|_tiƒ|_t i ƒ|_ dS(N( RPRsRgtusertthreadsRR7Rut stats_accumttimetstats_accum_timestamp(RRP((s./usr/lib/python2.6/site-packages/iotop/data.pyR%¸s    cCsV|io#|i o|i|ijotS|io|iƒ|ijotStS(N(tpidst processesRPR3RYtget_uidR4(RR<((s./usr/lib/python2.6/site-packages/iotop/data.pyt is_monitoredÁs  cCsp|io|iSy!tid|iƒti}Wntj o d}nX||ijo d|_n|S(Ns/proc/%d(RgtoststatRPtST_UIDRJRsRz(RRg((s./usr/lib/python2.6/site-packages/iotop/data.pyRÍs !  cCsz|iƒ}|dj oS|i oHytti|ƒiƒ|_Wqltj ot|ƒ|_qlXn|ipdS(Ns{none}( RRsRzRoR]tgetpwuidtpw_nameR_R (RRg((s./usr/lib/python2.6/site-packages/iotop/data.pytget_userÝs cCs‰ytd|iƒ}Wntj odSX|iƒ}d}|i|ƒo|diƒ}nd}|od|}nd}|S(Ns/proc/%d/statuss{no such process}sName: its[%s]s {no name}(topenRPtIOErrortreadlinet startswithtstrip(Rt proc_statust first_linetprefixR"((s./usr/lib/python2.6/site-packages/iotop/data.pytget_proc_status_nameæs cCs¾y&td|iƒ}|idƒ}Wntj odSX|p |iƒS|idƒ}|didƒo-|didƒd}|d||d s (tallR{t itervalues(R((s./usr/lib/python2.6/site-packages/iotop/data.pyt did_some_ios cCsAtd„|iiƒDƒƒ}t|ƒdjo |iƒSdS(Ncssx|]}|iƒVqWdS(N(Rw(R.RŸ((s./usr/lib/python2.6/site-packages/iotop/data.pys s it?(tsetR{R¡RMtpop(Rt priorities((s./usr/lib/python2.6/site-packages/iotop/data.pyRw s cCsti|iƒƒS(N(Rtsort_keyRw(R((s./usr/lib/python2.6/site-packages/iotop/data.pytioprio_sort_keyscCs=|ii|dƒ}|pt|ƒ}||i|sF          "     .%  |