MINI MINI MANI MO
ó
©=[c           @   sœ   d  d l  j Z d d l m Z d d l Td  d l m Z m Z d  d l Z	 d  d l
 m Z d  d l Z e	 j
 j ƒ  Z e ƒ  Z d e j f d „  ƒ  YZ d S(	   iÿÿÿÿNi   (   t   base(   t   *(   t   Popent   PIPE(   t   commandst   MountsPluginc           B   s†   e  Z d  Z e d „  ƒ Z d „  Z e d „  ƒ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z e
 d
 d e ƒd „  ƒ Z RS(
   s.   
	Plugin for tuning options of mount-points.
	c      
   C   s‚  i  } d } t d d d g d t d t d t d t ƒj ƒ  \ } } x-g  | j ƒ  D] } | j ƒ  ^ qU D]} t | ƒ d k  r‰ qk n  | d  \ } } }	 t | ƒ d k r¸ | d n d }
 t | ƒ d	 k rÚ | d	 n d } | d
 k rø |	 } qk n  | d k sk | d k rqk n  | d k sk | d k r4qk n  | j | i t	 ƒ  d 6|	 d 6|
 d 6ƒ | | d j
 | ƒ qk W| |  _ d S(   sÁ   
		Gets the information about disks, partitions and mountpoints. Stores information about used filesystem and
		creates a list of all underlying devices (in case of LVM) for each mountpoint.
		t   lsblks   -rnos   TYPE,RM,KNAME,FSTYPE,MOUNTPOINTt   stdoutt   stderrt	   close_fdst   universal_newlinesi   i   t   diskt   1t   partt   lvms   [SWAP]t   diskst   device_namet
   filesystemN(   R
   R   (   t   NoneR   R   t   Truet   communicatet
   splitlinest   splitt   lent
   setdefaultt   sett   addt   _mountpoint_topology(   t   clst   mountpoint_topologyt   current_diskR   R   t   linet   columnst   device_typet   device_removableR   R   t
   mountpoint(    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt   _generate_mountpoint_topology   s,    		,""(c         C   s;   |  j  ƒ  t |  _ t |  j j ƒ  ƒ |  _ t ƒ  |  _ d  S(   N(   R$   R   t   _devices_supportedR   R   t   keyst
   _free_devicest   _assigned_devices(   t   self(    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt
   _init_devices5   s    
	c         C   s   i d  d 6S(   Nt   disable_barriers(   R   (   R)   (    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt   _get_config_options;   s    c         C   s   t  | _ t | _ d  S(   N(   t   Falset   _has_dynamic_tuningR   t   _has_static_tuning(   R)   t   instance(    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt   _instance_initA   s    	c         C   s   d  S(   N(    (   R)   R0   (    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt   _instance_cleanupE   s    c         C   s8   t  j  d | ƒ } x | D] } t j | ƒ j ƒ  SWd S(   sV   
		Get device cache type. This will work only for devices on SCSI kernel subsystem.
		s+   /sys/block/%s/device/scsi_disk/*/cache_typeN(   t   globt   cmdt	   read_filet   stripR   (   R)   t   devicet   source_filenamest   source_filename(    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt   _get_device_cache_typeH   s    
c         C   s9   x2 |  j  | d D] } |  j | ƒ d k r t Sq Wt S(   sr   
		Checks if the device has 'write back' cache. If the cache type cannot be determined, asume some other cache.
		R   s
   write back(   R   R:   R   R-   (   R)   R#   R7   (    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt   _mountpoint_has_writeback_cacheQ   s    c         C   sæ   t  d ƒ ` } xV | D]J } | j ƒ  } | d d d k rB q n  | d | k r | d } Pq q Wd SWd QX| j d ƒ } xb | D]V } | j d ƒ \ } }	 }
 | d	 k sÆ | d
 k rÊ |
 d k rÊ t S| d
 k r„ t Sq„ Wt Sd S(   sP   
		Checks if a given mountpoint is mounted with barriers enabled or disabled.
		s   /proc/mountsi    t   /i   i   Nt   ,t   =t	   nobarriert   barriert   0(   t   openR   R   t	   partitionR-   R   (   R)   R#   t   mounts_fileR   R    t   option_listt   optionst   optiont   namet   sept   value(    (    s?   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt   _mountpoint_has_barriersZ   s"