ó
æ”\c           @   s  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 e Z	 y= e  j
 ƒ  d k r” e j ƒ  d k r” d  d l Z e Z	 n  Wn n Xy d  d l Z e Z Wn e Z n Xd  d l j Z d  d l Z d  d	 l m Z e j j ƒ  Z d
 d d „  ƒ  YZ d S(   iÿÿÿÿN(   t	   ConfigObjt   ConfigObjErrori    t   i386t   i486t   i586t   i686t   x86_64(   t   commandst   ProfileRecommenderc           B   s)   e  Z d  „  Z e d „ Z e d „ Z RS(   c         C   s   t  ƒ  |  _ d  S(   N(   R   t	   _commands(   t   self(    (    sC   /usr/lib/python2.7/site-packages/tuned/utils/profile_recommender.pyt   __init__   s    c         C   sX  t  j } | r | St j ƒ  d k } | s; t j d ƒ n  |  j t  j d | ƒ} | d  k	 rc | Si  } xœ t  j	 D]‘ } g  } y t j
 | ƒ } Wn? t k
 rÓ } | j t j k rÔ t j d | | f ƒ qÔ n Xx- | D]% }	 t j j | |	 ƒ }
 |
 | |	 <qÛ Wqs WxI t | j ƒ  ƒ D]5 }	 | |	 }
 |  j |
 d | ƒ} | d  k	 r| SqW| S(   Ni    st   Profile recommender is running without root privileges. Profiles with virt recommendation condition will be omitted.t   has_roots   error accessing %s: %s(   t   constst   DEFAULT_PROFILEt   ost   geteuidt   logt   warningt   process_configt   RECOMMEND_CONF_FILEt   Nonet   RECOMMEND_DIRECTORIESt   listdirt   OSErrort   errnot   ENOENTt   errort   patht   joint   sortedt   keys(   R
   t	   hardcodedt   profileR   t   matchingt   filest	   directoryt   contentst   et   nameR   (    (    sC   /usr/lib/python2.7/site-packages/tuned/utils/profile_recommender.pyt	   recommend    s6    		
c      	   C   s¥  d  } yet j j | ƒ s d  St | d t d t ƒ} x0t | j ƒ  ƒ D]} t } xât | | j ƒ  ƒ D]Ê} | | | } | d k r– d } n  | d k ré | s² t } Pn  t	 j
 | |  j j d g ƒ d t	 j ƒ s7t } q7qm | d k r(t	 j
 | |  j j t j ƒ t	 j ƒ s7t } q7qm | d	 d
 k r|t j j | ƒ spt	 j
 | |  j j | ƒ t	 j ƒ r7t } q7qm | d	 d !d k rÕt j ƒ  }	 |	 j ƒ  t |	 j t	 j | ƒ ƒ ƒ d	 k r7t } q7qm | d k rTt r@xg t j ƒ  j ƒ  D]9 }
 |
 d d j d ƒ } t	 j
 | | t	 j ƒ rúPqúqúWt } q7t j d | ƒ qm | d k rm t  r#t! j" j# t! j" j$ d t ƒ} d } y | j ƒ  | j% d } WnQ t& t' t( f k
 rø} t) | d ƒ rù| j* t* j+ k rùt j, d | ƒ qùn Xt	 j
 | | t	 j ƒ d  k r4t } q4q7t j, d | ƒ qm qm W| rJ t	 j d ƒ } | j- d | ƒ } PqJ qJ WWn3 t& t' t. f k
 r } t j, d | | f ƒ n X| S(   Nt   list_valuest   interpolationt    s   ^$t   virts	   virt-whati   t   systemi    t   /i   t   processt   chassis_typet   datat   Typet   asciisC   Ignoring 'chassis_type' in '%s',								dmidecode is not available.t   syspurpose_rolet   raise_on_errort   roleR   s/   Failed to load the syspurpose										file: %ss[   Failed to process 'syspurpose_role' in '%s'								, the syspurpose module is not availables   ,[^,]*$s   error processing '%s', %s(/   R   R   R   t   isfileR    t   Falset   listR   t   Truet   ret   matchR	   t   executet   St	   read_fileR   t   SYSTEM_RELEASE_FILEt   existst   procfst   pidstatst   reload_threadst   lent   find_by_regext   compilet   have_dmidecodet	   dmidecodet   chassist   valuest   decodet
   IGNORECASER   t   debugt   have_syspurposet
   syspurposeR#   t   SyspurposeStoret   USER_SYSPURPOSER%   t   IOErrorR   t   KeyErrort   hasattrR   R   R   t   subR   (   R
   t   fnameR   t   matching_profilet   configt   sectionR<   t   optiont   valuet   psRJ   R0   t   sR6   R&   t   r(    (    sC   /usr/lib/python2.7/site-packages/tuned/utils/profile_recommender.pyR   =   s„    		"		
$				
!(   t   __name__t
   __module__R   R8   R(   R:   R   (    (    (    sC   /usr/lib/python2.7/site-packages/tuned/utils/profile_recommender.pyR      s   	(   R   R   R   R   R   (    (   R   R;   R   RB   t   platformt	   configobjR    R   R8   RH   R   t   machineRI   R:   t   syspurpose.filesRP   RO   t   tuned.constsR   t
   tuned.logst   tunedt   tuned.utils.commandsR   t   logst   getR   R   (    (    (    sC   /usr/lib/python2.7/site-packages/tuned/utils/profile_recommender.pyt   <module>   s,   $

