[PATCH] [Wok 1/2] Include user IP address in request log messages

* Allow advanced log searches by IP address * Add RECORD_TEMPLATE_DICT to avoid versioning errors with older log entries, which don't have IP address. * Remove duplicated comment line Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/control/base.py | 10 ++++++---- src/wok/reqlogger.py | 17 ++++++++++++++--- src/wok/root.py | 6 ++++-- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/wok/control/base.py b/src/wok/control/base.py index 4b459ed..419179a 100644 --- a/src/wok/control/base.py +++ b/src/wok/control/base.py @@ -146,7 +146,8 @@ class Resource(object): msg, app=get_plugin_from_request(), req=method, - user=cherrypy.session.get(USER_NAME, 'N/A') + user=cherrypy.session.get(USER_NAME, 'N/A'), + ip=cherrypy.request.remote.ip ).log() if destructive is False or \ @@ -227,7 +228,8 @@ class Resource(object): msg, app=get_plugin_from_request(), req=method, - user=cherrypy.session.get(USER_NAME, 'N/A') + user=cherrypy.session.get(USER_NAME, 'N/A'), + ip=cherrypy.request.remote.ip ).log() return result @@ -374,7 +376,6 @@ class Collection(object): except Exception as e: # In case of errors when fetching a resource info, pass and # log the error, so, other resources are returned - # log the error, so, other resources are returned. # Encoding error message as ident is also encoded value. # This has to be done to avoid unicode error, # as combination of encoded and unicode value results into @@ -455,7 +456,8 @@ class Collection(object): msg, app=get_plugin_from_request(), req=method, - user=cherrypy.session.get(USER_NAME, 'N/A') + user=cherrypy.session.get(USER_NAME, 'N/A'), + ip=cherrypy.request.remote.ip ).log() return result diff --git a/src/wok/reqlogger.py b/src/wok/reqlogger.py index bbd1bd0..2ec62b8 100644 --- a/src/wok/reqlogger.py +++ b/src/wok/reqlogger.py @@ -34,10 +34,20 @@ from wok.utils import ascii_dict, remove_old_files # Log search setup -FILTER_FIELDS = ['app', 'date', 'download', 'req', 'user', 'time'] +FILTER_FIELDS = ['app', 'date', 'download', 'ip', 'req', 'user', 'time'] LOG_DOWNLOAD_URI = "/data/logs/%s" LOG_DOWNLOAD_TIMEOUT = 6 -LOG_FORMAT = "[%(date)s %(time)s] %(req)-6s %(app)-11s %(user)s: %(message)s\n" +LOG_FORMAT = "[%(date)s %(time)s] %(req)-6s %(app)-11s %(ip)-15s %(user)s: " \ + "%(message)s\n" +RECORD_TEMPLATE_DICT = { + 'date': '', + 'time': '', + 'req': '', + 'app': '', + 'ip': '', + 'user': '', + 'message': '', +} SECONDS_PER_HOUR = 360 # Log handler setup @@ -86,7 +96,8 @@ class RequestParser(object): with fd: for record in sortedList: - asciiRecord = ascii_dict(record) + asciiRecord = RECORD_TEMPLATE_DICT + asciiRecord.update(ascii_dict(record)) fd.write(LOG_FORMAT % asciiRecord) fd.close() diff --git a/src/wok/root.py b/src/wok/root.py index 29ea657..902e203 100644 --- a/src/wok/root.py +++ b/src/wok/root.py @@ -172,7 +172,8 @@ class WokRoot(Root): msg, app=get_plugin_from_request(), req=method, - user=cherrypy.session.get(auth.USER_NAME, 'N/A') + user=cherrypy.session.get(auth.USER_NAME, 'N/A'), + ip=cherrypy.request.remote.ip ).log() return json.dumps(user_info) @@ -187,7 +188,8 @@ class WokRoot(Root): msg, app=get_plugin_from_request(), req=method, - user=params['username'] + user=params['username'], + ip=cherrypy.request.remote.ip ).log() auth.logout() -- 1.9.1
participants (1)
-
Lucio Correia