Files
designate/designate/api/wsgi.py
T
kpdev 9541a29761 Integrate OSprofiler and Designate
*) Add osprofiler wsgi middleware

This middleware is used for 2 things:
1) It checks that person who want to trace is trusted and knows
secret HMAC key.
2) It start tracing in case of proper trace headers and add
first wsgi trace point, with info about HTTP request
*) Add initialization of osprofiler at start of serivce.

You should use python-designateclient with this patch:

https://review.opendev.org/#/c/773575

Run any command with --os-profile SECRET_KEY

  $ openstack zone create --email <email_id> <zone_name> \
    --os-profile SECRET_KEY
  # it will print <Trace ID>

Get pretty HTML with traces:

  $ osprofiler trace show --html <Trace ID> --connection-string \
   <connection_string> --out <output.html>
  e.g. --connection-string can be redis://localhost:6379

Note that osprofiler should be run from admin user name & tenant.

Implements: blueprint designate-os-profiler
Change-Id: I2a3787b6428d679555a9add3a57ffe8c2112b6d3
2022-02-07 07:12:18 +00:00

58 lines
1.7 KiB
Python

# 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.
"""WSGI script for Designate API."""
import os
from oslo_config import cfg
from oslo_log import log as logging
from paste import deploy
from designate.common import config
from designate.common import profiler
from designate import conf
from designate import heartbeat_emitter
from designate import policy
from designate import rpc
CONF = conf.CONF
CONFIG_FILES = ['api-paste.ini', 'designate.conf']
def _get_config_files(env=None):
if env is None:
env = os.environ
dirname = env.get('OS_DESIGNATE_CONFIG_DIR', '/etc/designate').strip()
return [os.path.join(dirname, config_file) for config_file in CONFIG_FILES]
def init_application():
conf_files = _get_config_files()
logging.register_options(cfg.CONF)
cfg.CONF([], project='designate', default_config_files=conf_files)
config.set_defaults()
logging.setup(cfg.CONF, 'designate')
policy.init()
if not rpc.initialized():
rpc.init(CONF)
profiler.setup_profiler("designate-api", CONF.host)
heartbeat = heartbeat_emitter.get_heartbeat_emitter('api')
heartbeat.start()
conf = conf_files[0]
return deploy.loadapp('config:%s' % conf, name='osapi_dns')