)]}'
{"swift/common/middleware/proxy_logging.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"667858d6c9aeeec6260cb2a7fb6b6b7efb5dec6d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        end_gmtime_str \u003d time.strftime(\u0027%d/%b/%Y/%H/%M/%S\u0027,"},{"line_number":157,"context_line":"                                       time.gmtime(end_time))"},{"line_number":158,"context_line":"        duration_time_str \u003d \"%.4f\" % (end_time - start_time)"},{"line_number":159,"context_line":"        start_time_str \u003d \"%.5f\" % start_time"},{"line_number":160,"context_line":"        end_time_str \u003d \"%.5f\" % end_time"},{"line_number":161,"context_line":"        self.access_logger.info(\u0027 \u0027.join("},{"line_number":162,"context_line":"            quote(str(x) if x else \u0027-\u0027, QUOTE_SAFE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BcEg%3D","line":159,"updated":"2013-11-26 02:51:19.000000000","message":"Why 5 decimal places? 6 places would be milliseconds, which would be conventional, in case human read the logs.","commit_id":"29139532517490157221ca13d90f9e4eacc04737"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"71b30c4d732960401da640f3ee5871f56189e39e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        end_gmtime_str \u003d time.strftime(\u0027%d/%b/%Y/%H/%M/%S\u0027,"},{"line_number":157,"context_line":"                                       time.gmtime(end_time))"},{"line_number":158,"context_line":"        duration_time_str \u003d \"%.4f\" % (end_time - start_time)"},{"line_number":159,"context_line":"        start_time_str \u003d \"%.5f\" % start_time"},{"line_number":160,"context_line":"        end_time_str \u003d \"%.5f\" % end_time"},{"line_number":161,"context_line":"        self.access_logger.info(\u0027 \u0027.join("},{"line_number":162,"context_line":"            quote(str(x) if x else \u0027-\u0027, QUOTE_SAFE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BZIA%3D","line":159,"in_reply_to":"AAAATn%2F%2BcEg%3D","updated":"2013-11-26 15:43:06.000000000","message":"I believe you mean microseconds. The 5 comes from the fact that the object timestamps are 5 places. The clock resolution can be as low as 1 ns, so I\u0027ll just use 9 places instead and be done.","commit_id":"29139532517490157221ca13d90f9e4eacc04737"}],"test/unit/common/middleware/test_proxy_logging.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"91543cd0c56296afa34e634c1354cfd934c0422e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            app \u003d proxy_logging.ProxyLoggingMiddleware(FakeApp(), {})"},{"line_number":147,"context_line":"            app.access_logger \u003d FakeLogger()"},{"line_number":148,"context_line":"            req \u003d Request.blank(bad_path, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":149,"context_line":"            now \u003d 10000.0"},{"line_number":150,"context_line":"            app.log_request(req, 123, 7, 13, now, now + 2.71828182846)"},{"line_number":151,"context_line":"            self.assertEqual([], app.access_logger.log_dict[\u0027timing\u0027])"},{"line_number":152,"context_line":"            self.assertEqual([], app.access_logger.log_dict[\u0027update_stats\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FARw%3D","line":149,"updated":"2013-11-15 20:38:57.000000000","message":"is this just an arbitrary non-zero value?","commit_id":"23e8ddb5cfc4f0be3d99cccd287e0dea4e54971a"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"b4897563a5d670fd14cd00ed1f9f4622cf150da0","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            app \u003d proxy_logging.ProxyLoggingMiddleware(FakeApp(), {})"},{"line_number":147,"context_line":"            app.access_logger \u003d FakeLogger()"},{"line_number":148,"context_line":"            req \u003d Request.blank(bad_path, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":149,"context_line":"            now \u003d 10000.0"},{"line_number":150,"context_line":"            app.log_request(req, 123, 7, 13, now, now + 2.71828182846)"},{"line_number":151,"context_line":"            self.assertEqual([], app.access_logger.log_dict[\u0027timing\u0027])"},{"line_number":152,"context_line":"            self.assertEqual([], app.access_logger.log_dict[\u0027update_stats\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FANs%3D","line":149,"in_reply_to":"AAAATn%2F%2FARw%3D","updated":"2013-11-15 21:03:53.000000000","message":"yes, avoids making test work with the various floating point values run to run when it is not necessary.","commit_id":"23e8ddb5cfc4f0be3d99cccd287e0dea4e54971a"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"91543cd0c56296afa34e634c1354cfd934c0422e","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.assertUpdateStats(\u0027SOS.GET.200.xfer\u0027, len(resp_body), app)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def test_log_headers(self):"},{"line_number":333,"context_line":"        for conf_key in [\u0027access_log_headers\u0027, \u0027log_headers\u0027]:"},{"line_number":334,"context_line":"            app \u003d proxy_logging.ProxyLoggingMiddleware(FakeApp(),"},{"line_number":335,"context_line":"                                                       {conf_key: \u0027yes\u0027})"},{"line_number":336,"context_line":"            app.access_logger \u003d FakeLogger()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FARg%3D","line":333,"updated":"2013-11-15 20:38:57.000000000","message":"just a question:  how is this related to the overall change?","commit_id":"23e8ddb5cfc4f0be3d99cccd287e0dea4e54971a"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"b4897563a5d670fd14cd00ed1f9f4622cf150da0","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.assertUpdateStats(\u0027SOS.GET.200.xfer\u0027, len(resp_body), app)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def test_log_headers(self):"},{"line_number":333,"context_line":"        for conf_key in [\u0027access_log_headers\u0027, \u0027log_headers\u0027]:"},{"line_number":334,"context_line":"            app \u003d proxy_logging.ProxyLoggingMiddleware(FakeApp(),"},{"line_number":335,"context_line":"                                                       {conf_key: \u0027yes\u0027})"},{"line_number":336,"context_line":"            app.access_logger \u003d FakeLogger()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FANo%3D","line":333,"in_reply_to":"AAAATn%2F%2FARg%3D","updated":"2013-11-15 21:03:53.000000000","message":"As both log_headers and log_accurate config values come in both flavors, I decided since I was testing to make sure I handled both for log_accurate that I might as well do the same for log_headers.","commit_id":"23e8ddb5cfc4f0be3d99cccd287e0dea4e54971a"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"26882965ae09181254fa204f71d2c09ca9daf899","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        with mock.patch.multiple(\u0027time\u0027,"},{"line_number":713,"context_line":"                                 time\u003dmock.MagicMock("},{"line_number":714,"context_line":"                                     side_effect\u003d[10000000.0, 10000001.0]),"},{"line_number":715,"context_line":"                                 gmtime\u003dmock.MagicMock("},{"line_number":716,"context_line":"                                     side_effect\u003dtime.gmtime)):"},{"line_number":717,"context_line":"            resp \u003d app(req.environ, start_response)"},{"line_number":718,"context_line":"            resp_body \u003d \u0027\u0027.join(resp)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BSJ8%3D","line":715,"updated":"2013-11-27 21:32:24.000000000","message":"At this point, you can just take the gmtime mocking out, entirely, right?  From what I can tell, that\u0027s just replacing time.gmtime with itself.","commit_id":"c17f6098799a18cc988070615084a7077a3eab66"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"7dd904d45d6d2a30f8072958f14bbcaa286149a3","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        with mock.patch.multiple(\u0027time\u0027,"},{"line_number":713,"context_line":"                                 time\u003dmock.MagicMock("},{"line_number":714,"context_line":"                                     side_effect\u003d[10000000.0, 10000001.0]),"},{"line_number":715,"context_line":"                                 gmtime\u003dmock.MagicMock("},{"line_number":716,"context_line":"                                     side_effect\u003dtime.gmtime)):"},{"line_number":717,"context_line":"            resp \u003d app(req.environ, start_response)"},{"line_number":718,"context_line":"            resp_body \u003d \u0027\u0027.join(resp)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BRk8%3D","line":715,"in_reply_to":"AAAATn%2F%2BSJ8%3D","updated":"2013-11-28 01:20:06.000000000","message":"Face palm! (Owe, that hurt) Done.","commit_id":"c17f6098799a18cc988070615084a7077a3eab66"}]}
