ó
Fµ­Nc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d9 d: d; d< d= d> d? d@ dA dB dC g Z dD dE dF dG dH dI dJ dK dL dM dN g Z d" „  Z d# e f d$ „  ƒ  YZ e e ƒ Z	 e e ƒ Z
 y e  j d d% e ƒZ Wn  e k
 rð e  j d ƒ Z n Xe j Z d d& d' d( g Z d) Z d* Z d) e >d) Z d+ „  Z d, „  Z d- „  Z e j Z e d. ƒ \ Z Z Z Z Z Z e j  Z  d/ Z! d0 „  Z" d1 „  Z# d2 „  Z$ d3 „  Z% d4 „  Z& e' d5 k rd  d l( Z( e) e( j* ƒ d6 k rçe+ e( j* d) ƒ Z, n e j- ƒ  Z, d7 Ge, GHd8 Ge# e, ƒ GHn  d S(O   iÿÿÿÿNt   alphat   *i»  s   arm*i;  s   i*86i"  s   ia64*iû  s   parisc*i  s   powerpc*i  s   s390*i  s   sparc*iÚ   s   sh*i!  s   x86_64*t   32bitt   64bitiü   iº  i:  iú  i  i  i  iÄ   i   iû   c         C   sf   t  j ƒ  d } t j ƒ  d } x? |  D]7 \ } } } t j | | ƒ r' t j | | ƒ r' | Sq' Wd  S(   Ni   i    (   t   ost   unamet   platformt   architecturet   fnmatch(   t   syscall_listt   archt   bitst   candidate_archt   candidate_bitst
   syscall_nr(    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   find_ioprio_syscall_number9   s    t   IoprioSetErrorc           B   s   e  Z d  „  Z RS(   c         C   s7   y t  j | ƒ |  _ Wn t k
 r2 | |  _ n Xd  S(   N(   R   t   strerrort   errt	   TypeError(   t   selfR   (    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   __init__C   s    (   t   __name__t
   __module__R   (    (    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyR   B   s   t	   use_errnot   rtt   bet   idlei   i   c         C   sB   y t  j |  ƒ }  Wn  t k
 r5 t  j d  ƒ }  n X|  t >| BS(   N(   t   PRIORITY_CLASSESt   indext
   ValueErrort   Nonet   IOPRIO_CLASS_SHIFT(   t   ioprio_classt   ioprio_data(    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   ioprio_valueY   s
    c         C   s   t  |  t ?S(   N(   R   R    (   t   ioprio(    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyR!   `   s    c         C   s   |  t  @S(   N(   t   IOPRIO_PRIO_MASK(   R$   (    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyR"   c   s    i   i    c         C   s_   t  |  ƒ } t t |  ƒ } | d d } | t t f k rC d | S| t k rS d Sd | Sd  S(   Ni   i   s   rt/%dR   s   be/%d(   t   sched_getschedulert   getpriorityt   PRIO_PROCESSt
   SCHED_FIFOt   SCHED_RRt
   SCHED_IDLE(   t   pidt	   schedulert   nicet   ioprio_nice(    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   get_ioprio_from_schedl   s    c         C   sr   t  d  k r d St t  t |  ƒ } | d k  r2 d St | ƒ } | sN t |  ƒ S| d k r^ | Sd | t | ƒ f S(   Ns   ?sysi    s   ?errR   s   %s/%d(   t   __NR_ioprio_getR   t   syscallt   IOPRIO_WHO_PROCESSR!   R0   R"   (   R,   R$   t
   prio_class(    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   getx   s    
c         C   sŽ   t  d  k r t d ƒ ‚ n  t | | ƒ } t t  |  | | d t ƒ} | d k  rŠ y t j ƒ  } Wn t k
 rz d } n Xt | ƒ ‚ n  d  S(   Ns   No ioprio_set syscall foundR   i    s<   Unknown error (errno support not available before Python2.6)(	   t   __NR_ioprio_setR   R   R#   R2   t   Truet   ctypest	   get_errnot   AttributeError(   t   whicht   whoR!   R"   t
   ioprio_valt   retR   (    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt
   set_ioprio‡   s    
c         C   s¢   |  d d k r t  |  d ƒ Sd |  k rw |  j d ƒ rC d } n |  j d ƒ r[ d } n  t |  j d ƒ d ƒ } n |  d k r’ d } d } n  d | t >| S(	   Ni    t   ?i   t   /s   rt/s   be/R   i   (   t   ordt
   startswitht   intt   splitR    (   t   keyt   shiftt   prio(    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   sort_key”   s    			c         C   sG   d |  k r3 |  j  d ƒ } | d t | d ƒ f S|  d k rC d Sd S(   NRA   i    i   R   (   s   idlei    (   NN(   RE   RD   R   (   t
   ioprio_strRE   (    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   to_class_and_data¤   s    t   __main__i   s   pid:s   ioprio:(   R    R   i»  (   s   arm*R   i;  (   s   i*86R   i"  (   s   ia64*R   iû  (   s   parisc*R   i  (   s   powerpc*R   i  (   s   s390*R   i  (   s   sparc*R   iÚ   (   s   sh*R   i!  (   s   x86_64*s   32biti"  (   s   x86_64*s   64bitiü   (   R    R   iº  (   s   arm*R   i:  (   s   i*86R   i!  (   s   ia64*R   iú  (   s   parisc*R   i  (   s   powerpc*R   i  (   s   s390*R   i  (   s   sparc*R   iÄ   (   s   sh*R   i   (   s   x86_64*s   32biti!  (   s   x86_64*s   64bitiû   (.   R8   R   R   R   t   IOPRIO_GET_ARCH_SYSCALLt   IOPRIO_SET_ARCH_SYSCALLR   t	   ExceptionR   R1   R6   t   CDLLR   R7   t   ctypes_handleR   R2   R   R3   R    R%   R#   R!   R"   R&   t   ranget   SCHED_OTHERR)   R*   t   SCHED_BATCHt	   SCHED_ISOR+   R'   R(   R0   R5   R?   RI   RK   R   t   syst   lent   argvRD   R,   t   getpid(    (    (    s0   /usr/lib/python2.7/dist-packages/iotop/ioprio.pyt   <module>   sr   																