ó
æ”\c           @   s>   d  d l  Z e j j ƒ  Z d g Z d e f d „  ƒ  YZ d S(   iÿÿÿÿNt   Monitorc           B   sø   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d	 „  ƒ Z d d
 „ Z d „  Z d „  Z e d „  ƒ Z e j d „  ƒ Z d „  Z d „  Z d „  Z d „  Z RS(   sô   
	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   sj   t  |  _ t ƒ  |  _ t ƒ  |  _ t ƒ  |  _ i  |  _ |  j ƒ  t |  _ t	 j
 d d j |  j ƒ ƒ d  S(   Ns   available devices: %ss   , (   t   Falset   _class_initializedt   sett
   _instancest   _available_devicest   _updating_devicest   _loadt   _init_available_devicest   Truet   logt   debugt   join(   t   cls(    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   _init_class   s    		
	c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyR   !   s    c         C   s+   |  j  ƒ  t j d d j |  j ƒ ƒ d  S(   Ns    available devices updated to: %ss   , (   R   R
   R   R   R   (   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   _update_available_devices%   s    
	c         C   s   |  j  S(   N(   R   (   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   get_available_devices+   s    c         C   s   t  ƒ  ‚ d  S(   N(   R   (   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   update/   s    c         C   s   |  j  j | ƒ d  S(   N(   R   t   add(   R   t   instance(    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   _register_instance3   s    c         C   s   |  j  j | ƒ d  S(   N(   R   t   remove(   R   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   _deregister_instance7   s    c         C   sK   t  ƒ  } x |  j D] } | | j O} q W|  j j ƒ  |  j j | ƒ d  S(   N(   R   R   t   devicesR   t   clearR   (   R   t   new_updatingR   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   _refresh_updating_devices;   s
    	c         C   s   |  j  S(   N(   R   (   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt	   instancesC   s    c         C   s^   t  |  d ƒ s |  j ƒ  n  |  j |  ƒ | d  k	 rA | |  _ n |  j ƒ  |  _ |  j ƒ  d  S(   NR   (   t   hasattrR   R   t   NoneR   R   R   (   t   selfR   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   __init__I   s    
c         C   s   y |  j  ƒ  Wn n Xd  S(   N(   t   cleanup(   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   __del__W   s    c         C   s   |  j  |  ƒ |  j ƒ  d  S(   N(   R   R   (   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyR!   ]   s    c         C   s   |  j  S(   N(   t   _devices(   R   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyR   a   s    c         C   s*   |  j  t | ƒ @} | |  _ |  j ƒ  d  S(   N(   R   R   R#   R   (   R   t   valuet   new_devices(    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyR   e   s    	c         C   s@   |  j  ƒ  | |  j k r< |  j j | ƒ |  j j | ƒ n  d  S(   N(   R   R   R#   R   R   (   R   t   device(    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt
   add_devicek   s    
c         C   s6   | |  j  k r2 |  j  j | ƒ |  j j | ƒ n  d  S(   N(   R#   R   R   (   R   R&   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   remove_devicer   s    c         C   s?   t  g  t |  j j ƒ  ƒ D] } | d |  j k r | ^ q ƒ S(   Ni    (   t   dictt   listR   t   itemsR#   (   R   t   dev_load(    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   get_loadx   s    c         C   s   |  j  j | d  ƒ S(   N(   R   t   getR   (   R   R&   (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   get_device_load{   s    N(   t   __name__t
   __module__t   __doc__t   classmethodR   R   R   R   R   R   R   R   R   R   R    R"   R!   t   propertyR   t   setterR'   R(   R-   R/   (    (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyR       s&   
					(   t
   tuned.logst   tunedt   logsR.   R
   t   __all__t   objectR    (    (    (    s7   /usr/lib/python2.7/site-packages/tuned/monitors/base.pyt   <module>   s   	