)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"44b221183088df50eeeca013d6d3444d52b0a9a8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support to display usage audits for all servers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1648937"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I4ef8e40c322f1768ee1b5e01e9681cab0e2804bd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a6eadb0_97a6960e","line":9,"updated":"2016-12-14 14:47:14.000000000","message":"The lack of a shell CLI for this is not a bug, you should have a blueprint for this work as it\u0027s a new feature add to the client.","commit_id":"70446584913a818b6edd4aeb7c1dc177f48d0ccd"}],"novaclient/tests/functional/v2/test_instance_usage_audit_log.py":[{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"1dbca1bec44aced2d7e34b3d29b7a47fdc1d89c1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        output \u003d self.nova(\"instance-usage-audit-log\")"},{"line_number":22,"context_line":"        total_instances \u003d self._get_value_from_the_table(output,"},{"line_number":23,"context_line":"                                                         \"total_instances\")"},{"line_number":24,"context_line":"        self.assertEqual(\"0\", total_instances)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_c34dc69a","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":46},"updated":"2017-01-03 20:00:34.000000000","message":"I could be wrong, but I don\u0027t think you can assume a \"clean\" devstack for functional tests. What if `instance_usage_audit` configuration is set and there are instances with data?","commit_id":"ba411956c9fdd576678d47d5f3d2a81c19586d03"},{"author":{"_account_id":21479,"name":"int32bit","email":"krystism@gmail.com","username":"int32bit"},"change_message_id":"63518e69ba26a11b2a056e46e47eeb3a3f446732","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        output \u003d self.nova(\"instance-usage-audit-log\")"},{"line_number":22,"context_line":"        total_instances \u003d self._get_value_from_the_table(output,"},{"line_number":23,"context_line":"                                                         \"total_instances\")"},{"line_number":24,"context_line":"        self.assertEqual(\"0\", total_instances)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_59e6cdb0","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":46},"in_reply_to":"ba5201f7_c34dc69a","updated":"2017-01-17 17:08:18.000000000","message":"Sorry that they are too busy these days to update this patch, much obliged for your help if you can commit a new patch set or rebase to correct my wrong solution.","commit_id":"ba411956c9fdd576678d47d5f3d2a81c19586d03"}],"novaclient/tests/unit/v2/fakes.py":[{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"1dbca1bec44aced2d7e34b3d29b7a47fdc1d89c1","unresolved":false,"context_lines":[{"line_number":2167,"context_line":""},{"line_number":2168,"context_line":"    def get_os_instance_usage_audit_log(self, **kw):"},{"line_number":2169,"context_line":"        return (200, FAKE_RESPONSE_HEADERS, {"},{"line_number":2170,"context_line":"            \"instance_usage_audit_logs\": {"},{"line_number":2171,"context_line":"                \"hosts_not_run\": [\"samplehost3\"],"},{"line_number":2172,"context_line":"                \"log\": {"},{"line_number":2173,"context_line":"                    \"samplehost0\": {"},{"line_number":2174,"context_line":"                        \"errors\": 1,"},{"line_number":2175,"context_line":"                        \"instances\": 1,"},{"line_number":2176,"context_line":"                        \"message\": (\"Instance usage audit ran for host \""},{"line_number":2177,"context_line":"                                    \"samplehost0, 1 instances in 0.01 \""},{"line_number":2178,"context_line":"                                    \"seconds.\"),"},{"line_number":2179,"context_line":"                        \"state\": \"DONE\""},{"line_number":2180,"context_line":"                    },"},{"line_number":2181,"context_line":"                    \"samplehost1\": {"},{"line_number":2182,"context_line":"                        \"errors\": 1,"},{"line_number":2183,"context_line":"                        \"instances\": 2,"},{"line_number":2184,"context_line":"                        \"message\": (\"Instance usage audit ran for host \""},{"line_number":2185,"context_line":"                                    \"samplehost1, 2 instances in 0.01 \""},{"line_number":2186,"context_line":"                                    \"seconds.\"),"},{"line_number":2187,"context_line":"                        \"state\": \"DONE\""},{"line_number":2188,"context_line":"                    },"},{"line_number":2189,"context_line":"                    \"samplehost2\": {"},{"line_number":2190,"context_line":"                        \"errors\": 1,"},{"line_number":2191,"context_line":"                        \"instances\": 3,"},{"line_number":2192,"context_line":"                        \"message\": (\"Instance usage audit ran for host \""},{"line_number":2193,"context_line":"                                    \"samplehost2, 3 instances in 0.01 \""},{"line_number":2194,"context_line":"                                    \"seconds.\"),"},{"line_number":2195,"context_line":"                        \"state\": \"DONE\""},{"line_number":2196,"context_line":"                    },"},{"line_number":2197,"context_line":"                },"},{"line_number":2198,"context_line":"                \"num_hosts\": 4,"},{"line_number":2199,"context_line":"                \"num_hosts_done\": 3,"},{"line_number":2200,"context_line":"                \"num_hosts_not_run\": 1,"},{"line_number":2201,"context_line":"                \"num_hosts_running\": 0,"},{"line_number":2202,"context_line":"                \"overall_status\": \"3 of 4 hosts done. 3 errors.\","},{"line_number":2203,"context_line":"                \"period_beginning\": \"2012-06-01 00:00:00\","},{"line_number":2204,"context_line":"                \"period_ending\": \"2012-07-01 00:00:00\","},{"line_number":2205,"context_line":"                \"total_errors\": 3,"},{"line_number":2206,"context_line":"                \"total_instances\": 6}})"},{"line_number":2207,"context_line":""},{"line_number":2208,"context_line":"    def get_os_instance_usage_audit_log_2016_12_10(self, **kw):"},{"line_number":2209,"context_line":"        return (200, FAKE_RESPONSE_HEADERS, {"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_ee2391a5","line":2206,"range":{"start_line":2170,"start_character":0,"end_line":2206,"end_character":39},"updated":"2017-01-03 20:00:34.000000000","message":"Good call using the api-ref sample response json here. I\u0027ll try to do the same going forward. I wonder if we should start to do that programatically as a rule unless an edge case requires manual json in the fakes. Anyhoo, just something to think on. No action required.","commit_id":"ba411956c9fdd576678d47d5f3d2a81c19586d03"}],"novaclient/v2/instance_usage_audit_log.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"09beb0eeaa1fbec4e67371d2af36d6a9e4a0ef13","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                         object_key)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def list(self):"},{"line_number":43,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_67aa9a1b","line":43,"updated":"2016-12-12 16:16:33.000000000","message":"I see an index() method in the controller; is list() really not implemented?","commit_id":"5f94dae6976d2087b69f8e86e4ddd45659800700"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"05746dd986f5a584efb9c47461f982f05c037b63","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                         object_key)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def list(self):"},{"line_number":43,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_7452e2de","line":43,"in_reply_to":"1a6eadb0_67aa9a1b","updated":"2016-12-14 11:24:05.000000000","message":"looks like we don\u0027t want to \u0027list \u0027 as this is only a query?\nor use list to call nova\u0027s index to get all info from all tenant?","commit_id":"5f94dae6976d2087b69f8e86e4ddd45659800700"},{"author":{"_account_id":21479,"name":"int32bit","email":"krystism@gmail.com","username":"int32bit"},"change_message_id":"cd35da4bc203007d4d5903cef86c0583192ead17","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                         object_key)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def list(self):"},{"line_number":43,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_f416f253","line":43,"in_reply_to":"1a6eadb0_7452e2de","updated":"2016-12-14 11:35:22.000000000","message":"We can\u0027t call Nova API\u0027s index() method because it returns an object rather than a list. \nPlease see our discussions above in comments.","commit_id":"5f94dae6976d2087b69f8e86e4ddd45659800700"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1aa17f6946b8338e8523a2470c46d66cc8042493","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    resource_class \u003d InstanceUsageAuditLog"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def get(self, before\u003dNone):"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        Lists usage audits for all servers on the given tenant."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        :param before: Filters the response by the date and time"},{"line_number":31,"context_line":"                       before which to list usage audits."}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_05bf99aa","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":63},"updated":"2016-12-21 09:17:23.000000000","message":"It should be as follows:\n\n        \"\"\"Lists usage audits for all servers on the given tenant.\n\nSee http://docs.openstack.org/developer/hacking/#docstrings\n\n\u003e [H404] Multi line docstrings should start without a leading new line.","commit_id":"5cb1f85a7d6d3cadde27a8a27433753c72b88b12"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"1dbca1bec44aced2d7e34b3d29b7a47fdc1d89c1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    resource_class \u003d InstanceUsageAuditLog"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def get(self, before\u003dNone):"},{"line_number":27,"context_line":"        \"\"\"Lists usage audits for all servers on the given tenant."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        :param before: Filters the response by the date and time"},{"line_number":30,"context_line":"                       before which to list usage audits."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_23b13290","line":27,"range":{"start_line":27,"start_character":46,"end_line":27,"end_character":65},"updated":"2017-01-03 20:00:34.000000000","message":"Is this true? It looks to me like it might be for all tenants, but I could be wrong.","commit_id":"ba411956c9fdd576678d47d5f3d2a81c19586d03"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"307626e13b5db70b740117c4d19de85e3cfed547","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            return self._get(\u0027/os-instance_usage_audit_log\u0027,"},{"line_number":40,"context_line":"                             \u0027instance_usage_audit_logs\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def list(self):"},{"line_number":43,"context_line":"        return self.get()"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_1856215e","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":25},"updated":"2018-01-26 12:29:59.000000000","message":"do we need this at all?","commit_id":"42b979877cde6163321e1f4a4e9ae245f14b1a50"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"24cedd42b78cb258f83de00ad2b9243c226cb03e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            return self._get(\u0027/os-instance_usage_audit_log\u0027,"},{"line_number":40,"context_line":"                             \u0027instance_usage_audit_logs\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def list(self):"},{"line_number":43,"context_line":"        return self.get()"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f93b717_22a38851","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":25},"in_reply_to":"5f93b717_1856215e","updated":"2018-01-28 22:40:20.000000000","message":"No.\nSo removed it.\nDone.","commit_id":"42b979877cde6163321e1f4a4e9ae245f14b1a50"}],"novaclient/v2/shell.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"05746dd986f5a584efb9c47461f982f05c037b63","unresolved":false,"context_lines":[{"line_number":5574,"context_line":""},{"line_number":5575,"context_line":"@utils.arg("},{"line_number":5576,"context_line":"    \u0027--before\u0027,"},{"line_number":5577,"context_line":"    dest\u003d\u0027before\u0027,"},{"line_number":5578,"context_line":"    metavar\u003d\u0027\u003cbefore\u003e\u0027,"},{"line_number":5579,"context_line":"    default\u003dNone,"},{"line_number":5580,"context_line":"    help\u003d_(\"Filters the response by the date and time before which to list \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_b4d71a22","line":5577,"range":{"start_line":5577,"start_character":10,"end_line":5577,"end_character":16},"updated":"2016-12-14 11:24:05.000000000","message":"seems nova accepts tenant as param?\nyou can list all tenants or get from one tenant?","commit_id":"5f94dae6976d2087b69f8e86e4ddd45659800700"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0a7aba99c48e9e3e41c775ce9ad00e6d0aabb3ba","unresolved":false,"context_lines":[{"line_number":5574,"context_line":""},{"line_number":5575,"context_line":"@utils.arg("},{"line_number":5576,"context_line":"    \u0027--before\u0027,"},{"line_number":5577,"context_line":"    dest\u003d\u0027before\u0027,"},{"line_number":5578,"context_line":"    metavar\u003d\u0027\u003cbefore\u003e\u0027,"},{"line_number":5579,"context_line":"    default\u003dNone,"},{"line_number":5580,"context_line":"    help\u003d_(\"Filters the response by the date and time before which to list \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_fee32c03","line":5577,"range":{"start_line":5577,"start_character":10,"end_line":5577,"end_character":16},"in_reply_to":"1a6eadb0_74a7424f","updated":"2016-12-14 12:22:50.000000000","message":"my bad, I watched wrong code... this point is not valid, sorry","commit_id":"5f94dae6976d2087b69f8e86e4ddd45659800700"},{"author":{"_account_id":21479,"name":"int32bit","email":"krystism@gmail.com","username":"int32bit"},"change_message_id":"cd35da4bc203007d4d5903cef86c0583192ead17","unresolved":false,"context_lines":[{"line_number":5574,"context_line":""},{"line_number":5575,"context_line":"@utils.arg("},{"line_number":5576,"context_line":"    \u0027--before\u0027,"},{"line_number":5577,"context_line":"    dest\u003d\u0027before\u0027,"},{"line_number":5578,"context_line":"    metavar\u003d\u0027\u003cbefore\u003e\u0027,"},{"line_number":5579,"context_line":"    default\u003dNone,"},{"line_number":5580,"context_line":"    help\u003d_(\"Filters the response by the date and time before which to list \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_74a7424f","line":5577,"range":{"start_line":5577,"start_character":10,"end_line":5577,"end_character":16},"in_reply_to":"1a6eadb0_b4d71a22","updated":"2016-12-14 11:35:22.000000000","message":"I don\u0027t see that in Nova API: https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/instance_usage_audit_log.py\n\nAlso I don\u0027t find about that in API reference:\nhttp://developer.openstack.org/api-ref/compute/#server-usage-audit-log-os-instance-usage-audit-log\n\nCould you please provide me  a ref about this?","commit_id":"5f94dae6976d2087b69f8e86e4ddd45659800700"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65fe9f04fbd0d829a4bc118611b72219ade8caa5","unresolved":false,"context_lines":[{"line_number":5602,"context_line":"    dest\u003d\u0027before\u0027,"},{"line_number":5603,"context_line":"    metavar\u003d\u0027\u003cbefore\u003e\u0027,"},{"line_number":5604,"context_line":"    default\u003dNone,"},{"line_number":5605,"context_line":"    help\u003d_(\"Filters the response by the date and time before which to list \""},{"line_number":5606,"context_line":"           \"usage audits. The date and time stamp format is as follows: \""},{"line_number":5607,"context_line":"           \"CCYY-MM-DD hh:mm:ss.NNNNNN ex 2015-08-27 09:49:58 or \""},{"line_number":5608,"context_line":"           \"2015-08-27 09:49:58.123456.\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_5764fe20","line":5605,"updated":"2016-12-14 14:59:37.000000000","message":"This should probably have (Admin only) in the end of the help string as this is an admin-only API by default policy.\n\nhttps://github.com/openstack/nova/blob/master/nova/policies/instance_usage_audit_log.py#L28","commit_id":"70446584913a818b6edd4aeb7c1dc177f48d0ccd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e2f255a0c1dab5aeca17ada844b871a76ce29419","unresolved":false,"context_lines":[{"line_number":5609,"context_line":"def do_instance_usage_audit_log(cs, args):"},{"line_number":5610,"context_line":"    \"\"\"List Usage Audits For All Servers on tenant.\"\"\""},{"line_number":5611,"context_line":"    audit_log_resource \u003d cs.instance_usage_audit_log.get(before\u003dargs.before)"},{"line_number":5612,"context_line":"    audit_log \u003d audit_log_resource._info"},{"line_number":5613,"context_line":"    if \u0027hosts_not_run\u0027 in audit_log:"},{"line_number":5614,"context_line":"        audit_log[\u0027hosts_not_run\u0027] \u003d pprint.pformat(audit_log[\u0027hosts_not_run\u0027])"},{"line_number":5615,"context_line":"    utils.print_dict(audit_log)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_b7455218","line":5612,"range":{"start_line":5612,"start_character":35,"end_line":5612,"end_character":40},"updated":"2016-12-14 14:57:44.000000000","message":"We shouldn\u0027t access an internal attribute like this, why can\u0027t we just get this from InstanceUsageAuditLog?","commit_id":"70446584913a818b6edd4aeb7c1dc177f48d0ccd"},{"author":{"_account_id":21479,"name":"int32bit","email":"krystism@gmail.com","username":"int32bit"},"change_message_id":"af2e6b716732f4fa6b66643240aa42683e8c5544","unresolved":false,"context_lines":[{"line_number":5609,"context_line":"def do_instance_usage_audit_log(cs, args):"},{"line_number":5610,"context_line":"    \"\"\"List Usage Audits For All Servers on tenant.\"\"\""},{"line_number":5611,"context_line":"    audit_log_resource \u003d cs.instance_usage_audit_log.get(before\u003dargs.before)"},{"line_number":5612,"context_line":"    audit_log \u003d audit_log_resource._info"},{"line_number":5613,"context_line":"    if \u0027hosts_not_run\u0027 in audit_log:"},{"line_number":5614,"context_line":"        audit_log[\u0027hosts_not_run\u0027] \u003d pprint.pformat(audit_log[\u0027hosts_not_run\u0027])"},{"line_number":5615,"context_line":"    utils.print_dict(audit_log)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_ba48d788","line":5612,"range":{"start_line":5612,"start_character":35,"end_line":5612,"end_character":40},"in_reply_to":"1a6eadb0_b7455218","updated":"2016-12-14 15:26:01.000000000","message":"I learnt from this: \nhttps://github.com/openstack/python-novaclient/blob/master/novaclient/v2/shell.py#L5488\n\nand\n\nhttps://github.com/openstack/python-novaclient/blob/master/novaclient/v2/shell.py#L1425\n\nand so on.","commit_id":"70446584913a818b6edd4aeb7c1dc177f48d0ccd"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"1dbca1bec44aced2d7e34b3d29b7a47fdc1d89c1","unresolved":false,"context_lines":[{"line_number":5678,"context_line":"           \"CCYY-MM-DD hh:mm:ss.NNNNNN ex 2015-08-27 09:49:58 or \""},{"line_number":5679,"context_line":"           \"2015-08-27 09:49:58.123456 (Admin only).\"))"},{"line_number":5680,"context_line":"def do_instance_usage_audit_log(cs, args):"},{"line_number":5681,"context_line":"    \"\"\"List Usage Audits For All Servers on tenant.\"\"\""},{"line_number":5682,"context_line":"    audit_log \u003d cs.instance_usage_audit_log.get(before\u003dargs.before).to_dict()"},{"line_number":5683,"context_line":"    if \u0027hosts_not_run\u0027 in audit_log:"},{"line_number":5684,"context_line":"        audit_log[\u0027hosts_not_run\u0027] \u003d pprint.pformat(audit_log[\u0027hosts_not_run\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_ce416d0d","line":5681,"range":{"start_line":5681,"start_character":7,"end_line":5681,"end_character":51},"updated":"2017-01-03 20:00:34.000000000","message":"this has a strange mix of capitalization","commit_id":"ba411956c9fdd576678d47d5f3d2a81c19586d03"}]}
