)]}'
{"ceilometer/agent.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"38a4116703356142b8a23e341602b17bb2e580ec","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def create_polling_task(self):"},{"line_number":61,"context_line":"        \"\"\"Create an empty polling task.\"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def is_valid(self, pipeline, pollster):"},{"line_number":64,"context_line":"        \"\"\"Check whether the pipeline and pollster combination are valid.\"\"\""},{"line_number":65,"context_line":"        return pipeline.support_meter(pollster.name)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FesA%3D","line":63,"updated":"2013-09-04 11:20:39.000000000","message":"@staticmethod\n\nNot sure this is useful to have this method at all.","commit_id":"1bd5afafc2e5eb4cdd5a8e0dc04378a7f40e2ab8"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"2e1eac89aa17890e98022fb602c056a04ef5b93b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def create_polling_task(self):"},{"line_number":61,"context_line":"        \"\"\"Create an empty polling task.\"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def is_valid(self, pipeline, pollster):"},{"line_number":64,"context_line":"        \"\"\"Check whether the pipeline and pollster combination are valid.\"\"\""},{"line_number":65,"context_line":"        return pipeline.support_meter(pollster.name)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FaKo%3D","line":63,"in_reply_to":"AAAASn%2F%2FesA%3D","updated":"2013-09-05 02:35:36.000000000","message":"This gives the hardware_manager to add more validity test to decide whether to create polling task or not,\n\ne.g. If no resources has been defined in the pipeline for hardware manager, there is no need to create polling tasks.","commit_id":"1bd5afafc2e5eb4cdd5a8e0dc04378a7f40e2ab8"}],"ceilometer/hardware/__init__.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2013 Intel Corp."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARn%2F%2FvmU%3D","line":1,"updated":"2013-08-22 13:21:29.000000000","message":"I\u0027m happier with an empty file :)","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"}],"ceilometer/hardware/host.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# Exception types"},{"line_number":33,"context_line":"class HardwareInstanceException(Exception):"},{"line_number":34,"context_line":"    def __init__(self, message\u003dNone):"},{"line_number":35,"context_line":"        super(HardwareInstanceException, self).__init__(message)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class InstanceNotReachableException(HardwareInstanceException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F10g%3D","line":35,"updated":"2013-08-21 10:03:12.000000000","message":"Useless, just use pass","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# Exception types"},{"line_number":33,"context_line":"class HardwareInstanceException(Exception):"},{"line_number":34,"context_line":"    def __init__(self, message\u003dNone):"},{"line_number":35,"context_line":"        super(HardwareInstanceException, self).__init__(message)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class InstanceNotReachableException(HardwareInstanceException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2FxPY%3D","line":35,"in_reply_to":"AAAARn%2F%2F10g%3D","updated":"2013-08-22 06:50:33.000000000","message":"Done","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self._mac_address \u003d self._get_mac_of_ip(ip_address)"},{"line_number":64,"context_line":"        except InstanceNotReachableException as exception:"},{"line_number":65,"context_line":"            LOG.warning(\"Instance with IP %s was not reachable\" % ip_address)"},{"line_number":66,"context_line":"            LOG.exception(exception)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            self._name \u003d self._get_name_from_ip(ip_address)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F10Q%3D","line":66,"updated":"2013-08-21 10:03:12.000000000","message":"LOG.exception(\"Instance..\")\nIt does log the exception anyway.","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self._mac_address \u003d self._get_mac_of_ip(ip_address)"},{"line_number":64,"context_line":"        except InstanceNotReachableException as exception:"},{"line_number":65,"context_line":"            LOG.warning(\"Instance with IP %s was not reachable\" % ip_address)"},{"line_number":66,"context_line":"            LOG.exception(exception)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            self._name \u003d self._get_name_from_ip(ip_address)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2FxPQ%3D","line":66,"in_reply_to":"AAAARn%2F%2F10Q%3D","updated":"2013-08-22 06:50:33.000000000","message":"Done","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    PATTERN \u003d r\"(([a-f\\d]{1,2}\\:){5}[a-f\\d]{1,2})\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_mac_of_ip(self, ip):"},{"line_number":78,"context_line":"        if (ip.lower() !\u003d \"localhost\") and not(ip.startswith(\"127.\")):"},{"line_number":79,"context_line":"            if (os.name \u003d\u003d \"posix\"):"},{"line_number":80,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F10E%3D","line":77,"updated":"2013-08-21 10:03:12.000000000","message":"This is a @staticmethod","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    PATTERN \u003d r\"(([a-f\\d]{1,2}\\:){5}[a-f\\d]{1,2})\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_mac_of_ip(self, ip):"},{"line_number":78,"context_line":"        if (ip.lower() !\u003d \"localhost\") and not(ip.startswith(\"127.\")):"},{"line_number":79,"context_line":"            if (os.name \u003d\u003d \"posix\"):"},{"line_number":80,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2FxOY%3D","line":77,"in_reply_to":"AAAARn%2F%2F10E%3D","updated":"2013-08-22 06:50:33.000000000","message":"Done","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            mac \u003d format(uuid.getnode(), \u0027x\u0027).rjust(12, \u00270\u0027)"},{"line_number":101,"context_line":"        return mac"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _get_name_from_ip(self, ip):"},{"line_number":104,"context_line":"        return socket.gethostbyaddr(ip)[0]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _set_configurations(self, opts):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F10A%3D","line":103,"updated":"2013-08-21 10:03:12.000000000","message":"This is a @staticmethod","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            mac \u003d format(uuid.getnode(), \u0027x\u0027).rjust(12, \u00270\u0027)"},{"line_number":101,"context_line":"        return mac"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _get_name_from_ip(self, ip):"},{"line_number":104,"context_line":"        return socket.gethostbyaddr(ip)[0]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _set_configurations(self, opts):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2FxA0%3D","line":103,"in_reply_to":"AAAARn%2F%2F10A%3D","updated":"2013-08-22 06:50:33.000000000","message":"Done","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return socket.gethostbyaddr(ip)[0]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _set_configurations(self, opts):"},{"line_number":107,"context_line":"        if opts.get(\"disabled_pollsters\") is not None:"},{"line_number":108,"context_line":"            self._disabled_pollsters \u003d opts.get(\"disabled_pollsters\")"},{"line_number":109,"context_line":"        else:"},{"line_number":110,"context_line":"            self._disabled_pollsters \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F1z0%3D","line":107,"updated":"2013-08-21 10:03:12.000000000","message":"There\u0027s no such option anymore, I think you referring to the old one.","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return socket.gethostbyaddr(ip)[0]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _set_configurations(self, opts):"},{"line_number":107,"context_line":"        if opts.get(\"disabled_pollsters\") is not None:"},{"line_number":108,"context_line":"            self._disabled_pollsters \u003d opts.get(\"disabled_pollsters\")"},{"line_number":109,"context_line":"        else:"},{"line_number":110,"context_line":"            self._disabled_pollsters \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2FxAw%3D","line":107,"in_reply_to":"AAAARn%2F%2F1z0%3D","updated":"2013-08-22 06:50:33.000000000","message":"Done","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        else:"},{"line_number":121,"context_line":"            self._inspector_configurations \u003d {}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @property"},{"line_number":124,"context_line":"    def ip_address(self):"},{"line_number":125,"context_line":"        return self._ip_address"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F1zs%3D","line":123,"updated":"2013-08-21 10:03:12.000000000","message":"Wah, no, just don\u0027t do that. Use self.ip_address and drop the property altogether.","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        else:"},{"line_number":121,"context_line":"            self._inspector_configurations \u003d {}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @property"},{"line_number":124,"context_line":"    def ip_address(self):"},{"line_number":125,"context_line":"        return self._ip_address"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2FxAo%3D","line":123,"in_reply_to":"AAAARn%2F%2F1zs%3D","updated":"2013-08-22 06:50:33.000000000","message":"Done","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            self.ip_address \u003d socket.gethostbyname(name)"},{"line_number":62,"context_line":"        except Exception as err:"},{"line_number":63,"context_line":"            LOG.exception(\"Host %s not reachable\", name)"},{"line_number":64,"context_line":"            raise InstanceNotReachableException(err)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARn%2F%2FvmI%3D","line":63,"updated":"2013-08-22 13:21:29.000000000","message":"That doesn\u0027t seem likes the right reason :)","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        name \u003d cfg.get(\u0027name\u0027)"},{"line_number":124,"context_line":"        if not name:"},{"line_number":125,"context_line":"            msg \u003d \u0027HardwareHost must have name or ip address\u0027"},{"line_number":126,"context_line":"            raise HardwareInstanceException(msg)"},{"line_number":127,"context_line":"        cfg.pop(\u0027name\u0027)"},{"line_number":128,"context_line":"        return cls(name, **cfg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARn%2F%2FvmE%3D","line":125,"updated":"2013-08-22 13:21:29.000000000","message":"Would be good to have the various exception messages translated with _()","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"}],"ceilometer/hardware/inspector/__init__.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    :param parsed_url: urlparse.SplitResult object for the inspector"},{"line_number":26,"context_line":"    :param namespace: Namespace to use to look for drivers."},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    loaded_driver \u003d driver.DriverManager(namespace, parsed_url.scheme)"},{"line_number":29,"context_line":"    return loaded_driver.driver()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fw9o%3D","line":28,"updated":"2013-08-29 21:32:21.000000000","message":"add invoke_on_load\u003dTrue arg","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"32162f4903bae2c5908ff0d355a54bdcf8983f1f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    :param parsed_url: urlparse.SplitResult object for the inspector"},{"line_number":26,"context_line":"    :param namespace: Namespace to use to look for drivers."},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    loaded_driver \u003d driver.DriverManager(namespace, parsed_url.scheme)"},{"line_number":29,"context_line":"    return loaded_driver.driver()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fv%2FU%3D","line":28,"in_reply_to":"AAAASn%2F%2Fw9o%3D","updated":"2013-08-30 02:39:08.000000000","message":"I copied this from ceilometer/publisher/__init__.py.\n\nI think the reason not using invoke_on_load\u003dTrue is that there is no need to instantiate an inspector if it is not used in the pipeline configuration at all, even though it is registered in setup.cfg","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    :param namespace: Namespace to use to look for drivers."},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    loaded_driver \u003d driver.DriverManager(namespace, parsed_url.scheme)"},{"line_number":29,"context_line":"    return loaded_driver.driver()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fw9Q%3D","line":29,"updated":"2013-08-29 21:32:21.000000000","message":"i\u0027m not sure you need the parentheses:\n\nhttp://stevedore.readthedocs.org/en/latest/managers.html","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"}],"ceilometer/hardware/manager.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":49,"context_line":"     \"10.0.0.2\": {}"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"\u0027\u0027\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\u0027hardware\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F1zM%3D","line":52,"updated":"2013-08-21 10:03:12.000000000","message":"I don\u0027t like introducing a brand new way to configure this. This looks like it should by hooked up in pipeline definition somehow.","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":49,"context_line":"     \"10.0.0.2\": {}"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"\u0027\u0027\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\u0027hardware\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2Fwt8%3D","line":52,"in_reply_to":"AAAARn%2F%2F1eo%3D","updated":"2013-08-22 06:50:33.000000000","message":"ok, will merge the hosts configuration into each pipeline\u0027s definition in pipeline.yaml","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"7405cd157cf23dfe16843f21035a6f3cbfde462d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"     \"10.0.0.2\": {}"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":"\u0027\u0027\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\u0027hardware\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F1eo%3D","line":52,"in_reply_to":"AAAARn%2F%2F1zM%3D","updated":"2013-08-21 11:08:19.000000000","message":"@jd, yes, I think using YAML format is better than json here. I\u0027m thinking of put these into a separate hosts.yaml file instead of pipeline.yaml, since this only used by hardware-agent. \n\nIs that ok to you?","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"827ac1b02d1dd64570ff746e5bbbc1a5786b00dd","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                    except Exception as err:"},{"line_number":74,"context_line":"                        LOG.warning(\u0027Continue after error from %s: %s\u0027,"},{"line_number":75,"context_line":"                                    pollster.name, err)"},{"line_number":76,"context_line":"                        LOG.exception(err)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _get_all_hosts(self):"},{"line_number":79,"context_line":"        hosts \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F1y8%3D","line":76,"updated":"2013-08-21 10:03:12.000000000","message":"LOG.exception(\"Continue …\")","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f0d4921b2c633c8b2d3c05c208839f2cd717c7ec","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                    except Exception as err:"},{"line_number":74,"context_line":"                        LOG.warning(\u0027Continue after error from %s: %s\u0027,"},{"line_number":75,"context_line":"                                    pollster.name, err)"},{"line_number":76,"context_line":"                        LOG.exception(err)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _get_all_hosts(self):"},{"line_number":79,"context_line":"        hosts \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2FwuI%3D","line":76,"in_reply_to":"AAAARn%2F%2F1y8%3D","updated":"2013-08-22 06:50:33.000000000","message":"Done","commit_id":"1a6cb9832f7e86d91cdc42c1bd3edeb020639117"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class PollingTask(agent.PollingTask):"},{"line_number":35,"context_line":"    def poll_and_publish(self):"},{"line_number":36,"context_line":"        with self.publish_context as publisher:"},{"line_number":37,"context_line":"            cache \u003d {}"},{"line_number":38,"context_line":"            for host in self.manager.hosts:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARn%2F%2Fvl4%3D","line":35,"updated":"2013-08-22 13:21:29.000000000","message":"Looks really like the one implemented in central agent, could be nice to refactor now or later.","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def add(self, pollster, pipelines):"},{"line_number":41,"context_line":"        super(PollingTask, self).add(pollster, pipelines)"},{"line_number":42,"context_line":"        # Collect resources from pipeliens for the pollster"},{"line_number":43,"context_line":"        old_urls \u003d self.host_urls.setdefault(pollster.name, set())"},{"line_number":44,"context_line":"        new_urls \u003d set()"},{"line_number":45,"context_line":"        for pipeline in pipelines:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fw5w%3D","line":42,"updated":"2013-08-29 21:32:21.000000000","message":"s/pipeliens/pipelines/","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"32162f4903bae2c5908ff0d355a54bdcf8983f1f","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def add(self, pollster, pipelines):"},{"line_number":41,"context_line":"        super(PollingTask, self).add(pollster, pipelines)"},{"line_number":42,"context_line":"        # Collect resources from pipeliens for the pollster"},{"line_number":43,"context_line":"        old_urls \u003d self.host_urls.setdefault(pollster.name, set())"},{"line_number":44,"context_line":"        new_urls \u003d set()"},{"line_number":45,"context_line":"        for pipeline in pipelines:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fv%2Bw%3D","line":42,"in_reply_to":"AAAASn%2F%2Fw5w%3D","updated":"2013-08-30 02:39:08.000000000","message":"Done","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"38a4116703356142b8a23e341602b17bb2e580ec","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def add(self, pollster, pipelines):"},{"line_number":41,"context_line":"        super(PollingTask, self).add(pollster, pipelines)"},{"line_number":42,"context_line":"        # Collect resources from pipelines for the pollster"},{"line_number":43,"context_line":"        old_urls \u003d self.host_urls.setdefault(pollster.name, set())"},{"line_number":44,"context_line":"        new_urls \u003d set()"},{"line_number":45,"context_line":"        for pipeline in pipelines:"},{"line_number":46,"context_line":"            new_urls.update(map(network_utils.urlsplit, pipeline.resources))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2Fero%3D","line":43,"updated":"2013-09-04 11:20:39.000000000","message":"You should rather use a collections.defaultdict object :)","commit_id":"1bd5afafc2e5eb4cdd5a8e0dc04378a7f40e2ab8"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"2e1eac89aa17890e98022fb602c056a04ef5b93b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def add(self, pollster, pipelines):"},{"line_number":41,"context_line":"        super(PollingTask, self).add(pollster, pipelines)"},{"line_number":42,"context_line":"        # Collect resources from pipelines for the pollster"},{"line_number":43,"context_line":"        old_urls \u003d self.host_urls.setdefault(pollster.name, set())"},{"line_number":44,"context_line":"        new_urls \u003d set()"},{"line_number":45,"context_line":"        for pipeline in pipelines:"},{"line_number":46,"context_line":"            new_urls.update(map(network_utils.urlsplit, pipeline.resources))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FaMo%3D","line":43,"in_reply_to":"AAAASn%2F%2Fero%3D","updated":"2013-09-05 02:35:36.000000000","message":"Done","commit_id":"1bd5afafc2e5eb4cdd5a8e0dc04378a7f40e2ab8"}],"ceilometer/hardware/plugin.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class HardwarePollster(plugin.PollsterBase):"},{"line_number":27,"context_line":"    \"\"\"Base class for plugins that support the polling API on the"},{"line_number":28,"context_line":"    compute node."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    __metaclass__ \u003d abc.ABCMeta"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fw5U%3D","line":28,"updated":"2013-08-29 21:32:21.000000000","message":"is this true or a copy/paste thing? i\u0027m not really sure on the terminology.","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"32162f4903bae2c5908ff0d355a54bdcf8983f1f","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class HardwarePollster(plugin.PollsterBase):"},{"line_number":27,"context_line":"    \"\"\"Base class for plugins that support the polling API on the"},{"line_number":28,"context_line":"    compute node."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    __metaclass__ \u003d abc.ABCMeta"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fv%2Bo%3D","line":28,"in_reply_to":"AAAASn%2F%2Fw5U%3D","updated":"2013-08-30 02:39:08.000000000","message":"Done","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @abc.abstractmethod"},{"line_number":34,"context_line":"    def get_samples(self, manager, cache, host_url):"},{"line_number":35,"context_line":"        \"\"\"Return a sequence of Counter instances from polling the resources."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        :param manager: The service manager invoking the plugin"},{"line_number":38,"context_line":"        :param cache: A dictionary for passing data between plugins"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fw5M%3D","line":35,"updated":"2013-08-29 21:32:21.000000000","message":"s/Counter/Sample/","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"32162f4903bae2c5908ff0d355a54bdcf8983f1f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @abc.abstractmethod"},{"line_number":34,"context_line":"    def get_samples(self, manager, cache, host_url):"},{"line_number":35,"context_line":"        \"\"\"Return a sequence of Counter instances from polling the resources."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        :param manager: The service manager invoking the plugin"},{"line_number":38,"context_line":"        :param cache: A dictionary for passing data between plugins"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fv9k%3D","line":35,"in_reply_to":"AAAASn%2F%2Fw5M%3D","updated":"2013-08-30 02:39:08.000000000","message":"Done","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"35df3fb8fc97fa481ba2aaf8414bc1cf446efd01","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from ceilometer import plugin"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class HardwarePollster(plugin.PollsterBase):"},{"line_number":27,"context_line":"    \"\"\"Base class for plugins that support the polling API.\"\"\""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FfXM%3D","line":25,"updated":"2013-10-15 14:44:04.000000000","message":"recently added six support for metaclass so we should probably support it here:\n\n@six.add_metaclass(abc.ABCMeta)\nclass HardwarePollster(plugin.PollsterBase):\n...","commit_id":"f76a5581cce64ae444f41a7461f49e8cdd5dc203"}],"ceilometer/pipeline.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        {"},{"line_number":334,"context_line":"            \"name\": \"10.11.12.13\","},{"line_number":335,"context_line":"            \"disabled_inspectors\": [\"inspector1\"],"},{"line_number":336,"context_line":"            \"inspector_configurations\": ["},{"line_number":337,"context_line":"                {\"name\": \"insepctor2\","},{"line_number":338,"context_line":"                 \"parameters\": {\"port\": 161}},"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARn%2F%2FvkA%3D","line":335,"updated":"2013-08-22 13:21:29.000000000","message":"This is against what we\u0027re trying to do with the pipeline.","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        {"},{"line_number":334,"context_line":"            \"name\": \"10.11.12.13\","},{"line_number":335,"context_line":"            \"disabled_inspectors\": [\"inspector1\"],"},{"line_number":336,"context_line":"            \"inspector_configurations\": ["},{"line_number":337,"context_line":"                {\"name\": \"insepctor2\","},{"line_number":338,"context_line":"                 \"parameters\": {\"port\": 161}},"},{"line_number":339,"context_line":"                {\"name\": \"inspector3\","}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARn%2F%2Fvjs%3D","line":336,"updated":"2013-08-22 13:21:29.000000000","message":"You should use just \u0027inspector\u0027 with something like:\n\n\"inspectors\": [\n{ \"name\" : \"*\" },\n{ \"name\" : inspector3\", parameters: … },\n]","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        return PublishContext(context, self.pipelines)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def get_hosts(self):"},{"line_number":384,"context_line":"        return self.hosts"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"def setup_pipeline(transformer_manager):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARn%2F%2Fvks%3D","line":384,"updated":"2013-08-22 13:21:29.000000000","message":"Looks useless","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"}],"etc/ceilometer/pipeline.yaml":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d84e0c4fd9e394425a86d23ec599d6dccb482af0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"              port: 161"},{"line_number":34,"context_line":"              securityName: public"},{"line_number":35,"context_line":"        - name: zar"},{"line_number":36,"context_line":"          parameters:"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"AAAARn%2F%2FvkM%3D","line":36,"updated":"2013-08-22 13:21:29.000000000","message":"This file is the default one that is provided by ceilometer, so it should be correct. I don\u0027t think there\u0027s bar and zar inspectors.","commit_id":"2e96da6d63b66e492fbe496cf0a37c3dde3b614c"}],"setup.cfg":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    instance_flavor \u003d ceilometer.compute.pollsters.instance:InstanceFlavorPollster"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"ceilometer.poll.hardware \u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"ceilometer.poll.central \u003d"},{"line_number":71,"context_line":"    ip.floating \u003d ceilometer.network.floatingip:FloatingIPPollster"},{"line_number":72,"context_line":"    image \u003d ceilometer.image.glance:ImagePollster"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"AAAASn%2F%2Fw4I%3D","line":69,"updated":"2013-08-29 21:32:21.000000000","message":"does this need to be in this patch? just sort of odd seeing them blank.","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"32162f4903bae2c5908ff0d355a54bdcf8983f1f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    instance_flavor \u003d ceilometer.compute.pollsters.instance:InstanceFlavorPollster"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"ceilometer.poll.hardware \u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"ceilometer.poll.central \u003d"},{"line_number":71,"context_line":"    ip.floating \u003d ceilometer.network.floatingip:FloatingIPPollster"},{"line_number":72,"context_line":"    image \u003d ceilometer.image.glance:ImagePollster"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"AAAASn%2F%2Fv6Q%3D","line":69,"in_reply_to":"AAAASn%2F%2Fw4I%3D","updated":"2013-08-30 02:39:08.000000000","message":"I added an empty namespace here because it is used by hardware agent in this patch. The other patch https://review.openstack.org/43074 will fill it.","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"}],"tests/hardware/test_manager.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":31,"context_line":"def test_load_plugins():"},{"line_number":32,"context_line":"    mgr \u003d manager.AgentManager()"},{"line_number":33,"context_line":"    assert list(mgr.pollster_manager), \u0027Failed to load any plugins\u0027"},{"line_number":34,"context_line":"    return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fw2U%3D","line":31,"updated":"2013-08-29 21:32:21.000000000","message":"i\u0027m not sure this ever gets triggered since it\u0027s not under testtools related class.","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"32162f4903bae2c5908ff0d355a54bdcf8983f1f","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"@mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":31,"context_line":"def test_load_plugins():"},{"line_number":32,"context_line":"    mgr \u003d manager.AgentManager()"},{"line_number":33,"context_line":"    assert list(mgr.pollster_manager), \u0027Failed to load any plugins\u0027"},{"line_number":34,"context_line":"    return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fv7U%3D","line":31,"in_reply_to":"AAAASn%2F%2Fw2U%3D","updated":"2013-08-30 02:39:08.000000000","message":"You\u0027re right. I\u0027ll move this test to patch https://review.openstack.org/43074 where there are pollsters loaded.","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"91c559686035f832937104fa882960143c196469","unresolved":false,"context_lines":[{"line_number":30,"context_line":"@mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":31,"context_line":"def test_load_plugins():"},{"line_number":32,"context_line":"    mgr \u003d manager.AgentManager()"},{"line_number":33,"context_line":"    assert list(mgr.pollster_manager), \u0027Failed to load any plugins\u0027"},{"line_number":34,"context_line":"    return"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2Fw2Y%3D","line":33,"updated":"2013-08-29 21:32:21.000000000","message":"self.assertEquals?","commit_id":"195acd606fbe269c598f2a56c2ccdcbd72152d2a"}]}
