def _run_server(): host = cfg.CONF.api.host port = cfg.CONF.api.port LOG.info('(PID=%s) ST2 API is serving on http://%s:%s.', os.getpid(), host, port) wsgi.server(eventlet.listen((host, port)), app.setup_app()) return 0
def _run_server(): host = cfg.CONF.api.host port = cfg.CONF.api.port LOG.info('(PID=%s) ST2 API is serving on http://%s:%s.', os.getpid(), host, port) max_pool_size = eventlet.wsgi.DEFAULT_MAX_SIMULTANEOUS_REQUESTS worker_pool = eventlet.GreenPool(max_pool_size) sock = eventlet.listen((host, port)) wsgi.server(sock, app.setup_app(), custom_pool=worker_pool, log=LOG, log_output=False) return 0
def _do_setUpClass(cls): tests_config.parse_args() cfg.CONF.set_default('enable', cls.enable_auth, group='auth') cfg.CONF.set_override(name='enable', override=False, group='rbac') # TODO(manas) : register action types here for now. RunnerType registration can be moved # to posting to /runnertypes but that implies implementing POST. runners_registrar.register_runners() cls.app = TestApp(app.setup_app())
def _run_server(): host = cfg.CONF.api.host port = cfg.CONF.api.port LOG.info('(PID=%s) ST2 API is serving on http://%s:%s.', os.getpid(), host, port) max_pool_size = eventlet.wsgi.DEFAULT_MAX_SIMULTANEOUS_REQUESTS worker_pool = eventlet.GreenPool(max_pool_size) sock = eventlet.listen((host, port)) def queue_shutdown(signal_number, stack_frame): eventlet.spawn_n(shutdown_server_kill_pending_requests, sock=sock, worker_pool=worker_pool, wait_time=WSGI_SERVER_REQUEST_SHUTDOWN_TIME) # We register a custom SIGINT handler which allows us to kill long running active requests. # Note: Eventually we will support draining (waiting for short-running requests), but we # will still want to kill long running stream requests. register_api_signal_handlers(handler_func=queue_shutdown) wsgi.server(sock, app.setup_app(), custom_pool=worker_pool) return 0
# Licensed to the StackStorm, Inc ('StackStorm') under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os from st2api import app config = { 'is_gunicorn': True, 'config_args': ['--config-file', os.environ.get('ST2_CONFIG_PATH', '/etc/st2/st2.conf')] } application = app.setup_app(config)
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ WSGI entry point used by gunicorn. """ import os from st2common.util.monkey_patch import monkey_patch # Note: We need to perform monkey patching in the worker. If we do it in # the master process (gunicorn_config.py), it breaks tons of things # including shutdown # NOTE: It's important that we perform monkey patch as early as possible before any other modules # are important, otherwise SSL support for MongoDB won't work. # See https://github.com/StackStorm/st2/issues/4832 and https://github.com/gevent/gevent/issues/1016 # for details. monkey_patch() from st2api import app config = { 'is_gunicorn': True, 'config_args': ['--config-file', os.environ.get('ST2_CONFIG_PATH', '/etc/st2/st2.conf')] } application = app.setup_app(config)