ó
½-'Nc           @   sb   d  Z  d d l Z d d l m Z m Z d d l m Z d d l m Z d e f d „  ƒ  YZ	 d S(   s‰   
A monitor that collects data on network activity, and sends messages
with the inbound/outbound traffic per interface per step interval.
iÿÿÿÿN(   t   get_network_traffict   is_64(   t   Accumulator(   t   MonitorPlugint   NetworkActivityc           B   sw   e  Z d  Z d Z e Z d Z d Z d Z d e j d „ Z	 d „  Z
 d „  Z d	 „  Z e d
 „ Z d „  Z d „  Z RS(   s>   
    Collect data regarding a machine's network activity.
    s   network-activityi   i    iÈ   s   /proc/net/devc         C   sF   | |  _  i  |  _ i  |  _ | |  _ t ƒ  sB t d d ƒ |  _ n  d  S(   Ni   i    (   t   _source_filet   _network_activityt   _last_activityt   _create_timeR   t   powt   _rollover_maxint(   t   selft   network_activity_filet   create_time(    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyt   __init__   s    					c         C   sK   t  t |  ƒ j | ƒ t |  j |  j j ƒ |  _ |  j d |  j	 t
 ƒ d  S(   Ns   network-activity(   t   superR   t   registerR   t   _persistt   registryt	   step_sizet   _accumulatet   call_on_acceptedt   exchanget   True(   R   R   (    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyR   &   s    c         C   sº   i  } d } x t  |  j j ƒ  ƒ D]x \ } } | r" g  | | <xC | rƒ | |  j k  rƒ | j d ƒ } | | j | ƒ | d 7} qA W| |  j k rš Pqš q" q" W| s¨ d  Si d d 6| d 6S(   Ni    i   s   network-activityt   typet
   activities(   t   listR   t   itemst   max_network_items_to_exchanget   popt   append(   R   t   network_activityR   t	   interfacet   datat   item(    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyt   create_message+   s    "
c         C   s3   |  j  ƒ  } | s d  S|  j j j | d | ƒd  S(   Nt   urgent(   R#   R   t   brokert   send_message(   R   R$   t   message(    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyR&   ;   s    c         C   s    |  j  j j d |  j | ƒ d  S(   Ns   network-activity(   R   R%   t   call_if_acceptedR&   (   R   R$   (    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyR   A   s    c         c   s  xØ | D]Ð } | | } | |  j  k r¼ |  j  | \ } } | d | } | d | } | d k  rq | |  j 7} n  | d k  r | |  j 7} n  | d k r« | d k r« q n  | | | f Vn  | d | d f |  j  | <q Wx0 |  j  j ƒ  D] } | | k rë |  j  | =që që Wd S(   só   
        Given network activity metrics across all interfaces, calculate
        and return the delta data transferred for inbound and outbound
        traffic. Returns a tuple of interface name, outbound delta,
        inbound delta.
        t
   send_bytest
   recv_bytesi    N(   R   R
   t   keys(   R   t   new_trafficR    t   traffict   previous_outt   previous_int	   delta_outt   delta_in(    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyt   _traffic_deltaE   s"    
c   	      C   sÏ   t  |  j ƒ  ƒ } t |  j ƒ } x§ |  j | ƒ D]– \ } } } |  j | | d | ƒ } |  j | | d | ƒ } | o{ | s„ q1 n  |  j j | g  ƒ } | j | d t  | d ƒ t  | d ƒ f ƒ q1 Wd S(   su   
        Sample network traffic statistics and store them into the
        accumulator, recording step data.
        s   delta-out-%ss   delta-in-%si    i   N(	   t   intR   R    R   R2   R   R   t
   setdefaultR   (	   R   t   new_timestampR,   R    R0   R1   t   out_step_datat   in_step_datat   steps(    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyt   runc   s    (   t   __name__t
   __module__t   __doc__t   message_typet   persist_namet   run_intervalR
   R   t   timeR   R   R#   R&   t   FalseR   R2   R9   (    (    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyR      s   				(
   R<   R@   t   landscape.lib.networkR    R   t   landscape.accumulateR   t   landscape.monitor.pluginR   R   (    (    (    sE   /usr/lib/python2.7/dist-packages/landscape/monitor/networkactivity.pyt   <module>   s
   