def add_broker(self, uri): mechs = get_sasl_mechanisms(uri, self.app.sasl_mech_list) uri_without_password = uri[uri.rfind("@") + 1:] log.info("Adding QMF broker at %s with mech_list %s", uri_without_password, mechs) assert self.qmf_session qmf_broker = self.qmf_session.addBroker(uri, mechanisms=mechs) self.qmf_brokers.append(qmf_broker)
def __init__(self, broker_uri, refresh_interval=None, sasl_mech_list=None): ''' Constructor. broker_uri -- the URI used to connect to a QMF message broker where a Wallaby agent is connected. The simplest URI is just a hostname but a full URI can specify scheme://user/password@host:port or a subset of those components as long as the host is included. Examples: localhost localhost:5672 amqp://fred/[email protected]:1234 refresh_interval -- default refresh interval in seconds for all items maintained by WallabyOperations' internal caching thread. A value of None causes the caching thread to wait forever before refreshing an item after a successful call unless the refresh() method is used. The refresh interval may be set for items individually with the set_interval() method. sasl_mech_list -- restricts the list of sasl mechanisms that will be allowed when connecting to a QMF message broker. If the broker URL contains no credentials, default is ANONYMOUS. If the broker URL does contain credentials, default is 'PLAIN DIGEST-MD5' ''' self.broker_uri = broker_uri self.sasl_mech_list = get_sasl_mechanisms(broker_uri, sasl_mech_list) # A wallaby Store object self._store = None # A QMF broker self._broker = None # The cache maintenance thread self._maintain_cache = None # Stop the maintenance thread self._stop = False # Cached data. Each of the keys in this dictionary is the name of # an attribute on the Wallaby Store object, with the exception of # WBTypes.TAGS. The TAGS data is a subset of the GROUPS produced # in this module. self._cache = {WBTypes.NODES: self.CacheData(refresh_interval), WBTypes.GROUPS: self.CacheData(refresh_interval), WBTypes.FEATURES: self.CacheData(refresh_interval), WBTypes.TAGS: self.CacheData(refresh_interval, synthetic=self._generate_tag_data)} # Cache a list of nodes that are members of a tag self._nodes_by_tag = dict() # Store the name of the partition group so we can filter it out # of tags/groups that we return self._partition_group = None # Lock is used for synchronization with the caching thread and # for thread safety of any and all data that could be accessed # by multiple threads. self._lock = Lock() self._condition = Condition(self._lock)