o
    _	                     @   sX   d dl mZ ddlmZ d dlZd dlZd dlmZm	Z	 ej
 ZG dd dejZdS )    N   )base)PopenPIPEc                       s^   e Zd ZdZedd Zdd Zdd Zdd	 Z fd
dZ	 fddZ
d fdd	Z  ZS )ScriptPluginzO
	Plugin for running custom scripts with profile activation and deactivation.
	c                 C   s   dd iS )Nscript )selfr   r   =/usr/lib/python3/dist-packages/tuned/plugins/plugin_script.py_get_config_options   s   z ScriptPlugin._get_config_optionsc                 C   sH   d|_ d|_|jd d urt|jd tsJ |jd |_d S g |_d S )NTFr   )_has_static_tuning_has_dynamic_tuningoptions
isinstancelist_scriptsr	   instancer   r   r
   _instance_init   s   
zScriptPlugin._instance_initc                 C   s   d S )Nr   r   r   r   r
   _instance_cleanup   s   zScriptPlugin._instance_cleanupc           
      C   s
  d}|D ]~}t j}|| j  td|t|f  tdtt	|
   z:t|g| ttd|dt j|d}| \}}t|rStd||d d f  |jrbtd||jf  d}W q ttfy }	 ztd	||	f  d}W Y d }	~	qd }	~	ww |S )
NTz'calling script '%s' with arguments '%s'zusing environment '%s')stdoutstderr	close_fdsenvuniversal_newlinescwdzscript '%s' error output: '%s'z#script '%s' returned error code: %dFzscript '%s' error: %s)osenvironupdate
_variablesget_envloginfostrdebugr   itemsr   r   pathdirnamecommunicatelenerror
returncodeOSErrorIOError)
r	   scripts	argumentsretr   r   procouterrer   r   r
   _call_scripts!   s4   

zScriptPlugin._call_scriptsc                    s$   t t| | | |jdg d S )Nstart)superr   _instance_apply_staticr6   r   r   	__class__r   r
   r9   9   s   z#ScriptPlugin._instance_apply_staticc                    sv   d}t t| |||dkrd}dg}|r|dg7 }| |j|dkr.ttj|j  |S t	tj
|j  d}|S )NTFverifyignore_missing)r8   r   _instance_verify_staticr6   r   r"   r#   constsSTR_VERIFY_PROFILE_OKr+   STR_VERIFY_PROFILE_FAIL)r	   r   r=   devicesr1   argsr:   r   r
   r>   =   s    
z$ScriptPlugin._instance_verify_staticFc                    s<   dg}|r
|dg }|  t|j| tt| || d S )Nstopfull_rollback)r6   reversedr   r8   r   _instance_unapply_static)r	   r   rE   rC   r:   r   r
   rG   L   s
   
z%ScriptPlugin._instance_unapply_static)F)__name__
__module____qualname____doc__classmethodr   r   r   r6   r9   r>   rG   __classcell__r   r   r:   r
   r   	   s    

r   )tuned.constsr?    r   
tuned.logstunedr   
subprocessr   r   logsgetr"   Pluginr   r   r   r   r
   <module>   s    
