Merge "Print request body when log-exchange flag is true"

This commit is contained in:
Jenkins 2013-10-03 10:26:41 +00:00 committed by Gerrit Code Review
commit 1e6cf08d2b
2 changed files with 71 additions and 2 deletions

View File

@ -24,8 +24,8 @@ from savanna.api import v11 as api_v11
from savanna import context
from savanna.db import api as db_api
from savanna.middleware import auth_valid
from savanna.middleware import log_exchange
from savanna.openstack.common import log
from savanna.openstack.common.middleware import debug
from savanna.plugins import base as plugins_base
from savanna.service import periodic
from savanna.utils import api as api_utils
@ -119,7 +119,8 @@ def make_app():
' flag --log-exchange')
if CONF.log_exchange:
app.wsgi_app = debug.Debug.factory(app.config)(app.wsgi_app)
cfg = app.config
app.wsgi_app = log_exchange.LogExchange.factory(cfg)(app.wsgi_app)
app.wsgi_app = auth_valid.filter_factory(app.config)(app.wsgi_app)

View File

@ -0,0 +1,68 @@
# Copyright 2011 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.
# It's based on debug middleware from oslo-incubator
"""Debug middleware"""
from __future__ import print_function
import sys
import webob.dec
from savanna.openstack.common.middleware import base
class LogExchange(base.Middleware):
"""Helper class that returns debug information.
Can be inserted into any WSGI application chain to get information about
the request and response.
"""
@webob.dec.wsgify
def __call__(self, req):
print(("*" * 40) + " REQUEST ENVIRON")
for key, value in req.environ.items():
print(key, "=", value)
if req.is_body_readable:
print(('*' * 40) + " REQUEST BODY")
if req.content_type == 'application/json':
print(req.json)
else:
print(req.body)
print()
resp = req.get_response(self.application)
print(("*" * 40) + " RESPONSE HEADERS")
for (key, value) in resp.headers.iteritems():
print(key, "=", value)
print()
resp.app_iter = self.print_generator(resp.app_iter)
return resp
@staticmethod
def print_generator(app_iter):
"""Prints the contents of a wrapper string iterator when iterated."""
print(("*" * 40) + " RESPONSE BODY")
for part in app_iter:
sys.stdout.write(part)
sys.stdout.flush()
yield part
print()