)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1253,"name":"Gerry Drudy","email":"gerry.drudy@hpe.com","username":"gerry-drudy"},"change_message_id":"c6ceb3854d880c4f3e01cc52c6eaf0d30bd78950","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    $ swift-checker --healthceck"},{"line_number":25,"context_line":"    2 swift_healthcheck - no response: proxy-server"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"The \"2\" indicates a warning severity in Nagios. \"0\" is normal/ok, \"2\" is"},{"line_number":28,"context_line":"critical and \"3\" is unknown severity."},{"line_number":29,"context_line":"(the \"-\" means there is no value or metric to report in this test)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ae5cdf2_a7594a90","line":27,"updated":"2014-06-17 11:33:04.000000000","message":"Should that be \"1\" for warning?","commit_id":"d42dfe4789c0ec4d3b7b6aec3bc6322db2e99d83"},{"author":{"_account_id":1253,"name":"Gerry Drudy","email":"gerry.drudy@hpe.com","username":"gerry-drudy"},"change_message_id":"c6ceb3854d880c4f3e01cc52c6eaf0d30bd78950","unresolved":false,"context_lines":[{"line_number":33,"context_line":"These tests use swift-recon to gather data. So far,"},{"line_number":34,"context_line":"only one check is implemented:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    $ swift-checker --async_pendind --threshold_warning\u003d10000"},{"line_number":37,"context_line":"    1 swift_async_pending total\u003d950 high async pending"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Change-Id: Ibf15cca565caada31e93374eeb8e929f3c98716a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ae5cdf2_274d3ac5","line":36,"updated":"2014-06-17 11:33:04.000000000","message":"Type: --async-pendind s/b --async-pending","commit_id":"d42dfe4789c0ec4d3b7b6aec3bc6322db2e99d83"},{"author":{"_account_id":1253,"name":"Gerry Drudy","email":"gerry.drudy@hpe.com","username":"gerry-drudy"},"change_message_id":"c6ceb3854d880c4f3e01cc52c6eaf0d30bd78950","unresolved":false,"context_lines":[{"line_number":34,"context_line":"only one check is implemented:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    $ swift-checker --async_pendind --threshold_warning\u003d10000"},{"line_number":37,"context_line":"    1 swift_async_pending total\u003d950 high async pending"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Change-Id: Ibf15cca565caada31e93374eeb8e929f3c98716a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ae5cdf2_2780da8a","line":37,"updated":"2014-06-17 11:33:04.000000000","message":"Maybe I\u0027m reading this wrong but should it only report a warn if total i.e. 950 is greater than the threshold_warning of 10000","commit_id":"d42dfe4789c0ec4d3b7b6aec3bc6322db2e99d83"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"45ce06845fd310dac4efe0868ee1fc9864ef09cb","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add swift-checker utility for use by monitoring tools"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a swift-cheker utility. It implements a number of tests on a"},{"line_number":10,"context_line":"node or cluster. Json and text output is supported allow integration"},{"line_number":11,"context_line":"with any monitoring tool. This utility is not a monitoring plug-in."},{"line_number":12,"context_line":"Instead it allows you to easily write such plug-ins (see"},{"line_number":13,"context_line":"documentation for an example)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ae5cdf2_c2df9f64","line":10,"updated":"2014-06-20 00:03:24.000000000","message":"s/allow/allowing/ or s/allow/to allow/","commit_id":"d501e15f31ef5f3b4c7470353ebd8f5ecad8b04e"}],"doc/manpages/swift-checker.1":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"b4d30b74d20b17ac1104b70fc8ed14cb52901212","unresolved":false,"context_lines":[{"line_number":1,"context_line":".\\\""},{"line_number":2,"context_line":".\\\" Author: Donagh McCabe \u003cdonagh.mccabe@hp.com\u003e"},{"line_number":3,"context_line":".\\\" Copyright (c) 2010-2011 OpenStack Foundation."},{"line_number":4,"context_line":".\\\""},{"line_number":5,"context_line":".\\\" Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":6,"context_line":".\\\" you may not use this file except in compliance with the License."}],"source_content_type":"text/troff","patch_set":8,"id":"fa98f980_c9082edc","line":3,"updated":"2014-09-17 15:47:11.000000000","message":"You might need to fix the dates here, not sure if it\u0027s just a nit or required.","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":1,"context_line":".\\\""},{"line_number":2,"context_line":".\\\" Author: Donagh McCabe \u003cdonagh.mccabe@hp.com\u003e"},{"line_number":3,"context_line":".\\\" Copyright (c) 2010-2011 OpenStack Foundation."},{"line_number":4,"context_line":".\\\""},{"line_number":5,"context_line":".\\\" Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":6,"context_line":".\\\" you may not use this file except in compliance with the License."}],"source_content_type":"text/troff","patch_set":8,"id":"fa98f980_4b7fd6ab","line":3,"updated":"2014-09-17 16:55:35.000000000","message":"nit: (c) 2014","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"b4d30b74d20b17ac1104b70fc8ed14cb52901212","unresolved":false,"context_lines":[{"line_number":15,"context_line":".\\\" See the License for the specific language governing permissions and"},{"line_number":16,"context_line":".\\\" limitations under the License."},{"line_number":17,"context_line":".\\\""},{"line_number":18,"context_line":".TH swift-checker 1 \"8/26/2011\" \"Linux\" \"OpenStack Swift\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".SH NAME"},{"line_number":21,"context_line":".LP"}],"source_content_type":"text/troff","patch_set":8,"id":"fa98f980_e90df2e9","line":18,"updated":"2014-09-17 15:47:11.000000000","message":"Same here","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":73,"context_line":".LP"},{"line_number":74,"context_line":"More documentation about Openstack-Swift can be found at"},{"line_number":75,"context_line":".BI http://swift.openstack.org/index.html"},{"line_number":76,"context_line":"Also more specific documentation about swift-recon can be found at"},{"line_number":77,"context_line":".BI http://swift.openstack.org/admin_guide.html#cluster-telemetry-and-monitoring"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""}],"source_content_type":"text/troff","patch_set":8,"id":"fa98f980_2e6380de","line":76,"updated":"2014-09-17 16:55:35.000000000","message":"nit: This is first mention of swift-recon, not sure if you man to say swift-checker","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"546804ccab7ac3bfda9a8b073f22057ebb00c1cf","unresolved":false,"context_lines":[{"line_number":73,"context_line":".LP"},{"line_number":74,"context_line":"More documentation about Openstack-Swift can be found at"},{"line_number":75,"context_line":".BI http://swift.openstack.org/index.html"},{"line_number":76,"context_line":"Also more specific documentation about swift-recon can be found at"},{"line_number":77,"context_line":".BI http://swift.openstack.org/admin_guide.html#cluster-telemetry-and-monitoring"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""}],"source_content_type":"text/troff","patch_set":8,"id":"fa98f980_9aaab118","line":76,"in_reply_to":"fa98f980_2e6380de","updated":"2014-09-19 11:21:53.000000000","message":"At one stage these checks were done in swift-recon via flags instead of a separate utility. I should remove this text.","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"}],"doc/source/admin_guide.rst":[{"author":{"_account_id":1005,"name":"Eamonn O\u0027Toole","email":"eamonn.otoole@hp.com","username":"eamonn-otoole"},"change_message_id":"1b647dcd55aabab740e8d8c9485aff795809f160","unresolved":false,"context_lines":[{"line_number":573,"context_line":"Some tests are run against the whole system. It is recommended that these tests are"},{"line_number":574,"context_line":"run on a single server. The table of tests indicates the type of test being performed."},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"The swift-checker utility adapts to the type if server it is run on. It does this"},{"line_number":577,"context_line":"by examining the server configuration files. For example, if /etc/swift/proxy-server.conf"},{"line_number":578,"context_line":"exists, it will test the proxy-server. However, if the file is absent, it will"},{"line_number":579,"context_line":"report an \"ok\" status. This means you can configure the same set of tests on all"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_be74a89c","line":576,"updated":"2014-06-19 09:29:28.000000000","message":"Typo - type of server, not type if server","commit_id":"e16a229c8e977ecd643dedde2c934c67c322b2b5"},{"author":{"_account_id":1005,"name":"Eamonn O\u0027Toole","email":"eamonn.otoole@hp.com","username":"eamonn-otoole"},"change_message_id":"1b647dcd55aabab740e8d8c9485aff795809f160","unresolved":false,"context_lines":[{"line_number":618,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"The following table describes the warning and failure messages printed by swift-checker."},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d     \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d     \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":623,"context_line":"Check Name     Message                               Cause/Resolution"},{"line_number":624,"context_line":"----------     ---------------------------------     ------------------------------------------------------ "}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_1e5afcf1","line":621,"updated":"2014-06-19 09:29:28.000000000","message":"Maybe reformat the following lines to fit in 80 characters?","commit_id":"e16a229c8e977ecd643dedde2c934c67c322b2b5"},{"author":{"_account_id":1005,"name":"Eamonn O\u0027Toole","email":"eamonn.otoole@hp.com","username":"eamonn-otoole"},"change_message_id":"1b647dcd55aabab740e8d8c9485aff795809f160","unresolved":false,"context_lines":[{"line_number":621,"context_line":""},{"line_number":622,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d     \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d     \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":623,"context_line":"Check Name     Message                               Cause/Resolution"},{"line_number":624,"context_line":"----------     ---------------------------------     ------------------------------------------------------ "},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"healthcheck    disabled: proxy-server                The proxy-server has been disabled by the creation"},{"line_number":627,"context_line":"                                                     if a file in the \"disable_path\". This is often used"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_deeed421","line":624,"updated":"2014-06-19 09:29:28.000000000","message":"Whitespace","commit_id":"e16a229c8e977ecd643dedde2c934c67c322b2b5"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"45ce06845fd310dac4efe0868ee1fc9864ef09cb","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                                     full, it can be difficult to recover. To"},{"line_number":674,"context_line":"                                     resolve, add more devices to the rings or"},{"line_number":675,"context_line":"                                     ask your users to delete objects. You"},{"line_number":676,"context_line":"                                     should also consider setting "},{"line_number":677,"context_line":"                                     :ref:`fallocate_reserve"},{"line_number":678,"context_line":"                                     \u003cobject-server-configuration\u003e`."},{"line_number":679,"context_line":"async_pending   high async           The total async_pending mount exceeds the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_42b54feb","line":676,"updated":"2014-06-20 00:03:24.000000000","message":"Remove trailing white space.","commit_id":"d501e15f31ef5f3b4c7470353ebd8f5ecad8b04e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":549,"context_line":""},{"line_number":550,"context_line":"The swift-checker utility allows you to integrate some core healthchecks into"},{"line_number":551,"context_line":"your monitoring system. There are many network and system monitoring tools"},{"line_number":552,"context_line":"available, each with their own mechanisms for pluging in custom checks."},{"line_number":553,"context_line":"swift-checker is not a plug-in. Instead, you write your own plug-in using the"},{"line_number":554,"context_line":"data that swift-checker outputs. For example, the following bash script would"},{"line_number":555,"context_line":"act as a Check_Mk plug-in (Check_Mk works with Nagios)::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa98f980_4e8e047b","line":552,"updated":"2014-09-17 16:55:35.000000000","message":"s/pluging/plugging/","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":626,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":627,"context_line":"Check Name      Message              Cause/Resolution"},{"line_number":628,"context_line":"--------------  -------------------  -------------------------------------------"},{"line_number":629,"context_line":"healthcheck     disabled:            The proxy-server has been disabled by the"},{"line_number":630,"context_line":"                proxy-server         creation of a file in the \"disable_path\"."},{"line_number":631,"context_line":"                                     This is often used to temporalily disable"},{"line_number":632,"context_line":"                                     a proxy server by removing it from load"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa98f980_3f3acc34","line":629,"updated":"2014-09-17 16:55:35.000000000","message":"might help to clarify this as the \u0027proxy-server healthcheck has been disabled\u0027","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":628,"context_line":"--------------  -------------------  -------------------------------------------"},{"line_number":629,"context_line":"healthcheck     disabled:            The proxy-server has been disabled by the"},{"line_number":630,"context_line":"                proxy-server         creation of a file in the \"disable_path\"."},{"line_number":631,"context_line":"                                     This is often used to temporalily disable"},{"line_number":632,"context_line":"                                     a proxy server by removing it from load"},{"line_number":633,"context_line":"                                     balancer or high availability system. To"},{"line_number":634,"context_line":"                                     resolve, delete the file named by the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa98f980_bf15dc9c","line":631,"updated":"2014-09-17 16:55:35.000000000","message":"nit: \u0027temporarily\u0027","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                                     a proxy server by removing it from load"},{"line_number":633,"context_line":"                                     balancer or high availability system. To"},{"line_number":634,"context_line":"                                     resolve, delete the file named by the"},{"line_number":635,"context_line":"                                     \"disable_path\" configuration parmater"},{"line_number":636,"context_line":"                                     in the proxy-server.conf file."},{"line_number":637,"context_line":"healthcheck     not responding:      The named server is not responding. The"},{"line_number":638,"context_line":"                \u003cname\u003e               process may not be running or may be stuck"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa98f980_c9666e29","line":635,"updated":"2014-09-17 16:55:35.000000000","message":"nit s/parmater/parameter","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":634,"context_line":"                                     resolve, delete the file named by the"},{"line_number":635,"context_line":"                                     \"disable_path\" configuration parmater"},{"line_number":636,"context_line":"                                     in the proxy-server.conf file."},{"line_number":637,"context_line":"healthcheck     not responding:      The named server is not responding. The"},{"line_number":638,"context_line":"                \u003cname\u003e               process may not be running or may be stuck"},{"line_number":639,"context_line":"                                     in some way. To resolve, start or restart"},{"line_number":640,"context_line":"                                     the server. Using swift-checker with the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa98f980_a4722fae","line":637,"updated":"2014-09-17 16:55:35.000000000","message":"? I see \u0027no response\u0027 when proxy server is not runninng","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"}],"swift/cli/checker.py":[{"author":{"_account_id":1253,"name":"Gerry Drudy","email":"gerry.drudy@hpe.com","username":"gerry-drudy"},"change_message_id":"c6ceb3854d880c4f3e01cc52c6eaf0d30bd78950","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        (so will be set to None)."},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        self.port \u003d {\u0027proxy\u0027: 80, \u0027object\u0027: 6000, \u0027container\u0027: 6001,"},{"line_number":87,"context_line":"                     \u0027account\u0027: 6002} "},{"line_number":88,"context_line":"        all_conf \u003d readconf(\u0027/etc/swift\u0027)"},{"line_number":89,"context_line":"        for server_type in self.all_types:"},{"line_number":90,"context_line":"            self.configured[server_type] \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_e75c324f","line":87,"updated":"2014-06-17 11:33:04.000000000","message":"There is white space on several lines","commit_id":"d42dfe4789c0ec4d3b7b6aec3bc6322db2e99d83"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"87be3681c948062de8f8337afdbf53296dccade2","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        We don\u0027t care about the result data -- just that some answer"},{"line_number":191,"context_line":"        comes back."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        param server_type: one of \u0027object\u0027, \u0027container\u0027, \u0027account\u0027"},{"line_number":194,"context_line":"        \"\"\""},{"line_number":195,"context_line":"        recon \u003d Scout(\u0027unmounted\u0027, self.verbose, self.suppress_errors,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5ee4840c","line":192,"updated":"2014-06-18 16:23:50.000000000","message":"missing : from :param","commit_id":"e16a229c8e977ecd643dedde2c934c67c322b2b5"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"87be3681c948062de8f8337afdbf53296dccade2","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    def get_diskusage(self):"},{"line_number":275,"context_line":"        \"\"\""},{"line_number":276,"context_line":"        Get disk utilization and mount status of disk drives"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        returns: an array of dicts; each entry has device name,"},{"line_number":279,"context_line":"            mount status and percent usage"},{"line_number":280,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_debfb4ce","line":277,"updated":"2014-06-18 16:23:50.000000000","message":"missing : in returns","commit_id":"e16a229c8e977ecd643dedde2c934c67c322b2b5"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"87be3681c948062de8f8337afdbf53296dccade2","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def _gen_metric(self, stats, stat_used, metric_name):"},{"line_number":377,"context_line":"        \"\"\""},{"line_number":378,"context_line":"        Compute value of metric from a list of numbers"},{"line_number":379,"context_line":"        param stats: array of numbers (where a number can be None)"},{"line_number":380,"context_line":"        param stat_used: which stat are we interested in (options are"},{"line_number":381,"context_line":"            \u0027low\u0027, \u0027 high\u0027, \u0027total\u0027, \u0027average\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_1ead9c9b","line":378,"updated":"2014-06-18 16:23:50.000000000","message":"missign : in front of param and returns","commit_id":"e16a229c8e977ecd643dedde2c934c67c322b2b5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        config file might be different. Also, recon might not be configured"},{"line_number":84,"context_line":"        (so will be set to None)."},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        self.bind_port \u003d {\u0027proxy\u0027: 80, \u0027object\u0027: 6000, \u0027container\u0027: 6001,"},{"line_number":87,"context_line":"                          \u0027account\u0027: 6002}"},{"line_number":88,"context_line":"        self.bind_ip \u003d {\u0027proxy\u0027: \u00270.0.0.0\u0027, \u0027object\u0027: \u00270.0.0.0\u0027,"},{"line_number":89,"context_line":"                        \u0027container\u0027: \u00270.0.0.0\u0027, \u0027account\u0027: \u00270.0.0.0\u0027}"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_a9292af4","line":86,"updated":"2014-09-17 16:55:35.000000000","message":"the default proxy port is 8080 in bin/swift-proxy-server","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.bind_port \u003d {\u0027proxy\u0027: 80, \u0027object\u0027: 6000, \u0027container\u0027: 6001,"},{"line_number":87,"context_line":"                          \u0027account\u0027: 6002}"},{"line_number":88,"context_line":"        self.bind_ip \u003d {\u0027proxy\u0027: \u00270.0.0.0\u0027, \u0027object\u0027: \u00270.0.0.0\u0027,"},{"line_number":89,"context_line":"                        \u0027container\u0027: \u00270.0.0.0\u0027, \u0027account\u0027: \u00270.0.0.0\u0027}"},{"line_number":90,"context_line":"        self.mount_check \u003d None"},{"line_number":91,"context_line":"        self.fallocate_reserve \u003d 0"},{"line_number":92,"context_line":"        for server_type in self.all_types:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_69d90222","line":89,"updated":"2014-09-17 16:55:35.000000000","message":"is 0.0.0.0 best default vs 127.0.0.1 ? With proxy-server defaulting to 0.0.0.0, I could not get swift-checker to talk to it.","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            self.configured[server_type] \u003d False"},{"line_number":94,"context_line":"            self.recon_cache_path[server_type] \u003d None"},{"line_number":95,"context_line":"            conf_filename \u003d os.path.join(self.swift_dir, \u0027%s-server.conf\u0027 %"},{"line_number":96,"context_line":"                                         server_type)"},{"line_number":97,"context_line":"            if os.path.isfile(conf_filename):"},{"line_number":98,"context_line":"                self.configured[server_type] \u003d True"},{"line_number":99,"context_line":"                # readconf() exits if section does not exist; hence we wait"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_64e3e7a4","line":96,"updated":"2014-09-17 16:55:35.000000000","message":"This doesn\u0027t find SAIO conf files e.g. /etc/swift/object-server/1.conf - I guess the tool is targetted at SAIO (!) but I don\u0027t know if that path to conf file might be used in clusters?","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        Optionally check threshold and print message and stats"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        At simplest, pass status and msg. Alternativly, give a message for"},{"line_number":137,"context_line":"        each status value (msg1 for status \u00271\u0027, etc.) and this function will"},{"line_number":138,"context_line":"        examime status to pick the appropriate message."},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_6e72e812","line":136,"updated":"2014-09-17 16:55:35.000000000","message":"nit: s/Alternativly/Alternatively/","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        than the threshold (however, a FAIL or UNKNOWN are not overriden)."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :param status: One of OK (\u00270\u0027), WARNING (\u00271\u0027), FAIL (\u00272\u0027),"},{"line_number":145,"context_line":"            UNKNWON (\u00273\u0027) indicating severity level"},{"line_number":146,"context_line":"        :param msg: message to print"},{"line_number":147,"context_line":"        :param msg1: if status is WARNING, print this instead"},{"line_number":148,"context_line":"        :param msg2: if status is FAIL, print this instead"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_847c4bb7","line":145,"updated":"2014-09-17 16:55:35.000000000","message":"nit: UNKNOWN","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d3410cbd3e723af782ffe0a662e9c905464fe53","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        Get aync pending; check total"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        :param hosts: set of hosts to check. in the format of:"},{"line_number":195,"context_line":"            set([(\u0027127.0.0.1\u0027, 6020), (\u0027127.0.0.2\u0027, 6030)])"},{"line_number":196,"context_line":"        \"\"\""},{"line_number":197,"context_line":"        scan \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_dfcf0028","line":194,"updated":"2014-09-17 16:55:35.000000000","message":"param not passed","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2c36f5dee70ae5d060a4b58ac83154dc92327a0b","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                     msg3\u003d\u0027cannot determine value\u0027,"},{"line_number":212,"context_line":"                     stats\u003dstats)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def recon_healthcheck(self, server_type):"},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        Use recon to see if local server is responding"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_75e6fe17","line":214,"updated":"2014-09-19 11:58:42.000000000","message":"ah, i was confused for a while as to how --healthcheck showed all ok when i didn\u0027t have healthcheck in backend server pipelines. Now I see why.\n\nhealthcheck is not in the backend server sample conf files, so should it be tried first, perhaps with fallback to the recon method?","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"b4d30b74d20b17ac1104b70fc8ed14cb52901212","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def replication(self):"},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        Check the last_replicaiton times"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        An old value indicates that replication is stuck."},{"line_number":386,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_8950e6d5","line":383,"updated":"2014-09-17 15:47:11.000000000","message":"nit: replication","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2c36f5dee70ae5d060a4b58ac83154dc92327a0b","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                    if self.verbose:"},{"line_number":415,"context_line":"                        print(\u0027-\u003e %s: never replicated\u0027 % server_type)"},{"line_number":416,"context_line":"        if len(stat_values):"},{"line_number":417,"context_line":"            stats \u003d self._gen_metric(stat_values, \u0027high\u0027, \u0027replication_last\u0027)"},{"line_number":418,"context_line":"        else:"},{"line_number":419,"context_line":"            status \u003d UNKNOWN"},{"line_number":420,"context_line":"            stats \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_753efe2a","line":417,"updated":"2014-09-19 11:58:42.000000000","message":"is it possible to include the server type in the \u0027name\u0027 so that the report indicates which replication service is \u0027slowest\u0027 or has exceeded threshold?","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2c36f5dee70ae5d060a4b58ac83154dc92327a0b","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        :param ring_name: Name of the ring, such as \u0027object\u0027"},{"line_number":461,"context_line":"        :returns: a set of tuples containing the ip and port of hosts"},{"line_number":462,"context_line":"        \"\"\""},{"line_number":463,"context_line":"        ring_data \u003d Ring(swift_dir, ring_name\u003dring_name)"},{"line_number":464,"context_line":"        ips \u003d set((n[\u0027ip\u0027], n[\u0027port\u0027]) for n in ring_data.devs if n)"},{"line_number":465,"context_line":"        return ips"},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_15ca121a","line":463,"updated":"2014-09-19 11:58:42.000000000","message":"I see the an exception trace if --swiftdir\u003d/non/existent/path. Perhaps check file exists before init\u0027ing Ring?","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2c36f5dee70ae5d060a4b58ac83154dc92327a0b","unresolved":false,"context_lines":[{"line_number":484,"context_line":"            %prog --replication --threshold_warning\u003d86400"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        Output Formats:"},{"line_number":487,"context_line":"            Use --outformat to specify how data is reported."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"            json:"},{"line_number":490,"context_line":"                Prints the result, formatted in json. The following fields are"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_1ae081cb","line":487,"updated":"2014-09-19 11:58:42.000000000","message":"nit: mention that default is json","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2c36f5dee70ae5d060a4b58ac83154dc92327a0b","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        args.add_option(\u0027--healthcheck\u0027, action\u003d\"store_true\","},{"line_number":513,"context_line":"                        help\u003d\"Check if servers are responding\")"},{"line_number":514,"context_line":"        args.add_option(\u0027--replication\u0027, action\u003d\"store_true\","},{"line_number":515,"context_line":"                        help\u003d\"Check replicatio0n is progressing\")"},{"line_number":516,"context_line":"        args.add_option(\u0027--threshold_warning\u0027, type\u003d\"int\", metavar\u003d\"VALUE\","},{"line_number":517,"context_line":"                        default\u003d-999999,"},{"line_number":518,"context_line":"                        help\u003d\"Sets warning threshold on reported value\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_fa781dfa","line":515,"updated":"2014-09-19 11:58:42.000000000","message":"typo -\u003e replication","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2c36f5dee70ae5d060a4b58ac83154dc92327a0b","unresolved":false,"context_lines":[{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        if self.verbose:"},{"line_number":541,"context_line":"            self.suppress_errors \u003d False"},{"line_number":542,"context_line":"        if options.threshold_warning is not -999999:"},{"line_number":543,"context_line":"            self.threshold_warning \u003d options.threshold_warning"},{"line_number":544,"context_line":"        self.timeout \u003d options.timeout"},{"line_number":545,"context_line":"        if options.outformat \u003d\u003d \u0027json\u0027 or options.outformat is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_dad519e6","line":542,"updated":"2014-09-19 11:58:42.000000000","message":"why allow other -ve values?","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2c36f5dee70ae5d060a4b58ac83154dc92327a0b","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        if options.replication:"},{"line_number":557,"context_line":"            self.replication()"},{"line_number":558,"context_line":"        if options.diskusage:"},{"line_number":559,"context_line":"            self.diskusage()"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_ba05b515","line":559,"updated":"2014-09-19 11:58:42.000000000","message":"else: print something e.g. usage\n\nor, make default action be do all checks?","commit_id":"8431f7a734381c5bbf70d3f2ce533470e0ef3fda"}],"swift/common/utils.py":[{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"87be3681c948062de8f8337afdbf53296dccade2","unresolved":false,"context_lines":[{"line_number":2178,"context_line":"        :params cache_keys: list of cache items to retrieve"},{"line_number":2179,"context_line":"        :params cache_file: cache file to retrieve items from."},{"line_number":2180,"context_line":"        :params logger: the logger to use to log an encountered error"},{"line_number":2181,"context_line":"        :params openr: open to use [for unittests]"},{"line_number":2182,"context_line":"        :return: dict of cache items and their values or none if not found"},{"line_number":2183,"context_line":"        \"\"\""},{"line_number":2184,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_1e111c04","line":2181,"updated":"2014-06-18 16:23:50.000000000","message":":returns: -- with\"s\"","commit_id":"e16a229c8e977ecd643dedde2c934c67c322b2b5"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"45ce06845fd310dac4efe0868ee1fc9864ef09cb","unresolved":false,"context_lines":[{"line_number":531,"context_line":"            utils.dump_recon_cache(key3value, testcache_file, logger)"},{"line_number":532,"context_line":"            result_dict \u003d utils.get_recon_cache([\u0027key2\u0027], testcache_file,"},{"line_number":533,"context_line":"                                                logger)"},{"line_number":534,"context_line":"            self.assertEquals(result_dict, key2value)"},{"line_number":535,"context_line":"        finally:"},{"line_number":536,"context_line":"            rmtree(testdir_base)"},{"line_number":537,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e2bd7b69","line":534,"updated":"2014-06-20 00:03:24.000000000","message":"Maybe you can add an assert/test (as a part of this test) where by you modify a value in the cache and the return it to make sure it does in fact get the updated value.\n\n  key2value_updated \u003d {\u0027key2\u0027: \u0027value5\u0027}\n  utils.dump_recon_cache(key2value_updated, testcache_file, logger)\n  result_dict \u003d utils.get_recon_cache([\u0027key2\u0027], testcache_file,\n\t\t\t                                    logger)\n  self.assertEquals(result_dict, key2value_updated)\n\nI\u0027m sure it does because your method is successfully pulling from the cache. But just thinking of edge cases.","commit_id":"d501e15f31ef5f3b4c7470353ebd8f5ecad8b04e"}]}
