o
    •Û_4  ã                   @   sh   d dl mZ ddlZddlZddlZd dlT ddlZddl	T ddl
mZ ej ¡ ZG dd„ dejƒZdS )é   )Úbaseé    N)Ú*)Úcommandsc                       sb   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zddd„Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚSysfsPluginzR
	Plugin for applying custom sysfs options, using specific plugins is preferred.
	c                    s(   t t| ƒj|i |¤Ž d| _tƒ | _d S )NT)Úsuperr   Ú__init__Ú_has_dynamic_optionsr   Ú_cmd)ÚselfÚargsÚkwargs©Ú	__class__© ú</usr/lib/python3/dist-packages/tuned/plugins/plugin_sysfs.pyr      s   zSysfsPlugin.__init__c                 C   s4   d|_ d|_tdd„ t|j ¡ ƒD ƒƒ|_i |_d S )NFTc                 S   s$   g | ]}t j |d  ¡|d f‘qS )r   r   )ÚosÚpathÚnormpath)Ú.0Ú	key_valuer   r   r   Ú
<listcomp>   s   $ z.SysfsPlugin._instance_init.<locals>.<listcomp>)Ú_has_dynamic_tuningÚ_has_static_tuningÚdictÚlistÚoptionsÚitemsÚ_sysfsÚ_sysfs_original©r   Úinstancer   r   r   Ú_instance_init   s   
zSysfsPlugin._instance_initc                 C   s   d S ©Nr   r    r   r   r   Ú_instance_cleanup   s   zSysfsPlugin._instance_cleanupc                 C   sn   t |j ¡ ƒD ]-\}}| j |¡}t |¡D ]}|  |¡r,|  |¡|j	|< |  
||¡ qt d| ¡ qqd S )Nz)rejecting write to '%s' (not inside /sys))r   r   r   Ú
_variablesÚexpandÚglobÚiglobÚ_check_sysfsÚ_read_sysfsr   Ú_write_sysfsÚlogÚerror)r   r!   ÚkeyÚvalueÚvÚfr   r   r   Ú_instance_apply_static"   s   
ûþz"SysfsPlugin._instance_apply_staticc           
      C   sh   d}t |j ¡ ƒD ](\}}| j |¡}t |¡D ]}|  |¡r0|  |¡}	|  	|||	|¡dkr0d}qq	|S )NTF)
r   r   r   r%   r&   r'   r(   r)   r*   Ú_verify_value)
r   r!   Úignore_missingÚdevicesÚretr.   r/   r0   r1   Úcurr_valr   r   r   Ú_instance_verify_static,   s   

€üz#SysfsPlugin._instance_verify_staticFc                 C   s(   t |j ¡ ƒD ]
\}}|  ||¡ qd S r#   )r   r   r   r+   )r   r!   Úfull_rollbackr.   r/   r   r   r   Ú_instance_unapply_static7   s   ÿz$SysfsPlugin._instance_unapply_staticc                 C   s   t  d|¡S )Nz^/sys/.*)ÚreÚmatch)r   Ú
sysfs_filer   r   r   r)   ;   s   zSysfsPlugin._check_sysfsc                 C   s.   | j  |¡ ¡ }t|ƒdkr| j  |d¡S d S )Nr   F)r
   Ú	read_fileÚstripÚlenÚget_active_option)r   r=   Údatar   r   r   r*   >   s   zSysfsPlugin._read_sysfsc                 C   s   | j  ||¡S r#   )r
   Úwrite_to_file)r   r=   r/   r   r   r   r+   E   s   zSysfsPlugin._write_sysfs)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r$   r2   r8   r:   r)   r*   r+   Ú__classcell__r   r   r   r   r      s    

r   )Ú r   r'   r;   Úos.pathr   Ú
decoratorsÚ
tuned.logsÚtunedÚ
subprocessÚtuned.utils.commandsr   ÚlogsÚgetr,   ÚPluginr   r   r   r   r   Ú<module>   s    
