diff env/lib/python3.7/site-packages/boto/requestlog.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/boto/requestlog.py	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,39 @@
+import sys
+from datetime import datetime
+from threading import Thread
+import Queue
+
+from boto.utils import RequestHook
+from boto.compat import long_type
+
+
+class RequestLogger(RequestHook):
+    """
+    This class implements a request logger that uses a single thread to
+    write to a log file.
+    """
+    def __init__(self, filename='/tmp/request_log.csv'):
+        self.request_log_file = open(filename, 'w')
+        self.request_log_queue = Queue.Queue(100)
+        Thread(target=self._request_log_worker).start()
+
+    def handle_request_data(self, request, response, error=False):
+        len = 0 if error else response.getheader('Content-Length')
+        now = datetime.now()
+        time = now.strftime('%Y-%m-%d %H:%M:%S')
+        td = (now - request.start_time)
+        duration = (td.microseconds + long_type(td.seconds + td.days * 24 * 3600) * 1e6) / 1e6
+
+        # write output including timestamp, status code, response time, response size, request action
+        self.request_log_queue.put("'%s', '%s', '%s', '%s', '%s'\n" % (time, response.status, duration, len, request.params['Action']))
+
+    def _request_log_worker(self):
+        while True:
+            try:
+                item = self.request_log_queue.get(True)
+                self.request_log_file.write(item)
+                self.request_log_file.flush()
+                self.request_log_queue.task_done()
+            except:
+                import traceback
+                traceback.print_exc(file=sys.stdout)