)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"9ed3bb291a8aa35f6ed22c25ac4c1c96817a15c3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add IPMI raw data fetching in IPMI agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New pollster to get IPMI sensor data:Current, Temperature, Voltage and Fan"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I4e21711cfdb050488dd2ddda1ca80504e63eafaa"},{"line_number":12,"context_line":"Signed-off-by: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa98f980_fa952133","line":10,"updated":"2014-09-04 11:59:32.000000000","message":"Please add the following line so the launchpad bp can tract this patch:\n\nImplements bp ipmi-support","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"1bcfb65d289b174fcb021973320d3f98e518fe75","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New pollster to get IPMI sensor data and Intel Node Manager data. IPMI sensor"},{"line_number":10,"context_line":"data includes main types, like Current, Temperature, Voltage and Fan. Node"},{"line_number":11,"context_line":"manager data includes system power and thermal information."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements bp ipmi-support"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"fa98f980_d7fcabb7","line":11,"updated":"2014-09-13 07:54:40.000000000","message":"Please add the following new line in the commit message to inform the openstack-manual of the need to change the doc about deployment/architecture as Eglynn mentioned:\n\nDocImpact: Add new ipmi agent and pollsters","commit_id":"c32b82fba62e133f8b5aa7d381e0cae6e53fa0f0"}],"ceilometer/hardware/notifications/ipmi.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"71a5b3fa97e2927cec5b98633f94620bf1c43df5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def _validate_reading(data):"},{"line_number":48,"context_line":"    \"\"\"Some sensors read \"Disabled\".\"\"\""},{"line_number":49,"context_line":"    return data !\u003d \u0027Disabled\u0027"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_dba51b48","line":47,"updated":"2014-09-10 11:27:13.000000000","message":"Given how this is used by another module, you mark it public by removing the initial \u0027_\u0027.","commit_id":"72a951fd9799b0f92f2ea5973fb0f1be17bda0f5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"71a5b3fa97e2927cec5b98633f94620bf1c43df5","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    return data !\u003d \u0027Disabled\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def _transform_id(data):"},{"line_number":53,"context_line":"    return data.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_fb63bf17","line":52,"updated":"2014-09-10 11:27:13.000000000","message":"Ditto","commit_id":"72a951fd9799b0f92f2ea5973fb0f1be17bda0f5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"71a5b3fa97e2927cec5b98633f94620bf1c43df5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    return data.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def _parse_reading(data):"},{"line_number":57,"context_line":"    try:"},{"line_number":58,"context_line":"        volume, unit \u003d data.split(\u0027 \u0027, 1)"},{"line_number":59,"context_line":"        unit \u003d unit.rsplit(\u0027 \u0027, 1)[-1]"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_1b67a326","line":56,"updated":"2014-09-10 11:27:13.000000000","message":"Ditto","commit_id":"72a951fd9799b0f92f2ea5973fb0f1be17bda0f5"}],"ceilometer/ipmi/nodemanager/node_manager.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f025be4ba1f52d311a3c2b5e8ad511cbb98a3259","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return 0"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _get_sensor_type(sensor_data_dict):"},{"line_number":39,"context_line":"    # Have only three sensor type name IDs: \u0027Sensor Type (Analog)\u0027"},{"line_number":40,"context_line":"    # \u0027Sensor Type (Discrete)\u0027 and \u0027Sensor Type (Threshold)\u0027"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_4f7f4566","line":38,"updated":"2014-09-04 15:20:03.000000000","message":"You should leave a comment with a note that this entire chunk is borrowed from Ironic so we have a marker for future code cleanup and library creation.","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8250ceeefea565d988c73070e199eaaad287c4aa","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        return 0"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _get_sensor_type(sensor_data_dict):"},{"line_number":39,"context_line":"    # Have only three sensor type name IDs: \u0027Sensor Type (Analog)\u0027"},{"line_number":40,"context_line":"    # \u0027Sensor Type (Discrete)\u0027 and \u0027Sensor Type (Threshold)\u0027"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_fd6fc5f9","line":38,"in_reply_to":"fa98f980_4f7f4566","updated":"2014-09-05 01:51:02.000000000","message":"I\u0027ll add it. So does the code borrowed from ipmi.py in ceilometer","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":4992,"name":"malini-k-bhandaru","email":"malini.k.bhandaru@intel.com","username":"malini-k-bhandaru"},"change_message_id":"b6095676a2b86894996c76c1ad42e32afe54c4ff","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # get nothing, no valid sensor data"},{"line_number":91,"context_line":"    if not sensors_data_dict:"},{"line_number":92,"context_line":"        raise nmexcept.NodeManagerException(_(\"parse IPMI sensor data failed,\""},{"line_number":93,"context_line":"                                              \"get noghting with input\"))"},{"line_number":94,"context_line":"    return sensors_data_dict"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_39f077c8","line":92,"updated":"2014-09-05 08:31:25.000000000","message":"grammar and spelling -- ignore if this is something that will be refactored later because common to ironic.","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f025be4ba1f52d311a3c2b5e8ad511cbb98a3259","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                return"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            self.nm_support \u003d self.check_node_manager()"},{"line_number":126,"context_line":"            if not self.nm_support:"},{"line_number":127,"context_line":"                return"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def execute_ipmi_cmd(template\u003d{}, bridge\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_149c740e","line":126,"updated":"2014-09-04 15:20:03.000000000","message":"This conditional and the following return is redundant: we\u0027re at the end of the method anyway, presumably all that you really care about here is making sure that ipmi_support and nm_support are set and there isn\u0027t a check for node manager when we already know that IPMI is not available.","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8250ceeefea565d988c73070e199eaaad287c4aa","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                return"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            self.nm_support \u003d self.check_node_manager()"},{"line_number":126,"context_line":"            if not self.nm_support:"},{"line_number":127,"context_line":"                return"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def execute_ipmi_cmd(template\u003d{}, bridge\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_6fccf889","line":126,"in_reply_to":"fa98f980_149c740e","updated":"2014-09-05 01:51:02.000000000","message":"I put it here in case of any other initialization behind in future. Let\u0027s remove it for now","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"}],"ceilometer/ipmi/pollsters/data.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f025be4ba1f52d311a3c2b5e8ad511cbb98a3259","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class TemperaturePollster(_Base):"},{"line_number":82,"context_line":"    def __init__(self):"},{"line_number":83,"context_line":"        self._desc \u003d \"System current temperature\""},{"line_number":84,"context_line":"        self._name \u003d \"hardware.ipmi.node.temperature\""},{"line_number":85,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":86,"context_line":"        self._unit \u003d \"C\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_cf4fb532","line":83,"updated":"2014-09-04 15:20:03.000000000","message":"Do we want literal spaces in resource ids? I think it presents a usability problem when making queries but don\u0027t care too much. Is there a de facto standard (@eoghan)?","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8250ceeefea565d988c73070e199eaaad287c4aa","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class TemperaturePollster(_Base):"},{"line_number":82,"context_line":"    def __init__(self):"},{"line_number":83,"context_line":"        self._desc \u003d \"System current temperature\""},{"line_number":84,"context_line":"        self._name \u003d \"hardware.ipmi.node.temperature\""},{"line_number":85,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":86,"context_line":"        self._unit \u003d \"C\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_6f24f80c","line":83,"in_reply_to":"fa98f980_cf4fb532","updated":"2014-09-05 01:51:02.000000000","message":"Check meters again, there is no space in resource id. So change it to \"system_temperature_current\"","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":32,"context_line":"class _Base(plugin.PollsterBase):"},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        self._data \u003d {\u0027platform.cur_val\u0027: 0,"},{"line_number":35,"context_line":"                      \u0027platform.ave_val\u0027: 0,"},{"line_number":36,"context_line":"                      \u0027platform.max_val\u0027: 0,"},{"line_number":37,"context_line":"                      \u0027platform.min_val\u0027: 0}"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_7e92814c","line":35,"updated":"2014-09-09 11:41:30.000000000","message":"\"ave\" \u003d\u003d \"average\"?\n\nIf so, a more natural abbreviation would be \"avg\".","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":32,"context_line":"class _Base(plugin.PollsterBase):"},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        self._data \u003d {\u0027platform.cur_val\u0027: 0,"},{"line_number":35,"context_line":"                      \u0027platform.ave_val\u0027: 0,"},{"line_number":36,"context_line":"                      \u0027platform.max_val\u0027: 0,"},{"line_number":37,"context_line":"                      \u0027platform.min_val\u0027: 0}"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_44b96a14","line":35,"in_reply_to":"fa98f980_7e92814c","updated":"2014-09-09 14:10:34.000000000","message":"ok. with following change, we can remove _data","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @property"},{"line_number":40,"context_line":"    def default_discovery(self):"},{"line_number":41,"context_line":"        # get resources from agent-default discovery"},{"line_number":42,"context_line":"        return None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_9e82c5fe","line":41,"updated":"2014-09-09 11:41:30.000000000","message":"This comment looks like it was copied from the compute agent\u0027s pollsters:\n\n  https://review.openstack.org/#/c/117728/9/ceilometer/compute/plugin.py\n\nbut it doesn\u0027t make sense in this context, as there is not agent-default discovery in the current case.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @property"},{"line_number":40,"context_line":"    def default_discovery(self):"},{"line_number":41,"context_line":"        # get resources from agent-default discovery"},{"line_number":42,"context_line":"        return None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_04bf62fd","line":41,"in_reply_to":"fa98f980_9e82c5fe","updated":"2014-09-09 14:10:34.000000000","message":"Will remove this comment.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def read_data(self):"},{"line_number":46,"context_line":"        \"\"\"Return data sample for IPMI.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        pass"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":51,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_fe391140","line":48,"updated":"2014-09-09 11:41:30.000000000","message":"I don\u0027t think you need an explicit pass in an abstract method with a docstring.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def read_data(self):"},{"line_number":46,"context_line":"        \"\"\"Return data sample for IPMI.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        pass"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":51,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_4415eae3","line":48,"in_reply_to":"fa98f980_fe391140","updated":"2014-09-09 14:10:34.000000000","message":"It was used to pass pep8, but seems ok without it now.\nRemove it.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        stats \u003d self.read_data()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # return nothing if no data meaning no node manager support"},{"line_number":55,"context_line":"        if stats \u003d\u003d {}:"},{"line_number":56,"context_line":"            return []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Can add more samples besides current in future"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_7e15219a","line":55,"updated":"2014-09-09 11:41:30.000000000","message":"If not stats?","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        stats \u003d self.read_data()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # return nothing if no data meaning no node manager support"},{"line_number":55,"context_line":"        if stats \u003d\u003d {}:"},{"line_number":56,"context_line":"            return []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Can add more samples besides current in future"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_c49c7a60","line":55,"in_reply_to":"fa98f980_7e15219a","updated":"2014-09-09 14:10:34.000000000","message":"If not stats, mean we have valid data for handling. Just go to next step. With following change, we can remove this check.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        resource_id \u003d \u0027%(host)s-%(data-desc)s\u0027 % {"},{"line_number":63,"context_line":"            \u0027host\u0027: CONF.host,"},{"line_number":64,"context_line":"            \u0027data-desc\u0027: self._desc"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        data_sample \u003d sample.Sample("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_1e9335fb","line":64,"updated":"2014-09-09 11:41:30.000000000","message":"Hmmm, I\u0027m sure this makes sense to create a resource-id combined from the host and a description such as system_temperature_current.\n\nIf the data pertains to the entire host, then surely the resource should be identified as the host itself. The meter_name already tells us that the value related to the system-wide temperature.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        resource_id \u003d \u0027%(host)s-%(data-desc)s\u0027 % {"},{"line_number":63,"context_line":"            \u0027host\u0027: CONF.host,"},{"line_number":64,"context_line":"            \u0027data-desc\u0027: self._desc"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        data_sample \u003d sample.Sample("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_b1441775","line":64,"in_reply_to":"fa98f980_1e9335fb","updated":"2014-09-09 14:10:34.000000000","message":"The result is {\"Current_value\": [\u002723\u0027, \u002700\u0027],\n                \"Average_value\": [\u002722\u0027, \u002700\u0027],\n                \"Maximum_value\": [\u002724\u0027, \u002700\u0027],\n                \"Minimum_value\": [\u002721\u0027, \u002700\u0027]}\n\nSo I will sample all of those data instead of \"Current_value\" only. so the samples looks like:\n\nname                                resource_id\n\nhw.ipmi.node.temperature  XXX-system_temperature-current\n\nhw.ipmi.node.temperature  XXX-system_temperature-average\n.......\n\nIs it reasonable?","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self._name \u003d \"hardware.ipmi.node.temperature\""},{"line_number":85,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":86,"context_line":"        self._unit \u003d \"C\""},{"line_number":87,"context_line":"        super(TemperaturePollster, self).__init__()"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def read_data(self):"},{"line_number":90,"context_line":"        return self.nodemanager.read_temperature_all()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_fed591b7","line":87,"updated":"2014-09-09 11:41:30.000000000","message":"Note that _desc, _name, _type, and _unit could all be class-level variables, i.e. no need to be instance-level.\n\ni.e. more conventional to have:\n\n  class _Base(plugin.PollsterBase):\n      ...\n      def get_samples(self, manager, cache, resources):\n          ...\n          sample \u003d sample.Sample(\n            name\u003dself.NAME,\n            type \u003d self.TYPE,\n            ....\n\n  class TemperaturePollster(_Base):\n      DESC \u003d \"system_temperature_current\"\n      NAME \u003d \"hardware.ipmi.node.temperature\"\n      TYPE \u003d sample.TYPE_GAUGE\n      UNIT \u003d \"C\"\n      ....","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self._name \u003d \"hardware.ipmi.node.temperature\""},{"line_number":85,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":86,"context_line":"        self._unit \u003d \"C\""},{"line_number":87,"context_line":"        super(TemperaturePollster, self).__init__()"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def read_data(self):"},{"line_number":90,"context_line":"        return self.nodemanager.read_temperature_all()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_5f2697bb","line":87,"in_reply_to":"fa98f980_fed591b7","updated":"2014-09-09 14:10:34.000000000","message":"Good point. Will change","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self._desc \u003d \"system_power_current\""},{"line_number":97,"context_line":"        self._name \u003d \"hardware.ipmi.node.power\""},{"line_number":98,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":99,"context_line":"        self._unit \u003d \"W\""},{"line_number":100,"context_line":"        super(PowerPollster, self).__init__()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def read_data(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_9eb64589","line":99,"updated":"2014-09-09 11:41:30.000000000","message":"Similarly.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"}],"ceilometer/ipmi/pollsters/node.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c8fec2772bb0f7d133f9f0e07052b8558cabeb41","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            if flag !\u003d \u0027value\u0027:"},{"line_number":50,"context_line":"                continue"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"            # Recrod if it\u0027s {Current|Maximum|Average|Minimum}_value"},{"line_number":53,"context_line":"            data \u003d node_manager._hex(value)"},{"line_number":54,"context_line":"            resource_id \u003d \u0027%(host)s-%(data-desc)s-%(data_type)s\u0027 % {"},{"line_number":55,"context_line":"                \u0027host\u0027: CONF.host,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_0ad688c3","line":52,"updated":"2014-09-09 14:45:59.000000000","message":"s/Recrod/Record/\n\nI don\u0027t think it\u0027s a good idea to encode the {Current|Maximum|Average|Minimum} in the resource ID, as if these values related to *separate* resources.\n\n(As opposed to different ways of aggregating the same measurement for the *same* resource - in this case, the same host). \n\nWhat periods do the average, minimum, maximum value relate to? e.g. is it:\n* the average value since we last polled, or the average value since some baseline in time?\n* the average across all the individual sensors on this host?","commit_id":"6f3d7b18245df0a7f4e9e5fd4e61857b03bab671"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"ebb1dbe8c7870e295b4c2e02f3584135d1606a96","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            if flag !\u003d \u0027value\u0027:"},{"line_number":50,"context_line":"                continue"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"            # Recrod if it\u0027s {Current|Maximum|Average|Minimum}_value"},{"line_number":53,"context_line":"            data \u003d node_manager._hex(value)"},{"line_number":54,"context_line":"            resource_id \u003d \u0027%(host)s-%(data-desc)s-%(data_type)s\u0027 % {"},{"line_number":55,"context_line":"                \u0027host\u0027: CONF.host,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_82e8917d","line":52,"in_reply_to":"fa98f980_0ad688c3","updated":"2014-09-09 23:21:31.000000000","message":"\u003eI don\u0027t think it\u0027s a good idea to encode the \u003e{Current|Maximum|Average|Minimum} in the resource ID, as if \u003ethese values related to *separate* resources.\n\nDo we have any ways to record all the current/max/min/avg value? I believe these statistic data are valuable for high level usage. If we prefer same resource_id, should we use different meter name, like hardware.ipmi.node.power.{current|average|..} ?\n\n\u003e What periods do the average, minimum, maximum value relate to?\n\nIt\u0027s configurable via Node Manager. You can use one IPMI command to specify the this period, then read via IPMI would return the data for this period.","commit_id":"6f3d7b18245df0a7f4e9e5fd4e61857b03bab671"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"fee8efd12cd143160e500bb7d34cf12ee5288d3e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            if flag !\u003d \u0027value\u0027:"},{"line_number":50,"context_line":"                continue"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"            # Recrod if it\u0027s {Current|Maximum|Average|Minimum}_value"},{"line_number":53,"context_line":"            data \u003d node_manager._hex(value)"},{"line_number":54,"context_line":"            resource_id \u003d \u0027%(host)s-%(data-desc)s-%(data_type)s\u0027 % {"},{"line_number":55,"context_line":"                \u0027host\u0027: CONF.host,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_938625da","line":52,"in_reply_to":"fa98f980_82e8917d","updated":"2014-09-10 02:09:18.000000000","message":"Eoghan,\nWill use Current value only, just like original way.\nThanks,","commit_id":"6f3d7b18245df0a7f4e9e5fd4e61857b03bab671"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"897603ab49b56332d870fe05c2cd5c2664595751","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            data \u003d node_manager._hex(stats[\"Current_value\"])"},{"line_number":49,"context_line":"            resource_id \u003d \u0027%(host)s-%(data-desc)s\u0027 % {"},{"line_number":50,"context_line":"                \u0027host\u0027: CONF.host,"},{"line_number":51,"context_line":"                \u0027data-desc\u0027: self.DESC"},{"line_number":52,"context_line":"            }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            yield sample.Sample("}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_35526867","line":51,"updated":"2014-09-12 12:11:48.000000000","message":"I don\u0027t understand why the data description needs to be encoded in the resource_id.\n\nIf we have meter called \"hardware.ipmi.node.temperature\" and \"hardware.ipmi.node.power\", then *both* can be associated with the *same* resource, in this case the host.\n\ni.e. there is no need IMO to introduce a distinction between the host from a temperature and power perspective, as this distinction is already provided by the meter names.\n\nSo why not just use the CONF.host as the resource_id?","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"f25e8d30cef0be540d5087bb88edec21b65aff0e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            data \u003d node_manager._hex(stats[\"Current_value\"])"},{"line_number":49,"context_line":"            resource_id \u003d \u0027%(host)s-%(data-desc)s\u0027 % {"},{"line_number":50,"context_line":"                \u0027host\u0027: CONF.host,"},{"line_number":51,"context_line":"                \u0027data-desc\u0027: self.DESC"},{"line_number":52,"context_line":"            }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            yield sample.Sample("}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_a0f4545b","line":51,"in_reply_to":"fa98f980_35526867","updated":"2014-09-12 13:21:21.000000000","message":"reasonable since we have only current value recorded. Will change it","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"}],"ceilometer/ipmi/pollsters/sensor.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @property"},{"line_number":44,"context_line":"    def default_discovery(self):"},{"line_number":45,"context_line":"        # get resources from agent-default discovery"},{"line_number":46,"context_line":"        return None"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    \"\"\" Following 4 functions are copied from ipmi notification handling code."}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_fe7111df","line":45,"updated":"2014-09-09 11:41:30.000000000","message":"Please remove this comment, as there is no agent-default discovery in this case.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @property"},{"line_number":44,"context_line":"    def default_discovery(self):"},{"line_number":45,"context_line":"        # get resources from agent-default discovery"},{"line_number":46,"context_line":"        return None"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    \"\"\" Following 4 functions are copied from ipmi notification handling code."}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_f43e8d28","line":45,"in_reply_to":"fa98f980_fe7111df","updated":"2014-09-09 14:10:34.000000000","message":"ok","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # get resources from agent-default discovery"},{"line_number":46,"context_line":"        return None"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    \"\"\" Following 4 functions are copied from ipmi notification handling code."},{"line_number":49,"context_line":"    Need code clean and sharing in future."},{"line_number":50,"context_line":"    Check ceilometer/hardware/notifications/ipmi.py"},{"line_number":51,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_392f338a","line":48,"updated":"2014-09-09 11:41:30.000000000","message":"Did you mean the following *3* functions?\n\n(i.e. _invalid_reading, _transform_id, _parse_reading)\n\nAlso, the sense of the original _validate_reading function has been reversed. That will make sharing the code unnecessarily awkward.\n\nIndeed, I can\u0027t see why the code couldn\u0027t be shared right now, given that ceilometer/hardware/notifications/ipmi.py is under our control.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # get resources from agent-default discovery"},{"line_number":46,"context_line":"        return None"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    \"\"\" Following 4 functions are copied from ipmi notification handling code."},{"line_number":49,"context_line":"    Need code clean and sharing in future."},{"line_number":50,"context_line":"    Check ceilometer/hardware/notifications/ipmi.py"},{"line_number":51,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_54a83977","line":48,"in_reply_to":"fa98f980_392f338a","updated":"2014-09-09 14:10:34.000000000","message":"restore original _validate_reading for easy sharing.\n_get_sensor_type is copied from _get_sample.\n\nBTW, do you have any idea of share code of some member functions between different class? Create a new class just for parsing?","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"470e191bf77e242bac2b643b95cbed1a3ad33d22","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class TemperatureSensorPollster(SensorPollster):"},{"line_number":113,"context_line":"    metric \u003d \u0027Temperature\u0027"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"class CurrentSensorPollster(SensorPollster):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_de244dc8","line":113,"updated":"2014-09-09 11:41:30.000000000","message":"Class-level variable are usually capitalized, e.g. METRIC.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e3a06c687625165c71fde5f49e335df934d9de76","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class TemperatureSensorPollster(SensorPollster):"},{"line_number":113,"context_line":"    metric \u003d \u0027Temperature\u0027"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"class CurrentSensorPollster(SensorPollster):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_74b61dde","line":113,"in_reply_to":"fa98f980_de244dc8","updated":"2014-09-09 14:10:34.000000000","message":"ok.","commit_id":"29ba2218445fb88da27d9d666c62a2275d342147"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"436d3922307c5babbd8cf3aa6b3589b1f8ba42af","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        for sensor_data in sensor_type_data:"},{"line_number":86,"context_line":"            try:"},{"line_number":87,"context_line":"                sensor_reading \u003d sensor_data[\u0027Sensor Reading\u0027]"},{"line_number":88,"context_line":"            except KeyError:"},{"line_number":89,"context_line":"                raise InvalidSensorData(\"missing \u0027Sensor Reading\u0027\")"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_2cac33a0","line":87,"updated":"2014-09-10 08:02:55.000000000","message":"Are we really need to stop collect samples from the whole sensor_type_data, if one sensor_data doesn\u0027t have \u0027Sensor Reading\u0027 key?","commit_id":"6f3d7b18245df0a7f4e9e5fd4e61857b03bab671"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d5eee58a28d1971b8d089209d604a93b2aab7b0a","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        for sensor_data in sensor_type_data:"},{"line_number":86,"context_line":"            try:"},{"line_number":87,"context_line":"                sensor_reading \u003d sensor_data[\u0027Sensor Reading\u0027]"},{"line_number":88,"context_line":"            except KeyError:"},{"line_number":89,"context_line":"                raise InvalidSensorData(\"missing \u0027Sensor Reading\u0027\")"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_f504ae7f","line":87,"in_reply_to":"fa98f980_2cac33a0","updated":"2014-09-10 09:58:51.000000000","message":"Ilya,\nThanks for review.\n\nThe lower level engine, who parse the raw ipmitool output, would ignore sensor data without \u0027Sensor Reading\u0027. \nSimilar as when Ironic send notification. \n\nSo if we have data without \u0027Sensor Reading\u0027, something goes wrong. It\u0027s the same logic currently used in ceilometer/hardware/notifications/ipmi.py","commit_id":"6f3d7b18245df0a7f4e9e5fd4e61857b03bab671"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"71a5b3fa97e2927cec5b98633f94620bf1c43df5","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            except KeyError:"},{"line_number":60,"context_line":"                raise InvalidSensorData(\"missing \u0027Sensor Reading\u0027\")"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            if not parser._validate_reading(sensor_reading):"},{"line_number":63,"context_line":"                continue"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            volume, unit \u003d parser._parse_reading(sensor_reading)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_5ba3eb4e","line":62,"updated":"2014-09-10 11:27:13.000000000","message":"If you\u0027re going to use this methods from the other module you should mark them as public by removing the initial \u0027_\u0027 in your refactoring.","commit_id":"72a951fd9799b0f92f2ea5973fb0f1be17bda0f5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"71a5b3fa97e2927cec5b98633f94620bf1c43df5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            if not parser._validate_reading(sensor_reading):"},{"line_number":63,"context_line":"                continue"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            volume, unit \u003d parser._parse_reading(sensor_reading)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            resource_id \u003d \u0027%(host)s-%(sensor-id)s\u0027 % {"},{"line_number":68,"context_line":"                \u0027host\u0027: CONF.host,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_7b898fc9","line":65,"updated":"2014-09-10 11:27:13.000000000","message":"Ditto","commit_id":"72a951fd9799b0f92f2ea5973fb0f1be17bda0f5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"71a5b3fa97e2927cec5b98633f94620bf1c43df5","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            resource_id \u003d \u0027%(host)s-%(sensor-id)s\u0027 % {"},{"line_number":68,"context_line":"                \u0027host\u0027: CONF.host,"},{"line_number":69,"context_line":"                \u0027sensor-id\u0027: parser._transform_id(sensor_data[\u0027Sensor ID\u0027])"},{"line_number":70,"context_line":"            }"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            yield sample.Sample("}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_bb93f7f8","line":69,"updated":"2014-09-10 11:27:13.000000000","message":"Ditto","commit_id":"72a951fd9799b0f92f2ea5973fb0f1be17bda0f5"}],"ceilometer/tests/ipmi/pollsters/base.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"897603ab49b56332d870fe05c2cd5c2664595751","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        for sample in samples:"},{"line_number":69,"context_line":"            if expected_vol \u003d\u003d sample.volume:"},{"line_number":70,"context_line":"                found \u003d True"},{"line_number":71,"context_line":"        self.assertTrue(found)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_f584600c","line":71,"updated":"2014-09-12 12:11:48.000000000","message":"I think lines 67-71 can be simplified as:\n\n   self.assertTrue(any(s.volume \u003d\u003d expected_vol for s in samples))","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"f25e8d30cef0be540d5087bb88edec21b65aff0e","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        for sample in samples:"},{"line_number":69,"context_line":"            if expected_vol \u003d\u003d sample.volume:"},{"line_number":70,"context_line":"                found \u003d True"},{"line_number":71,"context_line":"        self.assertTrue(found)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_e0a1fc46","line":71,"in_reply_to":"fa98f980_f584600c","updated":"2014-09-12 13:21:21.000000000","message":"Nice!","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"}],"ceilometer/tests/ipmi/pollsters/ipmi_data.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f025be4ba1f52d311a3c2b5e8ad511cbb98a3259","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This data is a sample of the data expected from the node manager driver in IPMI"},{"line_number":19,"context_line":"support"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"TEMPERATURE_SENSOR_DATA \u003d {"},{"line_number":23,"context_line":"    \u0027Temperature\u0027: {"},{"line_number":24,"context_line":"        \u0027DIMM GH VR Temp (0x3b)\u0027: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_cf009504","line":21,"updated":"2014-09-04 15:20:03.000000000","message":"Since this data is a copy of the data already in ceilometer/tests/hardware/notifications/ipmi_test_data.py how about just using that directly rather than duplicating? If necessary the file could be moved to a more general location for more sensible reuse.","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8250ceeefea565d988c73070e199eaaad287c4aa","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This data is a sample of the data expected from the node manager driver in IPMI"},{"line_number":19,"context_line":"support"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"TEMPERATURE_SENSOR_DATA \u003d {"},{"line_number":23,"context_line":"    \u0027Temperature\u0027: {"},{"line_number":24,"context_line":"        \u0027DIMM GH VR Temp (0x3b)\u0027: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_9254e3ca","line":21,"in_reply_to":"fa98f980_cf009504","updated":"2014-09-05 01:51:02.000000000","message":"ok. Will reuse it.","commit_id":"061ab0291f736e7246123bef462ae4c33c0c80a7"}],"ceilometer/tests/ipmi/pollsters/test_node.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"897603ab49b56332d870fe05c2cd5c2664595751","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        return {\"Current_value\": [\u002713\u0027, \u002700\u0027],"},{"line_number":27,"context_line":"                \"Average_value\": [\u002712\u0027, \u002700\u0027],"},{"line_number":28,"context_line":"                \"Maximum_value\": [\u002714\u0027, \u002700\u0027],"},{"line_number":29,"context_line":"                \"Minimum_value\": [\u002711\u0027, \u002700\u0027]}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def fake_sensor_data(self, sensor_type):"},{"line_number":32,"context_line":"        # No use for this test"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_15a484a4","line":29,"updated":"2014-09-12 12:11:48.000000000","message":"In the dependent patch I\u0027ve questioned whether we need to report the max, min and average given that these are no longer used by the pollsters.","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"f25e8d30cef0be540d5087bb88edec21b65aff0e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        return {\"Current_value\": [\u002713\u0027, \u002700\u0027],"},{"line_number":27,"context_line":"                \"Average_value\": [\u002712\u0027, \u002700\u0027],"},{"line_number":28,"context_line":"                \"Maximum_value\": [\u002714\u0027, \u002700\u0027],"},{"line_number":29,"context_line":"                \"Minimum_value\": [\u002711\u0027, \u002700\u0027]}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def fake_sensor_data(self, sensor_type):"},{"line_number":32,"context_line":"        # No use for this test"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_bbf009fe","line":29,"in_reply_to":"fa98f980_15a484a4","updated":"2014-09-12 13:21:21.000000000","message":"Node manager returns a string including all data, then parser get all data in natural way like other command.  discarding others need hack. it\u0027s hardware\u0027a behavior.\n\nthis test emulate this behavior: we just pick up one value from hardware\u0027a feeding.","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"897603ab49b56332d870fe05c2cd5c2664595751","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        return {\"Current_value\": [\u002723\u0027, \u002700\u0027],"},{"line_number":50,"context_line":"                \"Average_value\": [\u002722\u0027, \u002700\u0027],"},{"line_number":51,"context_line":"                \"Maximum_value\": [\u002724\u0027, \u002700\u0027],"},{"line_number":52,"context_line":"                \"Minimum_value\": [\u002721\u0027, \u002700\u0027]}"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def fake_sensor_data(self, sensor_type):"},{"line_number":55,"context_line":"        # No use for this test"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_55aa8c71","line":52,"updated":"2014-09-12 12:11:48.000000000","message":"Similarly.","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"}],"doc/source/measurements.rst":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"0265100be57fca965062ecc23515ef813da07e99","unresolved":false,"context_lines":[{"line_number":342,"context_line":"Meter                            Type        Unit    Resource        Origin        Note"},{"line_number":343,"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\u003d\u003d"},{"line_number":344,"context_line":"hardware.ipmi.node.power         Gauge       W       host ID         pollster      System Current Power"},{"line_number":345,"context_line":"hardware.ipmi.node.temperature   Gauge       W       host ID         pollster      System Current Temperature"},{"line_number":346,"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\u003d\u003d"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"Dynamically retrieving the Meters via ceilometer client"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa98f980_57e68917","line":345,"updated":"2014-09-09 05:41:07.000000000","message":"Unit should be C","commit_id":"31754ffb75751058a914437271f5e84c06a4a2d2"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"897603ab49b56332d870fe05c2cd5c2664595751","unresolved":false,"context_lines":[{"line_number":330,"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":331,"context_line":""},{"line_number":332,"context_line":"There is another way to retrieve IPMI data, by deploying the Ceilometer IPMI"},{"line_number":333,"context_line":"agent on each IPMI-capable node in order to poll local sensor data. To avoid"},{"line_number":334,"context_line":"duplication of metering data and unnecessary load on the IPMI interface, the"},{"line_number":335,"context_line":"IPMI agent should not be deployed if the node is managed by Ironic and the"},{"line_number":336,"context_line":"\u0027conductor.send_sensor_data\u0027 option is set to true in the Ironic configuration."}],"source_content_type":"text/x-rst","patch_set":13,"id":"fa98f980_353d082c","line":333,"updated":"2014-09-12 12:11:48.000000000","message":"Just an FYI, we\u0027re going to need to give users some more guidance on deploying this agent, perhaps best in the new Telemetry section of the admin guide:\n\n  http://docs.openstack.org/admin-guide-cloud/content/section_telemetry-system-architecture.html \n\nCan you take care of contributing that documentation content also? Please sync up with ildikov on that as she has authored the vast majority of that chapter.","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"f25e8d30cef0be540d5087bb88edec21b65aff0e","unresolved":false,"context_lines":[{"line_number":330,"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":331,"context_line":""},{"line_number":332,"context_line":"There is another way to retrieve IPMI data, by deploying the Ceilometer IPMI"},{"line_number":333,"context_line":"agent on each IPMI-capable node in order to poll local sensor data. To avoid"},{"line_number":334,"context_line":"duplication of metering data and unnecessary load on the IPMI interface, the"},{"line_number":335,"context_line":"IPMI agent should not be deployed if the node is managed by Ironic and the"},{"line_number":336,"context_line":"\u0027conductor.send_sensor_data\u0027 option is set to true in the Ironic configuration."}],"source_content_type":"text/x-rst","patch_set":13,"id":"fa98f980_3b73394f","line":333,"in_reply_to":"fa98f980_353d082c","updated":"2014-09-12 13:21:21.000000000","message":"Ok. I\u0027ll do it","commit_id":"6b4c9d2757eb2d739c9b833182d47fac5927ef5b"}],"setup.cfg":[{"author":{"_account_id":6983,"name":"YangLei","email":"iamhappg@aliyun.com","username":"YangLei"},"change_message_id":"458212071a827caa5cfe91ca8cbd2aee79608c67","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    ceilometer-send-sample \u003d ceilometer.cli:send_sample"},{"line_number":273,"context_line":"    ceilometer-dbsync \u003d ceilometer.cmd.storage:dbsync"},{"line_number":274,"context_line":"    ceilometer-expirer \u003d ceilometer.cmd.storage:expirer"},{"line_number":275,"context_line":"    ceilometer-rootwrap \u003d oslo.rootwrap.cmd:main"},{"line_number":276,"context_line":"    ceilometer-collector \u003d ceilometer.cmd.collector:main"},{"line_number":277,"context_line":"    ceilometer-alarm-evaluator \u003d ceilometer.cmd.alarm:evaluator"},{"line_number":278,"context_line":"    ceilometer-alarm-notifier \u003d ceilometer.cmd.alarm:notifier"}],"source_content_type":"text/x-ttcn-cfg","patch_set":8,"id":"fa98f980_ad157ae6","line":275,"updated":"2014-09-10 11:44:11.000000000","message":"It seems this line should go to https://review.openstack.org/#/c/115845/","commit_id":"72a951fd9799b0f92f2ea5973fb0f1be17bda0f5"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"012e893f5b5bdc71a5bd2bffdbc9a07faa6a7ed0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    http.response \u003d ceilometer.middleware:HTTPResponse"},{"line_number":73,"context_line":"    stack_crud \u003d ceilometer.orchestration.notifications:StackCRUD"},{"line_number":74,"context_line":"    data_processing \u003d ceilometer.data_processing.notifications:DataProcessing"},{"line_number":75,"context_line":"    profiler \u003d ceilometer.profiler.notifications:ProfilerNotifications"},{"line_number":76,"context_line":"    hardware.ipmi.temperature \u003d ceilometer.hardware.notifications.ipmi:TemperatureSensorNotification"},{"line_number":77,"context_line":"    hardware.ipmi.voltage \u003d ceilometer.hardware.notifications.ipmi:VoltageSensorNotification"},{"line_number":78,"context_line":"    hardware.ipmi.current \u003d ceilometer.hardware.notifications.ipmi:CurrentSensorNotification"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"fa98f980_602aa191","line":75,"updated":"2014-09-11 00:30:37.000000000","message":"you should change this definition either due to the file name change","commit_id":"1307aa5c3cb1e9daae5aaab52cc1e4479fe7cc3e"}]}
