From 784372985907dd88771e4ee1ff32305022b49e78 Mon Sep 17 00:00:00 2001 From: Gordon Chung Date: Fri, 21 Feb 2014 09:54:30 -0500 Subject: [PATCH] notifier middleware broken by oslo.messaging audit middleware in oslo-incubator is incompatible with oslo.messaging. an oslo.messaging compatible version is available in pycadf library. remove broken oslo-incubator code in this patch. also add middleware/request_id to openstack-common.conf so we continue to pull in request_id middleware but not audit/notifier. Partial-Bug: #1280327 Change-Id: I665144b256da0b04267cac754324e5779512e65d --- nova/openstack/common/middleware/audit.py | 45 ------- nova/openstack/common/middleware/notifier.py | 126 ------------------- openstack-common.conf | 3 +- 3 files changed, 2 insertions(+), 172 deletions(-) delete mode 100644 nova/openstack/common/middleware/audit.py delete mode 100644 nova/openstack/common/middleware/notifier.py diff --git a/nova/openstack/common/middleware/audit.py b/nova/openstack/common/middleware/audit.py deleted file mode 100644 index 69a890f7af33..000000000000 --- a/nova/openstack/common/middleware/audit.py +++ /dev/null @@ -1,45 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# Copyright (c) 2013 OpenStack Foundation -# All Rights Reserved. -# -# 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. -""" -Attach open standard audit information to request.environ - -AuditMiddleware filter should be place after Keystone's auth_token middleware -in the pipeline so that it can utilise the information Keystone provides. - -""" -from pycadf.audit import api as cadf_api - -from nova.openstack.common.middleware import notifier - - -class AuditMiddleware(notifier.RequestNotifier): - - def __init__(self, app, **conf): - super(AuditMiddleware, self).__init__(app, **conf) - self.cadf_audit = cadf_api.OpenStackAuditApi() - - @notifier.log_and_ignore_error - def process_request(self, request): - self.cadf_audit.append_audit_event(request) - super(AuditMiddleware, self).process_request(request) - - @notifier.log_and_ignore_error - def process_response(self, request, response, - exception=None, traceback=None): - self.cadf_audit.mod_audit_event(request, response) - super(AuditMiddleware, self).process_response(request, response, - exception, traceback) diff --git a/nova/openstack/common/middleware/notifier.py b/nova/openstack/common/middleware/notifier.py deleted file mode 100644 index 5a0f5290f1c1..000000000000 --- a/nova/openstack/common/middleware/notifier.py +++ /dev/null @@ -1,126 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# Copyright (c) 2013 eNovance -# -# 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. -""" -Send notifications on request - -""" -import os.path -import sys -import traceback as tb - -import webob.dec - -from nova.openstack.common import context -from nova.openstack.common.gettextutils import _ # noqa -from nova.openstack.common import log as logging -from nova.openstack.common.middleware import base -from nova.openstack.common.notifier import api - -LOG = logging.getLogger(__name__) - - -def log_and_ignore_error(fn): - def wrapped(*args, **kwargs): - try: - return fn(*args, **kwargs) - except Exception as e: - LOG.exception(_('An exception occurred processing ' - 'the API call: %s ') % e) - return wrapped - - -class RequestNotifier(base.Middleware): - """Send notification on request.""" - - @classmethod - def factory(cls, global_conf, **local_conf): - """Factory method for paste.deploy.""" - conf = global_conf.copy() - conf.update(local_conf) - - def _factory(app): - return cls(app, **conf) - return _factory - - def __init__(self, app, **conf): - self.service_name = conf.get('service_name', None) - self.ignore_req_list = [x.upper().strip() for x in - conf.get('ignore_req_list', '').split(',')] - super(RequestNotifier, self).__init__(app) - - @staticmethod - def environ_to_dict(environ): - """Following PEP 333, server variables are lower case, so don't - include them. - - """ - return dict((k, v) for k, v in environ.iteritems() - if k.isupper()) - - @log_and_ignore_error - def process_request(self, request): - request.environ['HTTP_X_SERVICE_NAME'] = \ - self.service_name or request.host - payload = { - 'request': self.environ_to_dict(request.environ), - } - - api.notify(context.get_admin_context(), - api.publisher_id(os.path.basename(sys.argv[0])), - 'http.request', - api.INFO, - payload) - - @log_and_ignore_error - def process_response(self, request, response, - exception=None, traceback=None): - payload = { - 'request': self.environ_to_dict(request.environ), - } - - if response: - payload['response'] = { - 'status': response.status, - 'headers': response.headers, - } - - if exception: - payload['exception'] = { - 'value': repr(exception), - 'traceback': tb.format_tb(traceback) - } - - api.notify(context.get_admin_context(), - api.publisher_id(os.path.basename(sys.argv[0])), - 'http.response', - api.INFO, - payload) - - @webob.dec.wsgify - def __call__(self, req): - if req.method in self.ignore_req_list: - return req.get_response(self.application) - else: - self.process_request(req) - try: - response = req.get_response(self.application) - except Exception: - type, value, traceback = sys.exc_info() - self.process_response(req, None, value, traceback) - raise - else: - self.process_response(req, response) - return response diff --git a/openstack-common.conf b/openstack-common.conf index a6f69abda413..a2972516e762 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -20,7 +20,8 @@ module=lockutils module=log module=loopingcall module=memorycache -module=middleware +module=middleware/base +module=middleware/request_id module=network_utils module=periodic_task module=policy