ó
B¢Qc           @  sø  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l m Z m Z m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d d	 d
 d d d d g Z d „  Z d „  Z d „  Z d „  Z d „  Z e ƒ  Z d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d e f d „  ƒ  YZ" d e f d „  ƒ  YZ# d e f d „  ƒ  YZ$ d e% f d „  ƒ  YZ& d  „  Z' d! „  Z( d" „  Z) d# e
 j* d$ Z+ d% „  Z, d S(&   iÿÿÿÿ(   t   print_functionN(   t	   find_uidst   TaskStatsNetlinkt   ProcessListt   Stats(   t
   ThreadInfo(   t   VERSION(   t   ioprio(   t   IoprioSetErrort   Bt   Kt   Mt   Gt   Tt   Pt   Ec         C  s|   |  d k r d } n  |  d k  r1 d } |  }  n d St  t j |  d d ƒ d ƒ } d | t |  ƒ d d | >t | f S(	   Ni    t    t   -s   0.00 Bi   i
   s	   %s%.2f %si   (   t   intt   matht   logt   floatt   UNITS(   t   sizet   signt   expo(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   human_size-   s    	
 c         C  s   |  j  r d | d St | ƒ S(   Ns   %.2f Kg      @(   t	   kilobytesR   (   t   optionst   bytes(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   format_size9   s    	c         C  s!   t  |  | o t | ƒ | ƒ d S(   Ns   /s(   R   R   (   R   R   t   duration(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   format_bandwidth>   s    c           sÌ   ‡  f d †  } ˆ j  rF | j } ‡ f d †  } t j ƒ  | j ‰  n | j } ‡ f d †  } | | j ƒ } | | j ƒ } | | j ˆ  ƒ } | j | j	 }	 t
 d |	 ƒ }	 | |	 ˆ  ƒ }
 | | | |
 f S(   Nc           s   d t  d |  ˆ  d ƒ S(   Ns   %.2f %%gÂõ(\ÿX@g    ÐcA(   t   min(   t   delay(   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   delay2percentD   s    c           s   t  ˆ  |  ƒ S(   N(   R   (   R   R   (   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   <lambda>H   s    c           s   t  ˆ  |  | ƒ S(   N(   R    (   R   R   (   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   L   s   i    (   t   accumulatedt   stats_accumt   timet   stats_accum_timestampt   stats_deltat   blkio_delay_totalt   swapin_delay_totalt
   read_bytest   write_bytest   cancelled_write_bytest   max(   R   t   processR   R#   t   statst   display_formatt   io_delayt   swapin_delayR,   t   written_bytesR-   (    (   R   R   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   format_statsA   s    			c          C  sE   y  t  t d ƒ j ƒ  j ƒ  ƒ SWn t k
 r@ }  t |  ƒ d SXd  S(   Ns   /proc/sys/kernel/pid_maxi   (   t   lent   opent   readt   stript	   Exceptiont   print(   t   e(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   get_max_pid_widthV   s
     
t   CancelInputc           B  s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR?   d   s    t
   InvalidIntc           B  s   e  Z RS(    (   R@   RA   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRB   e   s    t
   InvalidPidc           B  s   e  Z RS(    (   R@   RA   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRC   f   s    t
   InvalidTidc           B  s   e  Z RS(    (   R@   RA   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRD   g   s    t   InvalidIoprioDatac           B  s   e  Z RS(    (   R@   RA   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRE   h   s    t   IOTopUIc        	   B  s  e  Z d  „  e f d „  e f d „  e f d „  e f d „  e f d „  e f d „  e f d „  e f g Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z	 d e d „ Z d e d „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C  s   |  j  S(   N(   t   pid(   t   pt   s(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   q   s    c         C  s
   |  j  ƒ  S(   N(   t   ioprio_sort_key(   RH   RI   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   r   s    c         C  s
   |  j  ƒ  S(   N(   t   get_user(   RH   RI   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   s   s    c         C  s   | j  S(   N(   R,   (   RH   RI   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   t   s    c         C  s   | j  | j S(   N(   R-   R.   (   RH   RI   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   u   s    c         C  s   | j  S(   N(   R+   (   RH   RI   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   v   s    c         C  s!   | j  p  t | j p | j ƒ S(   N(   R*   R   R,   R-   (   RH   RI   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   y   s   	c         C  s
   |  j  ƒ  S(   N(   t   get_cmdline(   RH   RI   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   {   s    c         C  s”   | |  _  | |  _ d |  _ t j |  j d |  _ |  j j s | |  _ |  j ƒ  y% t	 j
 ƒ  t	 j ƒ  t	 j d ƒ Wq t	 j k
 rŒ q Xn  d  S(   Ni   i   i    (   t   process_listR   t   sorting_keyRF   t   sorting_keyst   sorting_reverset   batcht   wint   resizet   cursest   use_default_colorst   start_colort   curs_sett   error(   t   selfRR   RM   R   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   __init__~   s    				


c         C  s   |  j  j ƒ  \ |  _ |  _ d  S(   N(   RR   t   getmaxyxt   heightt   width(   RY   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRS      s    c   
      C  sÎ  d } t  j ƒ  } |  j j sD | j t j j ƒ  t  j t  j	 Bƒ n  xƒ|  j j
 d  k sk | |  j j
 k  rÉ|  j j ƒ  \ } } |  j | d k | | |  j j ƒ |  j j
 d  k	 r× | d 7} | |  j j
 k rì Pqì n | d k rì d } n  y | j |  j j d ƒ } WnA t  j k
 rL} | j rF| j d t j k rFg  } qM‚  n Xx8 | D]0 \ } } | t  j t  j B@rTt j d ƒ qTqTW|  j j s¡|  j ƒ  n  | rG |  j j ƒ  }	 |  j |	 ƒ qG qG Wd  S(   Ni    i   g     @@(   t   selectt   pollR   RQ   t   registert   syst   stdint   filenot   POLLINt   POLLPRIt
   iterationst   NoneRM   t   refresh_processest   refresh_displayR   t   delay_secondsRX   t   argst   errnot   EINTRt   POLLERRt   POLLHUPt   exitRS   RR   t   getcht
   handle_key(
   RY   Rf   R_   t   totalt   actualt   eventsR=   t   fdt   eventt   key(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   run’   s:    &
		c         C  s   |  j  |  _  d  S(   N(   RP   (   RY   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   reverse_sorting³   s    c         C  s|   |  j  } |  j  | 7_  t d |  j  ƒ |  _  t t t j ƒ d |  j  ƒ |  _  | |  j  k rx t j |  j  d |  _ n  d  S(   Ni    i   (   RN   R/   R!   R7   RF   RO   RP   (   RY   t   deltat   orig_sorting_key(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   adjust_sorting_key¶   s    	"c         C  sÁ   |  j  j d d t d ƒ t j B|  j ƒ |  j  j d d | t j ƒ |  j  j ƒ  t j	 ƒ  t j
 d ƒ |  j  j d t | ƒ ƒ } t j
 d ƒ t j ƒ  | d k r« | S| r½ t ƒ  ‚ n  | S(   Ni   i    t    R   (   NR   (   RR   t   hlinet   ordRT   t   A_NORMALR]   t   addstrt   A_BOLDt   refresht   echoRW   t   getstrR7   t   noechoRg   R?   (   RY   t   promptt   defaultt   empty_is_cancelt   inp(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_strÀ   s    )

c         C  sD   |  j  | | | ƒ } y t | ƒ SWn t k
 r? t ƒ  ‚ n Xd  S(   N(   RŒ   R   t
   ValueErrorRB   (   RY   Rˆ   R‰   RŠ   R‹   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_intÏ   s
    c         C  sE   y |  j  d ƒ SWn- t k
 r- t ƒ  ‚ n t k
 r@ ‚  n Xd  S(   Ns   PID to ionice: (   RŽ   RB   RC   R?   (   RY   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_pidÖ   s    c         C  sE   y |  j  d ƒ SWn- t k
 r- t ƒ  ‚ n t k
 r@ ‚  n Xd  S(   Ns   TID to ionice: (   RŽ   RB   RD   R?   (   RY   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_tidÞ   s    c         C  s†   yA | d  k	 r+ |  j d | | t ƒ } n |  j d d  t ƒ } Wn t k
 r] t ƒ  ‚ n X| d k  sv | d k r‚ t ƒ  ‚ n  | S(   Ns'   I/O priority data (0-7, currently %s): s   I/O priority data (0-7): i    i   (   Rg   RŽ   t   FalseRB   RE   (   RY   t   ioprio_dataR‹   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_dataæ   s    	c         C  s  y | j  | ƒ } Wn t k
 r, d } n Xt | ƒ d } x½t rü|  j j d d t d ƒ t j B|  j	 ƒ |  j j
 d d | t j ƒ t | ƒ } xn t | ƒ D]` \ } } d | }	 | | k rÒ t j }
 n	 t j }
 |  j j
 d | |	 |
 ƒ | t |	 ƒ 7} q¤ Wxî t rø|  j j ƒ  } | t j t d ƒ f k rU| d k rU| d 8} Pq| t j t d ƒ f k rŠ| | k  rŠ| d 7} Pq| t j t d ƒ t d	 ƒ f k r¶| | S| d
 t j t j t j t d ƒ t d ƒ f k rt ƒ  ‚ qqWq@ Wd  S(   Niÿÿÿÿi   i    R~   s    %s t   lt   rs   
s   i   t   qt   Q(   t   indexR   R7   t   TrueRR   R   R€   RT   R   R]   t   insstrRƒ   t	   enumeratet	   A_REVERSERq   t   KEY_LEFTt	   KEY_RIGHTt	   KEY_ENTERt
   KEY_CANCELt	   KEY_CLOSEt   KEY_EXITR?   (   RY   Rˆ   t   display_listt   ret_listt   selectedt   set_lent   offsett   it   itemt   displayt   attrRx   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_setó   s:    
	)
		'
'
$!c         C  sU   d } d d d g } d d d g } | d  k r9 d } n  |  j | | | | ƒ } | S(	   Ns   I/O priority class: s	   Real-times   Best-effortt   Idlet   rtt   bet   idlei   (   Rg   R¬   (   RY   t   ioprio_classRˆ   t   classes_promptt   classes_retR‹   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_class  s    	s   Error!c         C  sg   |  j  j d d t d ƒ t j B|  j ƒ |  j  j d d d | t j ƒ |  j  j ƒ  t	 j
 d ƒ d  S(   Ni   i    R~   s     %s  (   RR   R   R€   RT   R   R]   Rš   Rœ   R„   R'   t   sleep(   RY   RX   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_error  s    ) c         C  s:   |  j  j d d t d ƒ t j B|  j ƒ |  j  j ƒ  d  S(   Ni   i    R~   (   RR   R   R€   RT   R   R]   R„   (   RY   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_clear"  s    )c           sb  ‡  f d †  } ‡  f d †  } ‡  f d †  } ‡  f d †  } i d „  t  d ƒ 6d „  t  d ƒ 6‡  f d	 †  t  d
 ƒ 6‡  f d †  t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6‡  f d †  t j 6‡  f d †  t j 6‡  f d †  t j 6‡  f d †  t j 6} | j | d „  ƒ } | ƒ  d  S(   Nc             s   ˆ  j  j t N_ d  S(   N(   R   R%   R™   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   toggle_accumulated'  s    c             s   ˆ  j  j t N_ d  S(   N(   R   t   onlyR™   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   toggle_only_io)  s    c             s0   ˆ  j  j t N_ ˆ  j j ƒ  ˆ  j j ƒ  d  S(   N(   R   t	   processesR™   RM   t   clearRh   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   toggle_processes+  s    c            s–  yÐ ˆ  j  j r0 ˆ  j ƒ  }  ˆ  j j |  ƒ } n! ˆ  j ƒ  } t | ˆ  j j ƒ } | j ƒ  } t	 j
 | ƒ \ } } ˆ  j | ƒ } | d k r– d } n ˆ  j | ƒ } | j | | ƒ ˆ  j j ƒ  ˆ  j j ƒ  Wnµ t k
 rù } ˆ  j d | j ƒ n™ t k
 rˆ  j d ƒ n| t k
 r3ˆ  j d ƒ n_ t k
 rPˆ  j d ƒ nB t k
 rmˆ  j d ƒ n% t k
 r‡ˆ  j ƒ  n Xˆ  j ƒ  d  S(   NR°   i    s   Error setting I/O priority: %ss   Invalid process id!s   Invalid thread id!s   Invalid I/O priority data!s   Invalid integer!(   R   R»   R   RM   t   get_processR   R   t   taskstats_connectiont
   get_ioprioR   t   to_class_and_dataR´   R“   t
   set_ioprioR¼   Rh   R   R¶   t   errRC   RD   RE   RB   R?   R·   (   RG   t	   exec_unitt   tidt   ioprio_valueR±   R’   R=   (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   ionice/  s:    	c           S  s   t  j d ƒ S(   Ni    (   Ra   Rp   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   T  s    R–   c           S  s   t  j d ƒ S(   Ni    (   Ra   Rp   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   V  s    R—   c             s
   ˆ  j  ƒ  S(   N(   Rz   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   X  s    R•   c             s
   ˆ  j  ƒ  S(   N(   Rz   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   Z  s    t   Rt   at   At   ot   ORH   R   R¨   t   Ic             s   ˆ  j  d ƒ S(   Niÿÿÿÿ(   R}   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   l  s    c             s   ˆ  j  d ƒ S(   Ni   (   R}   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   n  s    c             s   ˆ  j  t t j ƒ ƒ S(   N(   R}   R7   RF   RO   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   p  s    c             s   ˆ  j  t t j ƒ ƒ S(   N(   R}   R7   RF   RO   (    (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   r  s    c           S  s   d  S(   N(   Rg   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   u  s    (   R€   RT   R   Rž   t   KEY_HOMEt   KEY_ENDt   get(   RY   Rx   R¸   Rº   R½   RÇ   t   key_bindingst   action(    (   RY   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRr   &  s.    #c           sÉ   ‡ f d †  } ‡ f d †  } t  t | ˆ j j j ƒ  ƒ ƒ } t j ˆ j d ‰  ˆ j j	 rk d „  ‰ n	 d „  ‰ | j
 d ‡  ‡ f d †  d ˆ j ƒ ˆ j j s¶ | ˆ j d	 3n  t  t | | ƒ ƒ S(
   Nc           s<  t  ˆ  j |  ˆ  j j ƒ } | \ } } } } t j rI d | | f } n d } d t } | d |  j |  j ƒ  |  j	 ƒ  d  | | | f } |  j
 ƒ  }	 ˆ  j j sˆ  j t | ƒ }
 d |
 k  oÔ t |	 ƒ k  n r|
 d d } |
 | d } |	 |  d |	 | }	 qn  | |	 7} ˆ  j j s8| ˆ  j  } n  | S(	   Ns   %7s %7s s    ?unavailable?  s   %%%dds    %4s %-8s %11s %11s %si   i   i   t   ~(   R6   R   RM   R   R   t   has_blkio_delay_totalt   MAX_PID_WIDTHRG   RÀ   RK   RL   RQ   R]   R7   (   RH   R1   R3   R4   R,   R-   t   delay_statst
   pid_formatt   linet   cmdlinet   remaining_lengtht   len1t   offset2(   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   formaty  s(    	
"
c           s    ˆ  j  j p |  j ˆ  j  j ƒ S(   N(   R   R¹   t   did_some_ioR%   (   RH   (   RY   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   should_format  s    i    c         S  s   |  j  S(   N(   R&   (   RH   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   ˜  s    c         S  s   |  j  S(   N(   R)   (   RH   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   š  s    Rx   c           s   ˆ  |  ˆ |  ƒ ƒ S(   N(    (   RH   (   Rx   t   stats_lambda(    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   ›  s    t   reversei   (   t   listt   filterRM   R»   t   valuesRF   RO   RN   R   R%   t   sortRP   RQ   R\   t   map(   RY   RÝ   Rß   R»   (    (   Rx   RY   Rà   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   get_datax  s    		
c           s)  d t  ˆ j | d | ƒ j d ƒ t  ˆ j | d | ƒ j d ƒ f d t  ˆ j | d | ƒ j d ƒ t  ˆ j | d | ƒ j d ƒ f g ‰ t d t d ƒ d } ˆ j j rÀ | d 7} n
 | d	 7} | d
 d d d d d d g } ˆ j ƒ  } ˆ j j rYd g | } t j d ƒ } g  | D] }	 | |	 ^ q#} g  ˆ D] }
 | |
 ^ q@‰ n  ˆ j j	 rîˆ j j
 d k rÃx ˆ D] }
 t |
 ƒ q~Wˆ j j
 t | ƒ k rÃt d j | ƒ ƒ qÃn  x | D] }	 t |	 ƒ qÊWt j j ƒ  n7ˆ j j ƒ  x7 t ˆ ƒ D]) \ ‰  }
 ˆ j j ˆ  d |
 ˆ j  ƒ qWˆ j j t ˆ ƒ d t d ƒ t j Bˆ j ƒ ˆ j } x® t t | ƒ ƒ D]š ‰  t j } | ˆ  } ˆ  ˆ j k rµ| d } n  ˆ  ˆ j k rí| t j O} | ˆ j rãd pæd 7} n  | |  } | t | ƒ 8} ˆ j j | | ƒ q€Wt j  r0d  } n d } t" t | ƒ ˆ j# d t t$ | ƒ ƒ ƒ } x t | ƒ D]s ‰  yV ‡  ‡ ‡ f d †  } y | | ˆ  ƒ Wn( t% k
 rÉ| | ˆ  j& d ƒ ƒ n XWqot j' k
 ráqoXqoW| rˆ j j( ˆ j# t ˆ ƒ d | t j ƒ n  ˆ j j) ƒ  d  S(   Ns,   Total DISK READ : %s | Total DISK WRITE : %si    i   i   s,   Actual DISK READ: %s | Actual DISK WRITE: %si   R~   t   PIDt   TIDs     PRIOs     USERs        DISK READs     DISK WRITEs     SWAPINs         IOs       COMMANDs       TIMEs	   %H:%M:%S i   R   t   >t   <sN   CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine SWAPIN and IO %c           s(   ˆ j  j ˆ  t ˆ ƒ d d |  ƒ d  S(   Ni   i    (   RR   R‚   R7   (   RØ   (   R¨   RY   t   summary(    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   print_lineÛ  s    s   utf-8(*   R    R   t   rjustR/   RÕ   R»   Rç   R'   t   strftimeRQ   t   quietR<   R   t   joinRa   t   stdoutt   flushRR   t   eraseR›   R‚   R]   R   R7   R€   RT   Rœ   t   rangeRN   Rƒ   RP   R   RÔ   Rg   R!   R\   t   boolt   UnicodeEncodeErrort   encodeRX   Rš   R„   (   RY   t
   first_timeRs   Rt   R   RG   t   titlest   linest   current_timeR”   RI   t   remaining_colsR«   t   titlet
   status_msgt	   num_linesRí   (    (   R¨   RY   Rì   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRi   ¡  sz    #)
 !%
		

		,N(   R@   RA   R‘   R™   RO   RZ   RS   Ry   Rz   R}   Rg   RŒ   RŽ   R   R   R“   R¬   R´   R¶   R·   Rr   Rç   Ri   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRF   n   s4   			!		
				 			R	)c         C  sŒ   | j  r" t j t j t j ƒ n/ d „  } t j t j | ƒ t j t j | ƒ t | ƒ } t | | ƒ } t |  | | ƒ } | j	 ƒ  d  S(   Nc          _  s   t  j d ƒ d  S(   Ni    (   Ra   Rp   (   Rk   t   kwargs(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   clean_exitî  s    (
   RQ   t   signalt   SIGPIPEt   SIG_DFLt   SIGINTt   SIGTERMR   R   RF   Ry   (   RR   R   R  R¿   RM   t   ui(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   run_iotop_windowê  s    		c         C  s   y* |  j  r t d  |  ƒ St j t |  ƒ SWn^ t k
 rŠ } | j t j k r„ t | d t	 j
 ƒt d d t	 j
 ƒt	 j d ƒ q‹ ‚  n Xd  S(   Nt   files’  
The Linux kernel interfaces that iotop relies on now require root priviliges
or the NET_ADMIN capability. This change occured 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.i   (   RQ   R	  Rg   RT   t   wrappert   OSErrorRl   t   EPERMR<   Ra   t   stderrRp   (   R   R=   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt	   run_iotop÷  s    	c         C  s  d } yQ d d  l  } d d  l } t d ƒ | j d t ƒ  t ƒ  | ƒ | j | ƒ } Wnq t k
 rÊ d d  l } d d  l	 } | j
 | d d ƒ} t d ƒ | j |  ƒ | j ƒ  | j j | ƒ } n X| j ƒ  | j d d	 ƒ | j d
 ƒ | j d
 ƒ t j | ƒ d  S(   Ns
   iotop.profiÿÿÿÿs   Profiling using cProfiles   continuation()t
   lineeventsi   s   Profiling using hotshotR'   t   callsi2   (   t   cProfilet   pstatsR<   t   runctxt   globalst   localsR   t   ImportErrort   hotshott   hotshot.statst   Profilet   runcallt   closeR1   t   loadt
   strip_dirst
   sort_statst   print_statst   print_calleest   ost   remove(   t   continuationt	   prof_fileR  R  R1   R  t   prof(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   _profile  s(    



sF  %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.i    c            sè  y t  j t  j d ƒ Wn t  j k
 r7 t d ƒ n Xt j d t d d t ƒ }  |  j	 d d d d	 d
 d d t
 d d ƒ|  j	 d d d d	 d
 d d d ƒ|  j	 d d d d d
 d d d d d ƒ|  j	 d d d d d
 d d d d d  d d! ƒ|  j	 d" d# d d d
 d$ d d% d d& d d' ƒ|  j	 d( d) d d* d
 d+ d d% d d, d d- ƒ|  j	 d. d/ d d	 d
 d0 d t
 d d1 ƒ|  j	 d2 d3 d d	 d
 d4 d t
 d d5 ƒ|  j	 d6 d7 d d	 d
 d8 d t
 d d9 ƒ|  j	 d: d; d d	 d
 d< d d= ƒ|  j	 d> d? d d@ d
 dA d dB d dC ƒ|  j	 dD d d	 d
 dE d t
 d t j ƒ|  j ƒ  \ ‰ } | ro|  j dF dG j | ƒ ƒ n  t ˆ ƒ ˆ j p…g  ˆ _ ˆ j p£ˆ j p£ˆ j ˆ _ ‡ f dH †  ‰  ˆ j rÝ‡  f dI †  } t | ƒ n ˆ  ƒ  d  S(J   NR   s8   unable to set locale, falling back to the default localet   usaget   versions   iotop s   -os   --onlyRÒ   t
   store_truet   destR¹   R‰   t   helps1   only show processes or threads actually doing I/Os   -bs   --batchRQ   s   non-interactive modes   -ns   --itert   typeR   Rf   t   metavart   NUMs-   number of iterations before ending [infinite]s   -ds   --delayR   Rj   s#   delay between iterations [1 second]t   SECi   s   -ps   --pidt   pidst   appends"   processes/threads to monitor [all]Rè   s   -us   --usert   strt   userss   users to monitor [all]t   USERs   -Ps   --processesR»   s$   only show processes, not all threadss   -as   --accumulatedR%   s)   show accumulated I/O instead of bandwidths   -ks   --kilobytesR   s.   use kilobytes instead of a human friendly units   -ts   --timeR'   s.   add a timestamp on each line (implies --batch)s   -qs   --quiett   countRð   i    s/   suppress some lines of header (implies --batch)s	   --profilet   profiles   Unexpected arguments: R~   c             s
   t  ˆ  ƒ S(   N(   R  (    (   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR$   b  s    c             s   y ˆ  ƒ  Wn n Xd  S(   N(    (    (   t	   main_loop(    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   safe_main_loope  s    (   t   localet	   setlocalet   LC_ALLt   ErrorR<   t   optparset   OptionParsert   USAGER   t
   add_optionR‘   t   SUPPRESS_HELPt
   parse_argsRX   Rñ   R   R1  RQ   R'   Rð   R7  R'  (   t   parserRk   R9  (    (   R8  R   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   main6  s\    !!!
	(-   t
   __future__R    RT   Rl   R:  R   R>  R"  R^   R  Ra   R'   t
   iotop.dataR   R   R   R   R   t   iotop.versionR   t   iotopR   t   iotop.ioprioR   R   R   R   R    R6   R>   RÕ   R;   R?   RB   RC   RD   RE   t   objectRF   R	  R  R'  t   argvR@  RE  (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   <module>   sD   "						ÿ }			$