class SchedulerServer(object): """ Main class spawning scheduler-related tasks and listening for HTTP API requests. """ def __init__(self, config, repo_location): self.odb = config.odb self.config = config self.repo_location = repo_location self.sql_pool_store = PoolStore() # Set up the crypto manager that will be used by both ODB and, possibly, KVDB self.config.crypto_manager = SchedulerCryptoManager( self.repo_location, stdin_data=read_stdin_data()) # ODB connection self.odb = ODBManager() if self.config.main.odb.engine != 'sqlite': self.config.main.odb.password = self.config.crypto_manager.decrypt( config.main.odb.password) self.config.main.odb.host = config.main.odb.host self.config.main.odb.pool_size = config.main.odb.pool_size self.config.main.odb.username = config.main.odb.username self.sql_pool_store[ZATO_ODB_POOL_NAME] = self.config.main.odb main = self.config.main if main.crypto.use_tls: priv_key, cert = main.crypto.priv_key_location, main.crypto.cert_location else: priv_key, cert = None, None # API server self.api_server = WSGIServer((main.bind.host, int(main.bind.port)), self, keyfile=priv_key, certfile=cert) self.odb.pool = self.sql_pool_store[ZATO_ODB_POOL_NAME].pool self.odb.init_session(ZATO_ODB_POOL_NAME, self.config.main.odb, self.odb.pool, False) self.config.odb = self.odb # Scheduler self.scheduler = Scheduler(self.config) # ################################################################################################################################ def serve_forever(self): self.scheduler.serve_forever() self.api_server.serve_forever() # ################################################################################################################################ def __call__(self, env, start_response): try: start_response(ok, headers) return [b'{}\n'] except Exception: logger.warn(format_exc())
class SchedulerServer(object): """ Main class spawning scheduler-related tasks and listening for HTTP API requests. """ def __init__(self, config): self.config = config self.sql_pool_store = PoolStore() self.sql_pool_store[ZATO_ODB_POOL_NAME] = self.config.main.odb main = self.config.main if main.crypto.use_tls: priv_key, cert = main.crypto.priv_key_location, main.crypto.cert_location else: priv_key, cert = None, None # API server self.api_server = WSGIServer((main.bind.host, int(main.bind.port)), self, keyfile=priv_key, certfile=cert) # ODB connection self.odb = ODBManager() self.odb.pool = self.sql_pool_store[ZATO_ODB_POOL_NAME].pool self.odb.init_session(ZATO_ODB_POOL_NAME, self.config.odb, self.odb.pool, False) self.config.odb = self.odb # Scheduler self.scheduler = Scheduler(self.config) # ################################################################################################################################ def serve_forever(self): self.scheduler.serve_forever() self.api_server.serve_forever() # ################################################################################################################################ def __call__(self, env, start_response): try: start_response(ok, headers) return [b'{}\n'] except Exception, e: logger.warn(format_exc(e))