Edit File: profile_recommender.cpython-36.pyc
3 ��c3��������������� ���@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlmZmZ�yd�dlZ dZ W�n���dZ Y�nX�d�dljZd�dl Zd�dlmZ�ejj��ZG�dd��d�ZdS�)�����N)�ConfigParser�ErrorTF)�commandsc���������������@���s0���e�Zd�Zddd�Zdd��Zd dd�Zd d ��ZdS�)�ProfileRecommenderFc�������������C���s���||�_�t��|�_d�|�_d�S�)N)� _is_hardcodedr���� _commands� _chassis_type)�selfZis_hardcoded��r ����)/usr/lib/python3.6/profile_recommender.py�__init__���s����zProfileRecommender.__init__c������� ������C���s��t�j}|�jr|S�tj��dk}|s*tjd��|�jt�j|d�}|d�k rF|S�i�}x�t�j D�]|}g�}ytj |�}W�n@�tk r��}�z$|jtj kr�tjd||f���W�Y�d�d�}~X�nX�x"|D�]}tjj||�} | ||<�q�W�qRW�x6t|j���D�]&}||�} |�j| |d�}|d�k r�|S�q�W�|S�)Nr���ztProfile recommender is running without root privileges. Profiles with virt recommendation condition will be omitted.)�has_rootzerror accessing %s: %s)�constsZDEFAULT_PROFILEr����os�geteuid�logZwarning�process_configZRECOMMEND_CONF_FILEZRECOMMEND_DIRECTORIES�listdir�OSError�errno�ENOENT�error�path�join�sorted�keys) r ���Zprofiler ���Zmatching�filesZ directory�contents�e�namer���r ���r ���r���� recommend���s6���� $ zProfileRecommender.recommendTc����������!���C���s���d�}d}�y�t�jj|�sd�S�tdddd�}t|_t|��}|j||��W�d�Q�R�X��x:|j��D��],}d}�x|j |�D��]�} |j || dd�} | dkr�d} | d kr�|s�d}P�tj| |�j jd g�d�tj�s�d}qt| dk��r�tj| |�j jtjdd �tj��sjd}qt| d�dk�r<t�jj| ���s6tj| |�j j| �tj���rjd}qt| dd��dk�r~tj��}|j���t|jtj| ���dk�rjd}qt| dk�r�|�j��}tj| |tj��sjd}qt| dkrtd} t�r:tjjtjjdd�}y|j���|j d�} W�nR�t!t"t#fk �r6�}�z.t$|d��r&|j%t%j&k�r&t'j(d|���W�Y�d�d�}~X�nX�n|�sRt'j(d|���d}tj| | tj�d�krtd}qtW�|r\tjd�}|j)d|�}P�q\W�W�n<�t!t"t*fk �r��}�zt'j(d||f���W�Y�d�d�}~X�nX�|S�)NF�=�#)Z delimitersZinline_comment_prefixes�strictT)�raw��z^$Zvirtz virt-what�����system)Zno_errorr����/����Zprocess�chassis_typeZsyspurpose_role)Zraise_on_error�roler���z/Failed to load the syspurpose file: %sz\Failed to process 'syspurpose_role' in '%s' , the syspurpose module is not availablez,[^,]*$zerror processing '%s', %s)+r���r����isfiler����strZoptionxform�openZ read_fileZsectionsZoptions�get�re�matchr���Zexecute�Sr���ZSYSTEM_RELEASE_FILE�exists�procfsZpidstatsZreload_threads�lenZ find_by_regex�compile�_get_chassis_type� IGNORECASE�have_syspurpose� syspurposer���ZSyspurposeStoreZUSER_SYSPURPOSEr����IOErrorr����KeyError�hasattrr���r���r���r����subr���)r ���Zfnamer ���Zmatching_profileZsyspurpose_error_logged�config�fZsectionr1���Zoption�valueZpsr*���r+����sr����rr ���r ���r���r���9���s����� $z!ProfileRecommender.process_configc����������%���C���s���|�j�d�k r tjd|�j����|�j�S�dddddddd d ddd ddddddddddddddddddd d!d"d#d$d%d&g%}y0td'd(��}t|j���}W�d�Q�R�X�||�|�_�W�nT�tk r����tjd)|���Y�n4�tt fk r��}�ztj d*|���W�Y�d�d�}~X�nX�|�j��rtjd+|�j����|�j�S�yXtjd,d-d.gtj tj d/d0�}|j��\}}|j�rZtjd1|j|f���n|j��j��|�_�W�n6�tt fk �r��}�ztj d2|���W�Y�d�d�}~X�nX�|�j��s�tjd3��d|�_�ntjd+|�j����|�j�S�)4Nz"returning cached chassis type '%s'r%���ZOtherZUnknownZDesktopzLow Profile Desktopz Pizza Boxz Mini TowerZTowerZPortableZLaptopZNotebookz Hand HeldzDocking Stationz All In OnezSub NotebookzSpace-savingz Lunch BoxzMain Server ChassiszExpansion ChassiszSub ChassiszBus Expansion ChassiszPeripheral ChassiszRAID ChassiszRack Mount ChassiszSealed-case PCzMulti-systemZ CompactPCIZAdvancedTCAZBladezBlade EnclosingZTabletZConvertibleZ DetachablezIoT GatewayzEmbedded PCzMini PCzStick PCz(/sys/devices/virtual/dmi/id/chassis_typerC���z/Unknown chassis type id read from dmi sysfs: %dz"error accessing dmi sysfs file: %szchassis type - %sZ dmidecodez-szchassis-typeT)�stdout�stderrZ close_fdsz,dmidecode finished with error (ret %d): '%s'z#error executing dmidecode tool : %sz!could not determine chassis type.)r���r����debugr.����int�read� IndexErrorr���r���r;����warn� subprocess�Popen�PIPEZcommunicate� returncode�strip�decode)r ���ZDMI_CHASSIS_TYPESZsysfs_chassis_typeZchassis_type_idr���Zp_dmiZ dmi_outputZ dmi_errorr ���r ���r���r7�������sF���� z$ProfileRecommender._get_chassis_typeN)F)T)�__name__� __module__�__qualname__r���r ���r���r7���r ���r ���r ���r���r������s��� Ir���)r���r0���r���r4���rK���Ztuned.utils.config_parserr���r���Zsyspurpose.filesr:���r9���Ztuned.constsr���Z tuned.logsZtunedZtuned.utils.commandsr���Zlogsr/���r���r���r ���r ���r ���r����<module>���s���