ó
½-'Nc           @   sú   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z d  d l m Z m	 Z	 m
 Z
 d  d l m Z d  d l m Z d  d l m Z d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e	 f d „  ƒ  YZ d e f d „  ƒ  YZ d e
 f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   maybeDeferred(   t   log_failure(   t   RemoteObject(   t   ComponentProtocolt   ComponentProtocolFactoryt   RemoteComponentConnector(   t   MonitorPlugin(   t   UserChanges(   t   UserProvidert   UserMonitorc           B   sq   e  Z d  Z d Z d Z d Z d d „ Z d „  Z d „  Z	 d „  Z
 d d „ Z e Z d d	 „ Z d d
 „ Z RS(   s<   
    A plugin which monitors the system user databases.
    t   usersi  t   usermonitorc         C   s.   | d  k r t ƒ  } n  | |  _ d  |  _ d  S(   N(   t   NoneR   t	   _providert   _port(   t   selft   provider(    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyt   __init__   s    	c         C   s   t  t |  ƒ j | ƒ |  j d |  j d  ƒ t d |  ƒ } t j j	 |  j
 j j |  j d ƒ } |  j
 j j | | ƒ |  _ d  S(   NR
   t   objects   .sock(   t   superR	   t   registert   call_on_acceptedt   _run_detect_changesR   t   UserMonitorProtocolFactoryt   ost   patht   joint   registryt   configt   sockets_patht   namet   reactort   listen_unixR   (   R   R   t   factoryt   socket(    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR      s    c         C   s&   |  j  r" |  j  j ƒ  d |  _  n  d S(   s,   Stop listening for incoming AMP connections.N(   R   t   stopListeningR   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyt   stop(   s    	c         C   s   t  t |  ƒ j ƒ  |  j ƒ  S(   s"   Resynchronize user and group data.(   R   R	   t   _resynchronizeR   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR%   .   s    c         C   s   |  j  j j d |  j | ƒ S(   NR
   (   R   t   brokert   call_if_acceptedR   (   R   t   operation_id(    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyt   run3   s    c            sÉ   d d l  m } | ˆ j j ˆ j j ƒ ‰  t ˆ j j d t ƒ r[ t ˆ j g  ˆ ƒ } nj d „  } ‡  f d †  } ˆ  j	 ƒ  } | j
 | ƒ | j
 | ƒ | j
 ˆ j ˆ ƒ | j ‡ ‡ f d †  ƒ | S(   sä   
        If changes are detected an C{urgent-exchange} is fired to send
        updates to the server immediately.

        @param operation_id: When present it will be included in the
            C{operation-id} field.
        iÿÿÿÿ(   t   RemoteUserManagerConnectort   monitor_onlyc         S   s
   |  j  ƒ  S(   N(   t   get_locked_usernames(   t   user_manager(    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR,   K   s    c            s   ˆ  j  ƒ  |  S(   N(   t
   disconnect(   t   locked_usernames(   t   user_manager_connector(    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR.   N   s    
c            s   ˆ j  g  ˆ  ƒ S(   N(   t   _detect_changes(   t   f(   R(   R   (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyt   <lambda>V   s    (   t   landscape.manager.usermanagerR*   R   R   R   t   getattrt   FalseR    R1   t   connectt   addCallbackt
   addErrback(   R   R(   R*   t   resultR,   R.   (    (   R0   R   R(   sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR   9   s    		c            s¥   ‡  f d †  } d „  } | |  j  _ t |  j |  j  ƒ ‰  ˆ  j ƒ  } | r¡ d | d <| rh | | d <n  |  j j j | d t ƒ} | j	 | ƒ | j
 | ƒ | Sd  S(   Nc            s   ˆ  j  ƒ  |  S(   N(   t   snapshot(   R:   (   t   changes(    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyt   update_snapshot[   s    
c         S   s   t  |  d ƒ d  S(   Ns5   Error occured calling send_message in _detect_changes(   R   (   R:   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyt	   log_error_   s    R
   t   types   operation-idt   urgent(   R   t   locked_usersR   t   _persistt   create_diffR   R&   t   send_messaget   TrueR8   R9   (   R   RA   R(   R=   R>   t   messageR:   (    (   R<   sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR1   Y   s    	
N(   t   __name__t
   __module__t   __doc__t   persist_namet   run_intervalR   R   R   R   R$   R%   R)   t   detect_changesR   R1   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR	      s   	
		 t   UserMonitorProtocolc           B   s   e  Z d  Z d g Z RS(   sD   L{AMP}-based protocol for calling L{UserMonitor}'s methods remotely.RL   (   RG   RH   RI   t   methods(    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyRM   q   s   R   c           B   s   e  Z e Z RS(    (   RG   RH   RM   t   protocol(    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyR   w   s   t   RemoteUserMonitorc           B   s   e  Z d  Z RS(   s"   A connected remote L{UserMonitor}.(   RG   RH   RI   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyRP   |   s   t   RemoteUserMonitorConnectorc           B   s   e  Z e Z e Z e Z RS(    (   RG   RH   R   R!   RP   t   remoteR	   t	   component(    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyRQ   €   s   (   R   t   twisted.internet.deferR    t   landscape.lib.logR   t   landscape.lib.ampR   t   landscape.ampR   R   R   t   landscape.monitor.pluginR   t   landscape.user.changesR   t   landscape.user.providerR   R	   RM   R   RP   RQ   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/monitor/usermonitor.pyt   <module>   s   b