o
    •Û_j  ã                   @   s,   d dl Zej ¡ ZdgZG dd„ deƒZdS )é    NÚMonitorc                   @   sÐ   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZd&dd„Zdd„ Zdd„ Zedd„ ƒZejdd„ ƒZdd„ Zd d!„ Zd"d#„ Zd$d%„ ZdS )'r   zô
	Base class for all monitors.

	Monitors provide data about the running system to Plugin objects, which use the data
	to tune system parameters.

	Following methods require reimplementation:
	  - _init_available_devices(cls)
	  - update(cls)
	c                 C   s\   d| _ tƒ | _tƒ | _tƒ | _i | _|  ¡  t| jtƒsJ ‚d| _ t 	dd 
| j¡ ¡ d S )NFTzavailable devices: %sú, )Ú_class_initializedÚsetÚ
_instancesÚ_available_devicesÚ_updating_devicesÚ_loadÚ_init_available_devicesÚ
isinstanceÚlogÚdebugÚjoin©Úcls© r   ú5/usr/lib/python3/dist-packages/tuned/monitors/base.pyÚ_init_class   s   zMonitor._init_classc                 C   ó   t ƒ ‚©N©ÚNotImplementedErrorr   r   r   r   r
   !   ó   zMonitor._init_available_devicesc                 C   s"   |   ¡  t dd | j¡ ¡ d S )Nz available devices updated to: %sr   )r
   r   r   r   r   r   r   r   r   Ú_update_available_devices%   s   

ÿz!Monitor._update_available_devicesc                 C   ó   | j S r   )r   r   r   r   r   Úget_available_devices+   r   zMonitor.get_available_devicesc                 C   r   r   r   r   r   r   r   Úupdate/   r   zMonitor.updatec                 C   ó   | j  |¡ d S r   )r   Úadd©r   Úinstancer   r   r   Ú_register_instance3   ó   zMonitor._register_instancec                 C   r   r   )r   Úremover   r   r   r   Ú_deregister_instance7   r"   zMonitor._deregister_instancec                 C   s6   t ƒ }| jD ]}||jO }q| j ¡  | j |¡ d S r   )r   r   Údevicesr   Úclearr   )r   Únew_updatingr    r   r   r   Ú_refresh_updating_devices;   s
   

z!Monitor._refresh_updating_devicesc                 C   r   r   )r   r   r   r   r   Ú	instancesC   r   zMonitor.instancesNc                 C   sP   t | dƒs|  ¡  t | dƒsJ ‚|  | ¡ |d ur|| _n|  ¡ | _|  ¡  d S )Nr   )Úhasattrr   r!   r%   r   r   )Úselfr%   r   r   r   Ú__init__I   s   


zMonitor.__init__c                 C   s   z|   ¡  W d S    Y d S r   )Úcleanup©r+   r   r   r   Ú__del__W   s   zMonitor.__del__c                 C   s   |   | ¡ |  ¡  d S r   )r$   r(   r.   r   r   r   r-   ]   s   
zMonitor.cleanupc                 C   r   r   ©Ú_devicesr.   r   r   r   r%   a   r   zMonitor.devicesc                 C   s    | j t|ƒ@ }|| _|  ¡  d S r   )r   r   r1   r(   )r+   ÚvalueÚnew_devicesr   r   r   r%   e   s   c                 C   sJ   t |tƒst |tƒsJ ‚|  ¡  || jv r#| j |¡ | j |¡ d S d S r   )r   ÚstrÚunicoder   r   r1   r   r   ©r+   Údevicer   r   r   Ú
add_devicek   s   
þzMonitor.add_devicec                 C   sB   t |tƒst |tƒsJ ‚|| jv r| j |¡ | j |¡ d S d S r   )r   r4   r5   r1   r#   r   r6   r   r   r   Úremove_devicer   s
   
þzMonitor.remove_devicec                    s    t ‡ fdd„tˆ j ¡ ƒD ƒƒS )Nc                    s   g | ]}|d  ˆ j v r|‘qS )r   r0   )Ú.0Údev_loadr.   r   r   Ú
<listcomp>y   s    z$Monitor.get_load.<locals>.<listcomp>)ÚdictÚlistr	   Úitemsr.   r   r.   r   Úget_loadx   s    zMonitor.get_loadc                 C   s   | j  |d ¡S r   )r	   Úgetr6   r   r   r   Úget_device_load{   s   zMonitor.get_device_loadr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r
   r   r   r   r!   r$   r(   r)   r,   r/   r-   Úpropertyr%   Úsetterr8   r9   r@   rB   r   r   r   r   r      s>    











)Ú
tuned.logsÚtunedÚlogsrA   r   Ú__all__Úobjectr   r   r   r   r   Ú<module>   s    
