summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Danjou <julien@danjou.info>2016-08-17 11:10:14 +0200
committerJulien Danjou <julien@danjou.info>2016-09-14 16:54:50 +0200
commit2d09bce4daafc2ef650d7467753b39c8c4521074 (patch)
treeca03ce24575888ce8533875d589596ac9b039e1d
parent6d301dd952c42a32358e4994a7e9d1576653939a (diff)
downloadceilometer-2d09bce4daafc2ef650d7467753b39c8c4521074.tar.gz
Use pbr wsgi_scripts feature to build ceilometer-api
Change-Id: I8812ea1a92d6dc7f41a490e971bb7a09dee9b304
-rw-r--r--ceilometer/api/__init__.py36
-rw-r--r--ceilometer/api/app.py33
-rw-r--r--ceilometer/opts.py6
-rw-r--r--ceilometer/service.py8
-rw-r--r--ceilometer/tests/unit/api/test_app.py22
-rw-r--r--requirements.txt1
-rw-r--r--setup.cfg2
7 files changed, 5 insertions, 103 deletions
diff --git a/ceilometer/api/__init__.py b/ceilometer/api/__init__.py
index aa23956c..e69de29b 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 84fd586a..21bb4218 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 22b18c3a..abb780bf 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 19cb1e1b..5961160d 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 7b749859..e507e0b4 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 8d8eae27..a7cb0447 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 c3cd821c..6f63d986 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