[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