[Kimchi-devel] [PATCH] [Wok 1/4] Add User Request Logger
Lucio Correia
luciojhc at linux.vnet.ibm.com
Tue Feb 23 20:43:03 UTC 2016
Signed-off-by: Lucio Correia <luciojhc at linux.vnet.ibm.com>
---
src/wok/reqlogger.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 103 insertions(+)
create mode 100644 src/wok/reqlogger.py
diff --git a/src/wok/reqlogger.py b/src/wok/reqlogger.py
new file mode 100644
index 0000000..642add4
--- /dev/null
+++ b/src/wok/reqlogger.py
@@ -0,0 +1,103 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import json
+import logging
+import os.path
+
+from datetime import datetime
+
+
+MAX_FILE_SIZE = 3072000
+NUM_BACKUP_FILES = 1
+WOK_REQUEST_LOGGER = 'wok_request_logger'
+
+
+class RequestParser(object):
+ def __init__(self):
+ logger = logging.getLogger(WOK_REQUEST_LOGGER)
+ self.baseFile = logger.handlers[0].baseFilename
+
+ def getRecords(self):
+ records = self.getRecordsFromFile(self.baseFile)
+
+ for count in range(NUM_BACKUP_FILES):
+ filename = ".".join([self.baseFile, str(count + 1)])
+ records.extend(self.getRecordsFromFile(filename))
+
+ return records
+
+ def getRecordsFromFile(self, filename):
+ """
+ Returns a list of dict, where each dict corresponds to a request
+ record.
+ """
+ records = []
+
+ if not os.path.exists(filename):
+ return []
+
+ # read records from file
+ with open(filename) as f:
+ line = f.readline()
+ while line != "":
+ data = line.split(">>>")
+ if len(data) > 1:
+ record = json.JSONDecoder().decode(data[0])
+ record['message'] = data[1].strip()
+ records.append(record)
+
+ line = f.readline()
+
+ return records
+
+ def getFilteredRecords(self, filter_params):
+ """
+ Returns a filtered list of dict, where each dict corresponds to a User
+ Log record.
+ """
+ results = []
+ records = self.getRecords()
+
+ for record in records:
+ if all(key in record and record[key] == val
+ for key, val in filter_params.iteritems()):
+ results.append(record)
+
+ return results
+
+
+class RequestRecord(object):
+ def __init__(self, message, **kwargs):
+ self.message = message
+ self.kwargs = kwargs
+
+ # register timestamp
+ timestamp = datetime.today()
+ self.kwargs['date'] = timestamp.strftime('%Y-%m-%d')
+ self.kwargs['time'] = timestamp.strftime('%H:%M:%S')
+
+ def __str__(self):
+ info = json.JSONEncoder().encode(self.kwargs)
+ return '%s >>> %s' % (info, self.message)
+
+ def log(self):
+ reqLogger = logging.getLogger(WOK_REQUEST_LOGGER)
+ reqLogger.info(self)
--
1.9.1
More information about the Kimchi-devel
mailing list