관리-도구
편집 파일: profile_recommender.cpython-39.pyc
a ����,�g9����������������������@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlmZmZ�zd�dlZ dZ W�n���dZ Y�n0�d�dlmZ�d�dl Zd�dlmZ�ej���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 ����C/usr/lib/python3.9/site-packages/tuned/utils/profile_recommender.py�__init__���s����zProfileRecommender.__init__c����������� ������C���s��t�j}|�jr|S�t���dk}|s*t�d��|�jt�j|d�}|d�urF|S�i�}t�j D�]z}g�}zt� |�}W�nB�ty��}�z*|jtj kr�t�d||f���W�Y�d�}~n d�}~0�0�|D�]}tj�||�} | ||<�q�qPt|����D�]*}||�} |�j| |d�}|d�ur�|��S�q�|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�log�warning�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���s8���� � ( zProfileRecommender.recommendTc�����������������C���s���d�}d}�z�t�j�|�sW�d�S�tdddd�}t|_t|��}|�||��W�d�����n1�s\0����Y��|���D��],}d}|� |�D��]�} |j || dd�} | dkr�d} | d kr�|s�d}��q|t�| |�j �d g�d�tj�s�d}q�| dk�rt�| |�j jtjdd �tj��szd}q�| d�dk�rJt�j�| ��rDt�| |�j �| �tj��szd}q�| dd��dk�r�t���}|����t|�t�| ���dk�rzd}q�| dk�r�|����}t�| |tj��szd}q�| dkr�d} t�rJtjjtjjdd�}z|����|j d�} W�nT�t!t"t#f�yF�}�z4t$|d��r2|j%t%j&k�r2t'�(d|���W�Y�d�}~n d�}~0�0�n|�sbt'�(d|���d}t�| | tj�d�u�r�d}q�|rnt�d�}|�)d|�}��q�qnW�n>�t!t"t*f�y��}�zt'�(d||f���W�Y�d�}~n d�}~0�0�|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_fileZsections�options�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 ����fnamer ���Zmatching_profileZsyspurpose_error_loggedZconfig�f�sectionr3����option�valueZpsr+���r,����sr����rr ���r ���r���r���9���s����� *� ��� ��� (z!ProfileRecommender.process_configc�������������� ���C���s���|�j�d�ur t�d|�j����|�j�S�g�d�}zDtdd��}t|����}W�d�����n1�sV0����Y��||�|�_�W�nT�ty����t�d|���Y�n6�tt fy��}�zt� d|���W�Y�d�}~n d�}~0�0�|�j�r�t�d|�j����|�j�S�zVtjg�d�tj tj d d �}|���\}}|j�r$t�d|j|f���n|������|�_�W�n8�tt f�yl�}�zt� d|���W�Y�d�}~n d�}~0�0�|�j��s�t�d ��d|�_�nt�d|�j����|�j�S�)Nz"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_typerG���z/Unknown chassis type id read from dmi sysfs: %dz"error accessing dmi sysfs file: %szchassis type - %s)Z 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���r����debugr/����int�read� IndexErrorr���r���r=���r���� subprocess�Popen�PIPEZcommunicate� returncode�strip�decode)r ���ZDMI_CHASSIS_TYPESZsysfs_chassis_typeZchassis_type_idr���Zp_dmiZ dmi_outputZ dmi_errorr ���r ���r���r9�������s>���� *$ �$ z$ProfileRecommender._get_chassis_typeN)F)T)�__name__� __module__�__qualname__r���r!���r���r9���r ���r ���r ���r���r������s��� Ir���)r���r2���r���r6���rN���Ztuned.utils.config_parserr���r���Zsyspurpose.filesr<���r;���Ztuned.constsr���Z tuned.logsZtunedZtuned.utils.commandsr���Zlogsr1���r���r���r ���r ���r ���r����<module>���s���