def init(self, *ignored_args, **ignored_kwargs): self.cfg.set('post_fork', self.zato_wsgi_app.post_fork) # Initializes a worker self.cfg.set('on_starting', self.zato_wsgi_app.on_starting) # Generates the deployment key self.cfg.set('worker_exit', self.zato_wsgi_app.worker_exit) # Cleans up after the worker for k, v in self.config_main.items(): if k.startswith('gunicorn') and v: k = k.replace('gunicorn_', '') if k == 'bind': if not ':' in v: raise ValueError('No port found in main.gunicorn_bind `{}`, such as `{}:17010`'.format(v)) else: host, port = v.split(':') self.zato_host = host self.zato_port = port self.cfg.set(k, v) else: if 'deployment_lock' in k: v = int(v) self.zato_config[k] = v for name in('deployment_lock_expires', 'deployment_lock_timeout'): setattr(self.zato_wsgi_app, name, self.zato_config[name]) if asbool(self.crypto_config.use_tls): self.cfg.set('ssl_version', getattr(ssl, 'PROTOCOL_{}'.format(self.crypto_config.tls_protocol))) self.cfg.set('ciphers', self.crypto_config.tls_ciphers) self.cfg.set('cert_reqs', getattr(ssl, 'CERT_{}'.format(self.crypto_config.tls_client_certs.upper()))) self.cfg.set('ca_certs', absjoin(self.repo_location, self.crypto_config.ca_certs_location)) self.cfg.set('keyfile', absjoin(self.repo_location, self.crypto_config.priv_key_location)) self.cfg.set('certfile', absjoin(self.repo_location, self.crypto_config.cert_location)) self.cfg.set('do_handshake_on_connect', True) self.zato_wsgi_app.has_gevent = 'gevent' in self.cfg.settings['worker_class'].value
def init(self, *ignored_args, **ignored_kwargs): self.cfg.set('post_fork', self.zato_wsgi_app.post_fork) # Initializes a worker self.cfg.set( 'on_starting', self.zato_wsgi_app.on_starting) # Generates the deployment key self.cfg.set( 'worker_exit', self.zato_wsgi_app.worker_exit) # Cleans up after the worker for k, v in self.config_main.items(): if k.startswith('gunicorn') and v: k = k.replace('gunicorn_', '') if k == 'bind': if not ':' in v: raise ValueError( 'No port found in main.gunicorn_bind [{v}]; a proper value is, for instance, [{v}:17010]' .format(v=v)) else: host, port = v.split(':') self.zato_host = host self.zato_port = port self.cfg.set(k, v) else: if 'deployment_lock' in k: v = int(v) self.zato_config[k] = v for name in ('deployment_lock_expires', 'deployment_lock_timeout'): setattr(self.zato_wsgi_app, name, self.zato_config[name]) # TLS is new in 2.0 and we need to assume it's not enabled. In Zato 2.1 or later # this will be changed to assume that we are always over TLS by default. if asbool(self.crypto_config.get('use_tls', False)): self.cfg.set( 'ssl_version', getattr(ssl, 'PROTOCOL_{}'.format(self.crypto_config.tls_protocol))) self.cfg.set('ciphers', self.crypto_config.tls_ciphers) self.cfg.set( 'cert_reqs', getattr( ssl, 'CERT_{}'.format( self.crypto_config.tls_client_certs.upper()))) self.cfg.set( 'ca_certs', absjoin(self.repo_location, self.crypto_config.ca_certs_location)) self.cfg.set( 'keyfile', absjoin(self.repo_location, self.crypto_config.priv_key_location)) self.cfg.set( 'certfile', absjoin(self.repo_location, self.crypto_config.cert_location)) self.cfg.set('do_handshake_on_connect', True) self.zato_wsgi_app.has_gevent = 'gevent' in self.cfg.settings[ 'worker_class'].value
def main(): # Always attempt to store the PID file first store_pidfile(os.path.abspath('.')) # Capture warnings to log files logging.captureWarnings(True) config = Config() repo_location = os.path.join('.', 'config', 'repo') # Logging configuration with open(os.path.join(repo_location, 'logging.conf')) as f: dictConfig(yaml.load(f)) # Read config in and extend it with ODB-specific information config.main = get_config(repo_location, 'scheduler.conf') config.main.odb.fs_sql_config = get_config(repo_location, 'sql.conf', needs_user_config=False) # Make all paths absolute if config.main.crypto.use_tls: config.main.crypto.ca_certs_location = absjoin( repo_location, config.main.crypto.ca_certs_location) config.main.crypto.priv_key_location = absjoin( repo_location, config.main.crypto.priv_key_location) config.main.crypto.cert_location = absjoin( repo_location, config.main.crypto.cert_location) logger = logging.getLogger(__name__) logger.info('Scheduler starting (http{}://{}:{})'.format( 's' if config.main.crypto.use_tls else '', config.main.bind.host, config.main.bind.port)) # Fix up configuration so it uses the format internal utilities expect for name, job_config in iteritems( get_config(repo_location, 'startup_jobs.conf', needs_user_config=False)): job_config['name'] = name config.startup_jobs.append(job_config) # Run the scheduler server try: SchedulerServer(config, repo_location).serve_forever() except Exception: logger.warn(format_exc())