示例#1
0
文件: odb.py 项目: brtsz/zato
class ODBManager(object):
    """ Manages connections to the server's Operational Database.
    """
    def __init__(self, well_known_data=None, odb_data=None, odb_config=None,
                 crypto_manager=None, pool=None, server=None, cluster=None,
                 init=True):
        self.well_known_data = well_known_data
        self.odb_data = odb_data
        self.odb_config = odb_data
        self.crypto_manager = crypto_manager
        self.pool = pool
        self.server = server
        self.cluster = cluster

    def session(self):
        return self._Session()

    def close(self):
        self._session.close()

    def fetch_server(self):
        """ Fetches the server from the ODB. Also sets the 'cluster' attribute
        to the value pointed to by the server's .cluster attribute.
        """
        if not self.pool:
            if not self.odb_config:
                odb_data = dict(self.odb_data.items())

                if not odb_data['extra']:
                    odb_data['extra'] = {}

                odb_data['pool_size'] = int(odb_data['pool_size'])

                self.odb_config = {ZATO_ODB_POOL_NAME: odb_data}

            self.pool = ODBConnectionPool(self.odb_config, True, self.crypto_manager)
            self.pool.init()
            self.pool.get(ZATO_ODB_POOL_NAME)

        self.pool.ping({'pool_name': ZATO_ODB_POOL_NAME})
        engine = self.pool.get(ZATO_ODB_POOL_NAME)

        self._Session = scoped_session(sessionmaker(bind=engine))
        self._session = self._Session()

        try:
            self.server = self._session.query(Server).\
                   filter(Server.odb_token == self.odb_data['token']).\
                   one()
            self.cluster = self.server.cluster
            return self.server
        except Exception, e:
            msg = 'Could not find the server in the ODB, token=[{0}]'.format(
                self.odb_data['token'])
            logger.error(msg)
            raise
示例#2
0
文件: odb.py 项目: brtsz/zato
    def fetch_server(self):
        """ Fetches the server from the ODB. Also sets the 'cluster' attribute
        to the value pointed to by the server's .cluster attribute.
        """
        if not self.pool:
            if not self.odb_config:
                odb_data = dict(self.odb_data.items())

                if not odb_data['extra']:
                    odb_data['extra'] = {}

                odb_data['pool_size'] = int(odb_data['pool_size'])

                self.odb_config = {ZATO_ODB_POOL_NAME: odb_data}

            self.pool = ODBConnectionPool(self.odb_config, True, self.crypto_manager)
            self.pool.init()
            self.pool.get(ZATO_ODB_POOL_NAME)

        self.pool.ping({'pool_name': ZATO_ODB_POOL_NAME})
        engine = self.pool.get(ZATO_ODB_POOL_NAME)

        self._Session = scoped_session(sessionmaker(bind=engine))
        self._session = self._Session()

        try:
            self.server = self._session.query(Server).\
                   filter(Server.odb_token == self.odb_data['token']).\
                   one()
            self.cluster = self.server.cluster
            return self.server
        except Exception, e:
            msg = 'Could not find the server in the ODB, token=[{0}]'.format(
                self.odb_data['token'])
            logger.error(msg)
            raise