<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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   s\   d| _ tƒ | _tƒ | _tƒ | _i | _| jƒ  t| jtƒs<t‚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Ú
isinstanceÚAssertionErrorÚ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   sP   t | dƒs | jƒ  t | dƒs t‚| j| ƒ |d k	r:|| _n
| jƒ | _| jƒ  d S )Nr   )Úhasattrr   r   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   sF   t |tƒst |tƒst‚| jƒ  || jkrB| jj|ƒ | jj|ƒ d S )N)	r
   ÚstrÚunicoder   r   r   r%   r   r   )r!   Údevicer   r   r   Ú
add_devicek   s
    
zMonitor.add_devicec             C   s>   t |tƒst |tƒst‚|| jkr:| jj|ƒ | jj|ƒ d S )N)r
   r'   r(   r   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+   r1   r3   r   r   r   r   r      s&   

)Z
tuned.logsZtunedZlogsr2   r   Ú__all__Úobjectr   r   r   r   r   Ú<module>   s   
