Log every flask request and response for debug
Added two functions with flask before/after_request decorator to log headers and content for every request and response. Change-Id: I8bae4cfd485c49e6fd149a3df5695c94e806264b Closes-Bug: #1654036
This commit is contained in:
parent
978dff9fbe
commit
e93f85ae82
@ -15,7 +15,7 @@ import os.path
|
|||||||
|
|
||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
|
|
||||||
from flask import Flask
|
import flask
|
||||||
|
|
||||||
from valence import config as cfg
|
from valence import config as cfg
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ _app = None
|
|||||||
|
|
||||||
def setup_app():
|
def setup_app():
|
||||||
"""Return Flask application"""
|
"""Return Flask application"""
|
||||||
app = Flask(cfg.PROJECT_NAME)
|
app = flask.Flask(cfg.PROJECT_NAME)
|
||||||
app.url_map.strict_slashes = False
|
app.url_map.strict_slashes = False
|
||||||
TEN_KB = 10 * 1024
|
TEN_KB = 10 * 1024
|
||||||
|
|
||||||
@ -37,6 +37,22 @@ def setup_app():
|
|||||||
handler.setFormatter(formatter)
|
handler.setFormatter(formatter)
|
||||||
app.logger.addHandler(handler)
|
app.logger.addHandler(handler)
|
||||||
app.logger.setLevel(cfg.log_level)
|
app.logger.setLevel(cfg.log_level)
|
||||||
|
|
||||||
|
@app.before_request
|
||||||
|
def before_request_logging():
|
||||||
|
req = flask.request
|
||||||
|
app.logger.debug('{0} {1}'.format(req.method, req.url))
|
||||||
|
app.logger.debug('Request Headers: {0}'.format(dict(req.headers)))
|
||||||
|
if req.data:
|
||||||
|
app.logger.debug('Request Content: {0}'.format(req.data))
|
||||||
|
|
||||||
|
@app.after_request
|
||||||
|
def after_request_logging(resp):
|
||||||
|
app.logger.debug('Response Headers: {0}'.format(dict(resp.headers)))
|
||||||
|
if resp.data:
|
||||||
|
app.logger.debug('Response Content: {0}'.format(resp.data))
|
||||||
|
return resp
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,9 +25,7 @@ LOG = logging.getLogger(__name__)
|
|||||||
class Flavors(Resource):
|
class Flavors(Resource):
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
LOG.debug("GET /flavors")
|
|
||||||
return flavors.get_available_criteria()
|
return flavors.get_available_criteria()
|
||||||
|
|
||||||
def post(self):
|
def post(self):
|
||||||
LOG.debug("POST /flavors")
|
|
||||||
return flavors.create_flavors(request.get_json())
|
return flavors.create_flavors(request.get_json())
|
||||||
|
@ -26,27 +26,22 @@ LOG = logging.getLogger(__name__)
|
|||||||
class NodesList(Resource):
|
class NodesList(Resource):
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
LOG.debug("GET /nodes")
|
|
||||||
return redfish.nodes_list(request.args)
|
return redfish.nodes_list(request.args)
|
||||||
|
|
||||||
def post(self):
|
def post(self):
|
||||||
LOG.debug("POST /nodes/")
|
|
||||||
return redfish.compose_node(request.get_json())
|
return redfish.compose_node(request.get_json())
|
||||||
|
|
||||||
|
|
||||||
class Nodes(Resource):
|
class Nodes(Resource):
|
||||||
|
|
||||||
def get(self, nodeid):
|
def get(self, nodeid):
|
||||||
LOG.debug("GET /nodes/" + nodeid)
|
|
||||||
return redfish.get_nodebyid(nodeid)
|
return redfish.get_nodebyid(nodeid)
|
||||||
|
|
||||||
def delete(self, nodeid):
|
def delete(self, nodeid):
|
||||||
LOG.debug("DELETE /nodes/" + nodeid)
|
|
||||||
return redfish.delete_composednode(nodeid)
|
return redfish.delete_composednode(nodeid)
|
||||||
|
|
||||||
|
|
||||||
class NodesStorage(Resource):
|
class NodesStorage(Resource):
|
||||||
|
|
||||||
def get(self, nodeid):
|
def get(self, nodeid):
|
||||||
LOG.debug("GET /nodes/%s/storage" % nodeid)
|
|
||||||
return abort(501)
|
return abort(501)
|
||||||
|
@ -23,12 +23,10 @@ LOG = logging.getLogger(__name__)
|
|||||||
class StoragesList(Resource):
|
class StoragesList(Resource):
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
LOG.debug("GET /storages")
|
|
||||||
return abort(501)
|
return abort(501)
|
||||||
|
|
||||||
|
|
||||||
class Storages(Resource):
|
class Storages(Resource):
|
||||||
|
|
||||||
def get(self, storageid):
|
def get(self, storageid):
|
||||||
LOG.debug("GET /storages" + storageid)
|
|
||||||
return abort(501)
|
return abort(501)
|
||||||
|
@ -25,12 +25,10 @@ LOG = logging.getLogger(__name__)
|
|||||||
class SystemsList(Resource):
|
class SystemsList(Resource):
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
LOG.debug("GET /systems")
|
|
||||||
return redfish.systems_list(request.args)
|
return redfish.systems_list(request.args)
|
||||||
|
|
||||||
|
|
||||||
class Systems(Resource):
|
class Systems(Resource):
|
||||||
|
|
||||||
def get(self, systemid):
|
def get(self, systemid):
|
||||||
LOG.debug("GET /systems/" + systemid)
|
|
||||||
return redfish.get_systembyid(systemid)
|
return redfish.get_systembyid(systemid)
|
||||||
|
@ -21,7 +21,7 @@ from valence.api import app
|
|||||||
class TestApp(unittest.TestCase):
|
class TestApp(unittest.TestCase):
|
||||||
|
|
||||||
@mock.patch('valence.config.PROJECT_NAME')
|
@mock.patch('valence.config.PROJECT_NAME')
|
||||||
@mock.patch('valence.api.app.Flask')
|
@mock.patch('valence.api.app.flask.Flask')
|
||||||
def test_setup_app_success(self, mock_Flask, mock_PROJECT_NAME):
|
def test_setup_app_success(self, mock_Flask, mock_PROJECT_NAME):
|
||||||
self.app = app.setup_app()
|
self.app = app.setup_app()
|
||||||
mock_Flask.assert_called_with(mock_PROJECT_NAME)
|
mock_Flask.assert_called_with(mock_PROJECT_NAME)
|
||||||
|
Loading…
Reference in New Issue
Block a user