示例#1
0
文件: main.py 项目: henryw2019/zato
    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
示例#2
0
文件: main.py 项目: xulong2005/zato
    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
示例#3
0
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())