Esempio n. 1
0
 def __init__(self, logger, config):
     """
     :param config: a salt client_config instance
     """
     self._log = logger.getChild("salt")
     self._silence_counter = 0
     self._config = config
     self._master_event = MasterEvent(self._config['sock_dir'])
Esempio n. 2
0
 def __init__(self, logger, config):
     """
     :param config: a salt client_config instance
     """
     # getChild isn't in 2.6
     self._log = logging.getLogger('.'.join((logger.name, 'salt')))
     self._silence_counter = 0
     self._config = config
     self._master_event = MasterEvent(self._config['sock_dir'])
Esempio n. 3
0
 def __init__(self, logger, config):
     """
     :param config: a salt client_config instance
     """
     self._log = logger.getChild("salt")
     self._silence_counter = 0
     self._config = config
     self._master_event = MasterEvent(self._config['sock_dir'])
Esempio n. 4
0
 def __init__(self, logger, config):
     """
     :param config: a salt client_config instance
     """
     # getChild isn't in 2.6
     self._log = logging.getLogger('.'.join((logger.name, 'salt')))
     self._silence_counter = 0
     self._config = config
     self._master_event = MasterEvent(self._config['sock_dir'])
Esempio n. 5
0
    def get_event(self, *args, **kwargs):
        """
        Wrap MasterEvent.get_event
        """
        ev = self._master_event.get_event(self.POLL_TIMEOUT, *args, **kwargs)
        if ev is None:
            self._silence_counter += self.POLL_TIMEOUT
            if self._silence_counter > self.SILENCE_TIMEOUT:
                self._log.warning("Re-opening connection to salt-master")

                self._silence_counter = 0
                # Re-open the connection as a precaution against this lack of
                # messages being a symptom of a connection that has gone bad.
                old_ev = self._master_event
                gevent.spawn(lambda: self._destroy_conn(old_ev))
                self._master_event = MasterEvent(self._config['sock_dir'])
        else:
            self._silence_counter = 0
            return ev
Esempio n. 6
0
class SaltEventSource(object):
    """
    A wrapper around salt's MasterEvent class that closes and re-opens
    the connection if it goes quiet for too long, to ward off mysterious
    silent-death of communications (#8144)
    """

    # Not a logical timeout, just how long we stick inside a get_event call
    POLL_TIMEOUT = 5

    # After this long without messages, close and reopen out connection to
    # salt-master.  Don't want to do this gratuitously because it can drop
    # messages during the cutover (lossiness is functionally OK but user
    # might notice).
    SILENCE_TIMEOUT = 20

    def __init__(self, logger, config):
        """
        :param config: a salt client_config instance
        """
        # getChild isn't in 2.6
        self._log = logging.getLogger('.'.join((logger.name, 'salt')))
        self._silence_counter = 0
        self._config = config
        self._master_event = MasterEvent(self._config['sock_dir'])

    def _destroy_conn(self, old_ev):
        old_ev.destroy()

    def get_event(self, *args, **kwargs):
        """
        Wrap MasterEvent.get_event
        """
        ev = self._master_event.get_event(self.POLL_TIMEOUT, *args, **kwargs)
        if ev is None:
            self._silence_counter += self.POLL_TIMEOUT
            if self._silence_counter > self.SILENCE_TIMEOUT:
                self._log.warning("Re-opening connection to salt-master")

                self._silence_counter = 0
                # Re-open the connection as a precaution against this lack of
                # messages being a symptom of a connection that has gone bad.
                old_ev = self._master_event
                gevent.spawn(lambda: self._destroy_conn(old_ev))
                self._master_event = MasterEvent(self._config['sock_dir'])
        else:
            self._silence_counter = 0
            return ev
Esempio n. 7
0
class SaltEventSource(object):
    """
    A wrapper around salt's MasterEvent class that closes and re-opens
    the connection if it goes quiet for too long, to ward off mysterious
    silent-death of communications (#8144)
    """

    # Not a logical timeout, just how long we stick inside a get_event call
    POLL_TIMEOUT = 5

    # After this long without messages, close and reopen out connection to
    # salt-master.  Don't want to do this gratuitously because it can drop
    # messages during the cutover (lossiness is functionally OK but user
    # might notice).
    SILENCE_TIMEOUT = 20

    def __init__(self, logger, config):
        """
        :param config: a salt client_config instance
        """
        # getChild isn't in 2.6
        self._log = logging.getLogger('.'.join((logger.name, 'salt')))
        self._silence_counter = 0
        self._config = config
        self._master_event = MasterEvent(self._config['sock_dir'])

    def _destroy_conn(self, old_ev):
        old_ev.destroy()

    def get_event(self, *args, **kwargs):
        """
        Wrap MasterEvent.get_event
        """
        ev = self._master_event.get_event(self.POLL_TIMEOUT, *args, **kwargs)
        if ev is None:
            self._silence_counter += self.POLL_TIMEOUT
            if self._silence_counter > self.SILENCE_TIMEOUT:
                self._log.warning("Re-opening connection to salt-master")

                self._silence_counter = 0
                # Re-open the connection as a precaution against this lack of
                # messages being a symptom of a connection that has gone bad.
                old_ev = self._master_event
                gevent.spawn(lambda: self._destroy_conn(old_ev))
                self._master_event = MasterEvent(self._config['sock_dir'])
        else:
            self._silence_counter = 0
            return ev
Esempio n. 8
0
    def get_event(self, *args, **kwargs):
        """
        Wrap MasterEvent.get_event
        """
        ev = self._master_event.get_event(self.POLL_TIMEOUT, *args, **kwargs)
        if ev is None:
            self._silence_counter += self.POLL_TIMEOUT
            if self._silence_counter > self.SILENCE_TIMEOUT:
                self._log.warning("Re-opening connection to salt-master")

                self._silence_counter = 0
                # Re-open the connection as a precaution against this lack of
                # messages being a symptom of a connection that has gone bad.
                old_ev = self._master_event
                gevent.spawn(lambda: self._destroy_conn(old_ev))
                self._master_event = MasterEvent(self._config['sock_dir'])
        else:
            self._silence_counter = 0
            return ev
Esempio n. 9
0
class EventListener(threading.Thread):

    """
    Background thread that listens for salt events and replays them as steward
    events

    """
    def __init__(self, settings):
        super(EventListener, self).__init__()
        salt_conf = settings.get('salt.master_config', '/etc/salt/master')
        salt_opts = salt_config.master_config(salt_conf)
        self.daemon = True
        self.event = MasterEvent(salt_opts['sock_dir'])

    def run(self):
        while True:
            data = self.event.get_event()
            if data and 'tag' in data:
                name = 'salt/' + data['tag']
                if 'tok' in data:
                    del data['tok']
                pub.delay(name, data)
Esempio n. 10
0
 def __init__(self, settings):
     super(EventListener, self).__init__()
     salt_conf = settings.get('salt.master_config', '/etc/salt/master')
     salt_opts = salt_config.master_config(salt_conf)
     self.daemon = True
     self.event = MasterEvent(salt_opts['sock_dir'])