£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
<ej                 @   s,   d dl Zej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   sL   d| _ t | _t | _t | _i | _| j  d| _ tjddj	| j  d S )NFTzavailable devices: %sz, )
_class_initializedset
_instances_available_devices_updating_devices_load_init_available_deviceslogdebugjoin)cls r   /usr/lib/python3.6/base.py_init_class   s    zMonitor._init_classc             C   s
   t  d S )N)NotImplementedError)r   r   r   r   r	   !   s    zMonitor._init_available_devicesc             C   s"   | j   tjddj| j  d S )Nz available devices updated to: %sz, )r	   r
   r   r   r   )r   r   r   r   _update_available_devices%   s    z!Monitor._update_available_devicesc             C   s   | j S )N)r   )r   r   r   r   get_available_devices+   s    zMonitor.get_available_devicesc             C   s
   t  d S )N)r   )r   r   r   r   update/   s    zMonitor.updatec             C   s   | j j| d S )N)r   add)r   instancer   r   r   _register_instance3   s    zMonitor._register_instancec             C   s   | j j| d S )N)r   remove)r   r   r   r   r   _deregister_instance7   s    zMonitor._deregister_instancec             C   s:   t  }x| jD ]}||jO }qW | jj  | jj| d S )N)r   r   devicesr   clearr   )r   Znew_updatingr   r   r   r   _refresh_updating_devices;   s
    
z!Monitor._refresh_updating_devicesc             C   s   | j S )N)r   )r   r   r   r   	instancesC   s    zMonitor.instancesNc             C   sB   t | ds| j  | j|  |d k	r,|| _n
| j | _| j  d S )Nr   )hasattrr   r   r   r   r   )selfr   r   r   r   __init__I   s    


zMonitor.__init__c          	   C   s   y| j   W n   Y nX d S )N)cleanup)r   r   r   r   __del__W   s    zMonitor.__del__c             C   s   | j |  | j  d S )N)r   r   )r   r   r   r   r!   ]   s    
zMonitor.cleanupc             C   s   | j S )N)_devices)r   r   r   r   r   a   s    zMonitor.devicesc             C   s    | j t|@ }|| _| j  d S )N)r   r   r#   r   )r   valueZnew_devicesr   r   r   r   e   s    c             C   s.   | j   || jkr*| jj| | jj| d S )N)r   r   r#   r   r   )r   devicer   r   r   
add_devicek   s    
zMonitor.add_devicec             C   s&   || j kr"| j j| | jj| d S )N)r#   r   r   )r   r%   r   r   r   remove_devicer   s    
zMonitor.remove_devicec                s    t  fddt jj D S )Nc                s   g | ]}|d   j kr|qS )r   )r#   ).0Zdev_load)r   r   r   
<listcomp>y   s    z$Monitor.get_load.<locals>.<listcomp>)dictlistr   items)r   r   )r   r   get_loadx   s    zMonitor.get_loadc             C   s   | j j|d S )N)r   get)r   r%   r   r   r   get_device_load{   s    zMonitor.get_device_load)N)__name__
__module____qualname____doc__classmethodr   r	   r   r   r   r   r   r   r   r    r"   r!   propertyr   setterr&   r'   r-   r/   r   r   r   r   r      s&   

)Z
tuned.logsZtunedZlogsr.   r
   __all__objectr   r   r   r   r   <module>   s   
