From 2d09bce4daafc2ef650d7467753b39c8c4521074 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Wed, 17 Aug 2016 11:10:14 +0200 Subject: [PATCH] Use pbr wsgi_scripts feature to build ceilometer-api Change-Id: I8812ea1a92d6dc7f41a490e971bb7a09dee9b304 --- ceilometer/api/__init__.py | 36 --------------------------- ceilometer/api/app.py | 33 ++---------------------- ceilometer/opts.py | 6 +---- ceilometer/service.py | 8 ------ ceilometer/tests/unit/api/test_app.py | 22 ---------------- requirements.txt | 1 - setup.cfg | 2 ++ 7 files changed, 5 insertions(+), 103 deletions(-) diff --git a/ceilometer/api/__init__.py b/ceilometer/api/__init__.py index aa23956c8e..e69de29bb2 100644 --- a/ceilometer/api/__init__.py +++ b/ceilometer/api/__init__.py @@ -1,36 +0,0 @@ -# -# Copyright 2012 New Dream Network, LLC (DreamHost) -# -# Licensed 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. - -from oslo_config import cfg - -# Register options for the service -OPTS = [ - cfg.PortOpt('port', - default=8777, - deprecated_name='metering_api_port', - deprecated_group='DEFAULT', - help='The port for the ceilometer API server.', - ), - cfg.StrOpt('host', - default='0.0.0.0', - help='The listen IP for the ceilometer API server.', - ), -] - -CONF = cfg.CONF -opt_group = cfg.OptGroup(name='api', - title='Options for the ceilometer-api service') -CONF.register_group(opt_group) -CONF.register_opts(OPTS, opt_group) diff --git a/ceilometer/api/app.py b/ceilometer/api/app.py index 84fd586a2f..21bb4218e9 100644 --- a/ceilometer/api/app.py +++ b/ceilometer/api/app.py @@ -1,5 +1,6 @@ # # Copyright 2012 New Dream Network, LLC (DreamHost) +# Copyright 2015-2016 Red Hat, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -19,11 +20,9 @@ from oslo_config import cfg from oslo_log import log from paste import deploy import pecan -from werkzeug import serving from ceilometer.api import hooks from ceilometer.api import middleware -from ceilometer.i18n import _LI, _LW LOG = log.getLogger(__name__) @@ -67,16 +66,9 @@ def setup_app(pecan_config=None): pecan.configuration.set_config(dict(pecan_config), overwrite=True) - # NOTE(sileht): pecan debug won't work in multi-process environment - pecan_debug = CONF.api.pecan_debug - if CONF.api.workers and CONF.api.workers != 1 and pecan_debug: - pecan_debug = False - LOG.warning(_LW('pecan_debug cannot be enabled, if workers is > 1, ' - 'the value is overrided with False')) - app = pecan.make_app( pecan_config['app']['root'], - debug=pecan_debug, + debug=CONF.api.pecan_debug, hooks=app_hooks, wrap_app=middleware.ParsableErrorMiddleware, guess_content_type_from_ext=False @@ -100,26 +92,5 @@ def load_app(): return deploy.loadapp("config:" + cfg_file) -def build_server(): - app = load_app() - # Create the WSGI server and start it - host, port = cfg.CONF.api.host, cfg.CONF.api.port - - LOG.info(_LI('Starting server in PID %s'), os.getpid()) - LOG.info(_LI("Configuration:")) - cfg.CONF.log_opt_values(LOG, log.INFO) - - if host == '0.0.0.0': - LOG.info(_LI( - 'serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s') - % ({'sport': port, 'vport': port})) - else: - LOG.info(_LI("serving on http://%(host)s:%(port)s") % ( - {'host': host, 'port': port})) - - serving.run_simple(cfg.CONF.api.host, cfg.CONF.api.port, - app, processes=CONF.api.workers) - - def app_factory(global_config, **local_conf): return setup_app() diff --git a/ceilometer/opts.py b/ceilometer/opts.py index 22b18c3a50..abb780bf30 100644 --- a/ceilometer/opts.py +++ b/ceilometer/opts.py @@ -16,7 +16,6 @@ import itertools from keystoneauth1 import loading import ceilometer.agent.manager -import ceilometer.api import ceilometer.api.app import ceilometer.cmd.polling import ceilometer.collector @@ -76,10 +75,7 @@ def list_opts(): ceilometer.sample.OPTS, ceilometer.service.OPTS, ceilometer.utils.OPTS,)), - ('api', - itertools.chain(ceilometer.api.OPTS, - ceilometer.api.app.API_OPTS, - [ceilometer.service.API_OPT])), + ('api', ceilometer.api.app.API_OPTS), ('collector', itertools.chain(ceilometer.collector.OPTS, [ceilometer.service.COLL_OPT])), diff --git a/ceilometer/service.py b/ceilometer/service.py index 19cb1e1b71..5961160de6 100644 --- a/ceilometer/service.py +++ b/ceilometer/service.py @@ -40,14 +40,6 @@ OPTS = [ ] cfg.CONF.register_opts(OPTS) -API_OPT = cfg.IntOpt('workers', - default=1, - min=1, - deprecated_group='DEFAULT', - deprecated_name='api_workers', - help='Number of workers for api, default value is 1.') -cfg.CONF.register_opt(API_OPT, 'api') - NOTI_OPT = cfg.IntOpt('workers', default=1, min=1, diff --git a/ceilometer/tests/unit/api/test_app.py b/ceilometer/tests/unit/api/test_app.py index 7b74985936..e507e0b426 100644 --- a/ceilometer/tests/unit/api/test_app.py +++ b/ceilometer/tests/unit/api/test_app.py @@ -34,25 +34,3 @@ class TestApp(base.BaseTestCase): with mock.patch.object(self.CONF, 'find_file') as ff: ff.return_value = None self.assertRaises(cfg.ConfigFilesNotFoundError, app.load_app) - - @mock.patch('ceilometer.storage.get_connection_from_config', - mock.MagicMock()) - @mock.patch('pecan.make_app') - def test_pecan_debug(self, mocked): - def _check_pecan_debug(g_debug, p_debug, expected, workers=1): - self.CONF.set_override('debug', g_debug) - if p_debug is not None: - self.CONF.set_override('pecan_debug', p_debug, group='api') - self.CONF.set_override('workers', workers, group='api') - app.setup_app() - args, kwargs = mocked.call_args - self.assertEqual(expected, kwargs.get('debug')) - - _check_pecan_debug(g_debug=False, p_debug=None, expected=False) - _check_pecan_debug(g_debug=True, p_debug=None, expected=False) - _check_pecan_debug(g_debug=True, p_debug=False, expected=False) - _check_pecan_debug(g_debug=False, p_debug=True, expected=True) - _check_pecan_debug(g_debug=True, p_debug=None, expected=False, - workers=5) - _check_pecan_debug(g_debug=False, p_debug=True, expected=False, - workers=5) diff --git a/requirements.txt b/requirements.txt index 8d8eae27a0..a7cb044734 100644 --- a/requirements.txt +++ b/requirements.txt @@ -42,7 +42,6 @@ SQLAlchemy<1.1.0,>=1.0.10 # MIT sqlalchemy-migrate>=0.9.6 # Apache-2.0 stevedore>=1.9.0 # Apache-2.0 tooz>=1.28.0 # Apache-2.0 -Werkzeug>=0.7 # BSD License WebOb>=1.2.3 # MIT WSME>=0.8 # MIT # NOTE(jd) We do not import it directly, but WSME datetime string parsing diff --git a/setup.cfg b/setup.cfg index c3cd821c8c..6f63d986b6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -252,6 +252,8 @@ ceilometer.event.trait_plugin = bitfield = ceilometer.event.trait_plugins:BitfieldTraitPlugin timedelta = ceilometer.event.trait_plugins:TimedeltaPlugin +wsgi_scripts = + ceilometer-api = ceilometer.api.app:load_app console_scripts = ceilometer-api = ceilometer.cmd.api:main