)]}'
{"docs/Libvirt.md":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"3ea2a1176a965f5899e55b75f6009a9854a84c22","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"If the owner of the VM is in a different tenant the Agent Cross-Tenant Metric Submission can be setup. See this [documentation](https://github.com/openstack/monasca-agent/blob/master/docs/MonascaMetrics.md#cross-tenant-metric-submission) for details."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"`admin_user` is the username capable of making administrative nova calls."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"`admin_password` password for the nova user."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"`admin_tenant_name` is the project/tenant to POST metrics with the `vm.` prefix."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"`identity_url` is the keystone endpoint for auth."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"`region_name` is used to add the region dimension to metrics."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"`nova_refresh` specifies the number of seconds between calls to the Nova API to refresh the instance cache.  This is helpful for updating VM hostname and pruning deleted instances from the cache.  By default, it is set to 14,400 seconds (four hours).  Set to 0 to refresh every time the Collector runs, or to None to disable regular refreshes entirely (though the instance cache will still be refreshed if a new instance is detected)."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":7,"id":"fa6399be_6bf8697d","line":47,"range":{"start_line":39,"start_character":0,"end_line":47,"end_character":61},"updated":"2016-10-18 21:33:16.000000000","message":"You need to make changes to monasca_setup/detection/plugins/libvirt.py  to have these written into the config.","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d7f80f9b976f1eda86e03b6d55a15b91158ff5ec","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"If the owner of the VM is in a different tenant the Agent Cross-Tenant Metric Submission can be setup. See this [documentation](https://github.com/openstack/monasca-agent/blob/master/docs/MonascaMetrics.md#cross-tenant-metric-submission) for details."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"`admin_user` is the username capable of making administrative nova calls."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"`admin_password` password for the nova user."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"`admin_tenant_name` is the project/tenant to POST metrics with the `vm.` prefix."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"`identity_url` is the keystone endpoint for auth."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"`region_name` is used to add the region dimension to metrics."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"`nova_refresh` specifies the number of seconds between calls to the Nova API to refresh the instance cache.  This is helpful for updating VM hostname and pruning deleted instances from the cache.  By default, it is set to 14,400 seconds (four hours).  Set to 0 to refresh every time the Collector runs, or to None to disable regular refreshes entirely (though the instance cache will still be refreshed if a new instance is detected)."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":7,"id":"da6895a0_ce7d3fe9","line":47,"range":{"start_line":39,"start_character":0,"end_line":47,"end_character":61},"in_reply_to":"fa6399be_6bf8697d","updated":"2016-10-20 22:06:11.000000000","message":"these are not new -- they were just undocumented before this patch...","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"}],"monasca_agent/collector/checks/utils.py":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"3ea2a1176a965f5899e55b75f6009a9854a84c22","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def get_keystone_client(config):"},{"line_number":17,"context_line":"    import keystoneclient.v2_0.client as kc"},{"line_number":18,"context_line":"    kwargs \u003d {"},{"line_number":19,"context_line":"        \u0027username\u0027: config.get(\u0027admin_user\u0027),"},{"line_number":20,"context_line":"        \u0027tenant_name\u0027: config.get(\u0027admin_tenant_name\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_eb2ab9e6","line":17,"range":{"start_line":17,"start_character":26,"end_line":17,"end_character":30},"updated":"2016-10-18 21:33:16.000000000","message":"I think you should use v3. Isn\u0027t v2.0 deprecated or at least close to being deprecated?","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"1931a2c59e6f9483de67a48f0d0f857070ee2602","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def get_keystone_client(config):"},{"line_number":17,"context_line":"    import keystoneclient.v2_0.client as kc"},{"line_number":18,"context_line":"    kwargs \u003d {"},{"line_number":19,"context_line":"        \u0027username\u0027: config.get(\u0027admin_user\u0027),"},{"line_number":20,"context_line":"        \u0027tenant_name\u0027: config.get(\u0027admin_tenant_name\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_a76dd0cd","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":43},"updated":"2016-10-14 15:48:21.000000000","message":"Maybe import keystoneclient from python-monascaclient instead?","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"276c56f0eee021949475f3ad1b484cd899705c14","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def get_keystone_client(config):"},{"line_number":17,"context_line":"    import keystoneclient.v2_0.client as kc"},{"line_number":18,"context_line":"    kwargs \u003d {"},{"line_number":19,"context_line":"        \u0027username\u0027: config.get(\u0027admin_user\u0027),"},{"line_number":20,"context_line":"        \u0027tenant_name\u0027: config.get(\u0027admin_tenant_name\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_896ff7fa","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":43},"in_reply_to":"fa6399be_6d1556e3","updated":"2016-10-14 21:12:59.000000000","message":"Kaiyan -- thanks for the comment.  The reason I\u0027m not using that is not all of the keystone methods are exposed in that class.  Namely tenants.list() called below...","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"f4dc440de069cb58eab1ba66bb82f7bf761d279f","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def get_keystone_client(config):"},{"line_number":17,"context_line":"    import keystoneclient.v2_0.client as kc"},{"line_number":18,"context_line":"    kwargs \u003d {"},{"line_number":19,"context_line":"        \u0027username\u0027: config.get(\u0027admin_user\u0027),"},{"line_number":20,"context_line":"        \u0027tenant_name\u0027: config.get(\u0027admin_tenant_name\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_6d1556e3","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":43},"in_reply_to":"fa6399be_a76dd0cd","updated":"2016-10-14 17:22:11.000000000","message":"Example using \"from monascaclient import ksclient\n\": https://github.com/openstack/monasca-agent/blob/master/monasca_agent/common/keystone.py","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d7f80f9b976f1eda86e03b6d55a15b91158ff5ec","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def get_keystone_client(config):"},{"line_number":17,"context_line":"    import keystoneclient.v2_0.client as kc"},{"line_number":18,"context_line":"    kwargs \u003d {"},{"line_number":19,"context_line":"        \u0027username\u0027: config.get(\u0027admin_user\u0027),"},{"line_number":20,"context_line":"        \u0027tenant_name\u0027: config.get(\u0027admin_tenant_name\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"da6895a0_aedc8b19","line":17,"range":{"start_line":17,"start_character":26,"end_line":17,"end_character":30},"in_reply_to":"fa6399be_eb2ab9e6","updated":"2016-10-20 22:06:11.000000000","message":"switching this to v3 causes other breakages with the nova and neutron calls -- at least in my testing.  how strongly to you feel about making this v3?  it almost seems like we should handle v2 to v3 in a separate patch?","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"1931a2c59e6f9483de67a48f0d0f857070ee2602","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        keystone_client \u003d get_keystone_client(config)"},{"line_number":44,"context_line":"        tenants \u003d keystone_client.tenants.list()"},{"line_number":45,"context_line":"    except Exception as e:"},{"line_number":46,"context_line":"        msg \u003d \"Unable to get tenant list from keystone: {0}\""},{"line_number":47,"context_line":"        log.error(msg.format(e))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    return tenants"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_2762a0d8","line":46,"range":{"start_line":46,"start_character":56,"end_line":46,"end_character":59},"updated":"2016-10-14 15:48:21.000000000","message":"missing .format()","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"f4dc440de069cb58eab1ba66bb82f7bf761d279f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        keystone_client \u003d get_keystone_client(config)"},{"line_number":44,"context_line":"        tenants \u003d keystone_client.tenants.list()"},{"line_number":45,"context_line":"    except Exception as e:"},{"line_number":46,"context_line":"        msg \u003d \"Unable to get tenant list from keystone: {0}\""},{"line_number":47,"context_line":"        log.error(msg.format(e))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    return tenants"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_2de6fe14","line":46,"range":{"start_line":46,"start_character":56,"end_line":46,"end_character":59},"in_reply_to":"fa6399be_2762a0d8","updated":"2016-10-14 17:22:11.000000000","message":"Sorry I didnt see line 47...","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"276c56f0eee021949475f3ad1b484cd899705c14","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        keystone_client \u003d get_keystone_client(config)"},{"line_number":44,"context_line":"        tenants \u003d keystone_client.tenants.list()"},{"line_number":45,"context_line":"    except Exception as e:"},{"line_number":46,"context_line":"        msg \u003d \"Unable to get tenant list from keystone: {0}\""},{"line_number":47,"context_line":"        log.error(msg.format(e))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    return tenants"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_c9756fcb","line":46,"range":{"start_line":46,"start_character":56,"end_line":46,"end_character":59},"in_reply_to":"fa6399be_2de6fe14","updated":"2016-10-14 21:12:59.000000000","message":"cool","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"}],"monasca_agent/collector/checks_d/libvirt.py":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"63312330efea14854ce47b773eab7fc8ae1363e6","unresolved":false,"context_lines":[{"line_number":793,"context_line":"    def _get_keystone_client(self):"},{"line_number":794,"context_line":"        import keystoneclient.v2_0.client as kc"},{"line_number":795,"context_line":"        kwargs \u003d {"},{"line_number":796,"context_line":"            \u0027username\u0027: self.init_config.get(\u0027admin_user\u0027),"},{"line_number":797,"context_line":"            \u0027tenant_name\u0027: self.init_config.get(\u0027admin_tenant_name\u0027),"},{"line_number":798,"context_line":"            \u0027password\u0027: self.init_config.get(\u0027admin_password\u0027),"},{"line_number":799,"context_line":"            \u0027auth_url\u0027: self.init_config.get(\u0027identity_uri\u0027),"},{"line_number":800,"context_line":"            \u0027endpoint_type\u0027: \u0027internalURL\u0027,"},{"line_number":801,"context_line":"            \u0027region_name\u0027: self.init_config.get(\u0027region_name\u0027),"},{"line_number":802,"context_line":"        }"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        return kc.Client(**kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_1b52a9dd","line":801,"range":{"start_line":796,"start_character":0,"end_line":801,"end_character":63},"updated":"2016-09-23 21:45:18.000000000","message":"These seem to be new fields in the libvirt.yaml file. If that is true, I don\u0027t see them documented in the docs or settable by the detection plugin","commit_id":"6c20d25358e9822399692aad065cad5cf477f868"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"e41f3790352184a80313b39f4aa4bb285d32d450","unresolved":false,"context_lines":[{"line_number":793,"context_line":"    def _get_keystone_client(self):"},{"line_number":794,"context_line":"        import keystoneclient.v2_0.client as kc"},{"line_number":795,"context_line":"        kwargs \u003d {"},{"line_number":796,"context_line":"            \u0027username\u0027: self.init_config.get(\u0027admin_user\u0027),"},{"line_number":797,"context_line":"            \u0027tenant_name\u0027: self.init_config.get(\u0027admin_tenant_name\u0027),"},{"line_number":798,"context_line":"            \u0027password\u0027: self.init_config.get(\u0027admin_password\u0027),"},{"line_number":799,"context_line":"            \u0027auth_url\u0027: self.init_config.get(\u0027identity_uri\u0027),"},{"line_number":800,"context_line":"            \u0027endpoint_type\u0027: \u0027internalURL\u0027,"},{"line_number":801,"context_line":"            \u0027region_name\u0027: self.init_config.get(\u0027region_name\u0027),"},{"line_number":802,"context_line":"        }"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        return kc.Client(**kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_fbc5fd3b","line":801,"range":{"start_line":796,"start_character":0,"end_line":801,"end_character":63},"in_reply_to":"5a8bc5a2_1b52a9dd","updated":"2016-09-23 21:52:24.000000000","message":"They aren\u0027t new, but it appears we\u0027ve missed them in the doc.  They are in the sample yaml in the doc but without description.  I\u0027ll update the doc...","commit_id":"6c20d25358e9822399692aad065cad5cf477f868"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"3ea2a1176a965f5899e55b75f6009a9854a84c22","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        #"},{"line_number":153,"context_line":"        tenants \u003d []"},{"line_number":154,"context_line":"        if self.init_config.get(\u0027metadata\u0027) and \u0027tenant_name\u0027 in self.init_config.get(\u0027metadata\u0027):"},{"line_number":155,"context_line":"            tenants \u003d utils.get_tenant_list(self.init_config, self.log)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        for instance in instances:"},{"line_number":158,"context_line":"            instance_ports \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_0b7c4dea","line":155,"range":{"start_line":155,"start_character":28,"end_line":155,"end_character":43},"updated":"2016-10-18 21:33:16.000000000","message":"This creates a keystone client on every collection cycle. The Keystone guys weren\u0027t happy with us hitting Keystone so often. Maybe you should cache it? Of course, then you have to handle the token expiring.","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"d7f80f9b976f1eda86e03b6d55a15b91158ff5ec","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        #"},{"line_number":153,"context_line":"        tenants \u003d []"},{"line_number":154,"context_line":"        if self.init_config.get(\u0027metadata\u0027) and \u0027tenant_name\u0027 in self.init_config.get(\u0027metadata\u0027):"},{"line_number":155,"context_line":"            tenants \u003d utils.get_tenant_list(self.init_config, self.log)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        for instance in instances:"},{"line_number":158,"context_line":"            instance_ports \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"da6895a0_ee592390","line":155,"range":{"start_line":155,"start_character":28,"end_line":155,"end_character":43},"in_reply_to":"fa6399be_0b7c4dea","updated":"2016-10-20 22:06:11.000000000","message":"craig -- like the nova flavor call below -- this only happens when cache gets updated, which by default is every four hours?","commit_id":"127eec35cf1569dd4e493fb26ffe5025749e414f"}]}
