ó
ÍÿŠTc           @   sn   d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l m Z d Z d Z	 d e f d „  ƒ  YZ
 d S(	   iÿÿÿÿN(   t   Accumulator(   t   CoverageMonitor(   t   MonitorPlugins   last-cpu-usage-measures   cpu-usage-accumulatort   CPUUsagec           B   sq   e  Z d  Z d Z d Z d Z d d e j d „ Z d „  Z	 d „  Z
 e d „ Z e d	 „ Z d
 „  Z d „  Z RS(   s5   
    Plugin that captures CPU usage information.
    s	   cpu-usaget   cpui   i<   c         C   s1   | |  _  | |  _ g  |  _ | |  _ d |  _ d  S(   Ns
   /proc/stat(   t	   _intervalt   _monitor_intervalt   _cpu_usage_pointst   _create_timet
   _stat_file(   t   selft   intervalt   monitor_intervalt   create_time(    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyt   __init__   s
    				c         C   sÆ   t  t |  ƒ j | ƒ t |  j | j ƒ |  _ |  j j j	 |  j
 |  j ƒ t |  j
 d d d |  j ƒ|  _ |  j j j	 |  j |  j j ƒ |  j j j d |  j j d d ƒ|  j d |  j t ƒ d  S(   Ngš™™™™™é?s   CPU usage snapshotR   t   stopt   priorityiÐ  s	   cpu-usage(   t   superR   t   registerR    t   _persistt	   step_sizet   _accumulatet   registryt   reactort
   call_everyR   t   runR   R   t   _monitorR   t   logt   call_ont   call_on_acceptedt   send_messaget   True(   R
   R   (    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyR      s    "c         C   s$   |  j  } g  |  _  i d d 6| d 6S(   Ns	   cpu-usaget   types
   cpu-usages(   R   (   R
   t
   cpu_points(    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyt   create_message+   s    		c         C   sB   |  j  ƒ  } t | d ƒ r> |  j j j | |  j d | ƒn  d  S(   Ns
   cpu-usagest   urgent(   R"   t   lenR   t   brokerR   t   _session_id(   R
   R#   t   message(    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyR   0   s    c         C   s    |  j  j j d |  j | ƒ d  S(   Ns	   cpu-usage(   R   R%   t   call_if_acceptedR   (   R
   R#   (    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyt   exchange6   s    c         C   s~   |  j  j ƒ  t |  j ƒ  ƒ } |  j |  j ƒ } d  } | d  k	 r[ |  j | | t ƒ } n  | d  k	 rz |  j	 j
 | ƒ n  d  S(   N(   R   t   pingt   intR   t   _get_cpu_usageR	   t   NoneR   t   ACCUMULATOR_KEYR   t   append(   R
   t   new_timestampt   new_cpu_usaget	   step_data(    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyR   :   s    c   
      C   s  d } y( t | d ƒ  } | j ƒ  } Wd QXWn" t k
 rR t j d | ƒ d SX| j ƒ  d } t | d ƒ } t d „  | Dƒ ƒ } |  j	 j
 t ƒ } | d k	 ró | | d k ró | | d }	 |	 d k ró |	 | | d t |	 ƒ } qó n  |  j	 j t | | f ƒ | S(   sG   
        This method computes the CPU usage from C{stat_file}.
        t   rNs<   Could not open %s for reading, CPU usage cannot be computed.i   i   c         s   s   |  ] } t  | ƒ Vq d  S(   N(   R+   (   t   .0t   i(    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pys	   <genexpr>_   s    i    (   R-   t   opent   readlinet   IOErrort   loggingt   errort   splitR+   t   sumR   t   gett   LAST_MESURE_KEYt   floatt   set(
   R
   t	   stat_filet   resultt   ft   statt   fieldst   idlet   valuet   previoust   delta(    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyR,   F   s$    	
"Ni  (   t   __name__t
   __module__t   __doc__t   persist_namet   scopeR-   t   run_intervalt   timeR   R   R"   t   FalseR   R)   R   R,   (    (    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyR      s   			(   RP   R9   t   landscape.accumulateR    t   landscape.lib.monitorR   t   landscape.monitor.pluginR   R>   R.   R   (    (    (    s>   /usr/lib/python2.7/dist-packages/landscape/monitor/cpuusage.pyt   <module>   s   