diff --git a/inventory_provider/__init__.py b/inventory_provider/__init__.py index 024fac841eb30cde1e859612856db2bc2b1e1293..069799fe18f8a1c53337cdf3acb54e1e172cf939 100644 --- a/inventory_provider/__init__.py +++ b/inventory_provider/__init__.py @@ -5,6 +5,7 @@ import logging import os from flask import Flask +from inventory_provider import environment def create_app(): """ @@ -21,6 +22,8 @@ def create_app(): app = Flask(__name__) app.secret_key = "super secret session key" + environment.setup_logging() + from inventory_provider.routes import default app.register_blueprint(default.routes, url_prefix='/') diff --git a/inventory_provider/logging_default_config.json b/inventory_provider/logging_default_config.json index ba3f1eb38510e597063d1d27ceddbea4c0286f10..38f4e61c5e489ccbac2d3a76d4d7354b33fea4ed 100644 --- a/inventory_provider/logging_default_config.json +++ b/inventory_provider/logging_default_config.json @@ -56,7 +56,7 @@ }, "root": { - "level": "WARNING", + "level": "DEBUG", "handlers": ["console", "syslog_handler"] } } \ No newline at end of file diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py index 90b8d9da37648f7af1c3455221d274efaa842e8e..ccf3a0163a8a67373604b5605f97819acf27a2f8 100644 --- a/inventory_provider/routes/classifier.py +++ b/inventory_provider/routes/classifier.py @@ -38,6 +38,11 @@ def handle_request_error(error): status=error.status_code) +@routes.after_request +def after_request(resp): + return common.after_request(resp) + + def base_interface_name(interface): m = re.match(r'(.*?)(\.\d+)?$', interface) assert m # sanity: anything should match diff --git a/inventory_provider/routes/common.py b/inventory_provider/routes/common.py index c51ac11776ddb891a30b865b30f8176e5cf799c0..9e99eb348be42952cb508aa99cba389ef9f8839c 100644 --- a/inventory_provider/routes/common.py +++ b/inventory_provider/routes/common.py @@ -1,8 +1,11 @@ import functools +import logging from flask import request, Response, current_app, g import redis +logger = logging.getLogger(__name__) + def get_redis(): if 'redis_db' not in g: @@ -31,3 +34,26 @@ def require_accepts_json(f): mimetype="text/html") return f(*args, **kwargs) return decorated_function + + +def after_request(response): + """ + generic function to do additional logging of requests & responses + :param response: + :return: + """ + if response.status_code != 200: + + try: + data = response.data.decode('utf-8') + except Exception: + # never expected to happen, but we don't want any failures here + logging.exception('INTERNAL DECODING ERROR') + data = 'decoding error (see logs)' + + logger.warning('"%s %s" "%s" %s' % ( + request.method, + request.path, + data, + str(response.status_code))) + return response diff --git a/inventory_provider/routes/data.py b/inventory_provider/routes/data.py index 258f05ea1352c3e4b73c79c2ad3f4caceb935b5f..905b2cdedf9895494399183a1a2da052e0074d11 100644 --- a/inventory_provider/routes/data.py +++ b/inventory_provider/routes/data.py @@ -10,6 +10,11 @@ from inventory_provider.db import opsdb routes = Blueprint("inventory-data-query-routes", __name__) +@routes.after_request +def after_request(resp): + return common.after_request(resp) + + @routes.route("/routers", methods=['GET', 'POST']) @common.require_accepts_json def routers(): diff --git a/inventory_provider/routes/default.py b/inventory_provider/routes/default.py index fd480bac9c3f76db58d4cc5e854bc9459d343c80..5b4c6b92c4d1b6a87d97b175beb40cee4932612b 100644 --- a/inventory_provider/routes/default.py +++ b/inventory_provider/routes/default.py @@ -8,6 +8,11 @@ routes = Blueprint("inventory-data-default-routes", __name__) API_VERSION = '0.1' +@routes.after_request +def after_request(resp): + return common.after_request(resp) + + @routes.route("/version", methods=['GET', 'POST']) @common.require_accepts_json def version(): diff --git a/inventory_provider/routes/jobs.py b/inventory_provider/routes/jobs.py index a02ddea1582347b1296deb1aac797054e5694aca..dc90269f868c22b2fdc5a80e513dd55acdb4c610 100644 --- a/inventory_provider/routes/jobs.py +++ b/inventory_provider/routes/jobs.py @@ -5,6 +5,11 @@ from inventory_provider.routes import common routes = Blueprint("inventory-data-job-routes", __name__) +@routes.after_request +def after_request(resp): + return common.after_request(resp) + + @routes.route("/update", methods=['GET', 'POST']) @common.require_accepts_json def update(): diff --git a/inventory_provider/routes/poller.py b/inventory_provider/routes/poller.py index d644272fde99d988c445e0604eb6e1105c3d15ab..93179717b4ce524fac454964bacf2016e40d0ebd 100644 --- a/inventory_provider/routes/poller.py +++ b/inventory_provider/routes/poller.py @@ -8,6 +8,11 @@ from inventory_provider.routes import common routes = Blueprint('poller-support-routes', __name__) +@routes.after_request +def after_request(resp): + return common.after_request(resp) + + @routes.route('/interfaces/<hostname>', methods=['GET', 'POST']) @common.require_accepts_json def poller_interface_oids(hostname):