)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPMI support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add IPMI agent on IPMI capable node to get the power and thermal information,"},{"line_number":10,"context_line":"improve overall data center efficiency and maximize overall data center usage."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements bp ipmi-support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1abeadc6_69cf7a56","line":9,"updated":"2014-08-22 14:21:01.000000000","message":"s/Add/Adds/","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add IPMI support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add IPMI agent on IPMI capable node to get the power and thermal information,"},{"line_number":10,"context_line":"improve overall data center efficiency and maximize overall data center usage."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements bp ipmi-support"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1abeadc6_e90aaa88","line":10,"updated":"2014-08-22 14:21:01.000000000","message":"s/improve/improves/","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"f2009eea4b98297e0ced87de12c8929a3d61aa64","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPMI support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds IPMI engin to get sensor data or system power/thermal informantion on IPMI"},{"line_number":10,"context_line":"capable node, improves overall efficiency and maximizes overall usage for data"},{"line_number":11,"context_line":"center."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"fa98f980_ddaf1e93","line":9,"range":{"start_line":9,"start_character":10,"end_line":9,"end_character":15},"updated":"2014-09-08 11:04:46.000000000","message":"engin -\u003e engine ?","commit_id":"0b1a33a504a937a7530770c80cee6f603ac9f913"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"dea523c284993da2e1b639f76eab381a216cd838","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPMI support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds IPMI engine to get sensor data or system power/thermal informantion on"},{"line_number":10,"context_line":"IPMI capable node, improves overall efficiency and maximizes overall usage for"},{"line_number":11,"context_line":"data center."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa98f980_1a7becf5","line":9,"updated":"2014-09-11 17:55:13.000000000","message":"s/informantion/information/","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"}],"ceilometer/cmd/agent_ipmi.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_b9afe593","line":1,"updated":"2014-08-25 13:31:08.000000000","message":"remove","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"}],"ceilometer/ipmi/manager.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_4970fe0a","line":1,"updated":"2014-08-22 14:21:01.000000000","message":"Empty line?","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1b29562ad6c923c5f4664e0f696debaf9cf1c9b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_f714464e","line":2,"range":{"start_line":2,"start_character":2,"end_line":2,"end_character":11},"updated":"2014-08-22 12:58:52.000000000","message":"Please, update year of a license.","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from ceilometer import agent"},{"line_number":18,"context_line":"from ceilometer.openstack.common import log"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class AgentManager(agent.AgentManager):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_199e1964","line":20,"updated":"2014-08-25 13:31:08.000000000","message":"never used","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"}],"ceilometer/ipmi/nodemanager/common.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":36,"context_line":"              \"raw 0x2e 0xc8 0x57 0x01 0x00 0x02 0x00 0x00\"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"MANUFACTURER_ID \u003d {\"Intel\": [\u002757\u0027, \u002701\u0027, \u002700\u0027]}"},{"line_number":39,"context_line":"INTEL_PREFIX \u003d \u00275701000d01\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# NOTE(fegnqian): The template dict are made according to the spec. It contains"},{"line_number":42,"context_line":"# the expected length of each item. And it can be used to parse the output of"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_3d399841","line":39,"updated":"2014-09-03 07:23:57.000000000","message":"Does this mean that the IPMI agent will only work with the Intel IPMI implementation?\n\nWhat would be the result if this was used with say Dell nodes?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":36,"context_line":"              \"raw 0x2e 0xc8 0x57 0x01 0x00 0x02 0x00 0x00\"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"MANUFACTURER_ID \u003d {\"Intel\": [\u002757\u0027, \u002701\u0027, \u002700\u0027]}"},{"line_number":39,"context_line":"INTEL_PREFIX \u003d \u00275701000d01\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# NOTE(fegnqian): The template dict are made according to the spec. It contains"},{"line_number":42,"context_line":"# the expected length of each item. And it can be used to parse the output of"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_2ef79cf6","line":39,"in_reply_to":"fa98f980_3d399841","updated":"2014-09-03 10:12:12.000000000","message":"Do. \nWe want to be compatible with other vendor machine. In other machine, we can still get basic IPMI data. \nSorry we have no other IPMI machine for test now, but probably need do it in future.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"}],"ceilometer/ipmi/nodemanager/nm_common.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1b29562ad6c923c5f4664e0f696debaf9cf1c9b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_77003602","line":1,"updated":"2014-08-22 12:58:52.000000000","message":"Please. update a year of a license.","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_79938d4f","line":1,"updated":"2014-08-25 13:31:08.000000000","message":"can we drop \u0027nm_\u0027 prefix? it\u0027s under nodemanager module already","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":40,"context_line":"# IPMI command."},{"line_number":41,"context_line":"ONE_RETURN_TEMPLATE \u003d {\"ret\": 1}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"BMC_INFO_TEMPLATE \u003d collections.OrderedDict()"},{"line_number":44,"context_line":"BMC_INFO_TEMPLATE[\u0027Device_ID\u0027] \u003d 1"},{"line_number":45,"context_line":"BMC_INFO_TEMPLATE[\u0027Device_Revision\u0027] \u003d 1"},{"line_number":46,"context_line":"BMC_INFO_TEMPLATE[\u0027Firmware_Revision_1\u0027] \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_39d755ef","line":43,"updated":"2014-08-25 13:31:08.000000000","message":"i\u0027m not sure how python 2.6 tests passed... if i understand correctly, OrderedDict was only added in py2.7 onwards","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"}],"ceilometer/ipmi/nodemanager/nm_exception.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1b29562ad6c923c5f4664e0f696debaf9cf1c9b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_32116c52","line":1,"updated":"2014-08-22 12:58:52.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_d93d812e","line":1,"updated":"2014-08-25 13:31:08.000000000","message":"rename file name","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"}],"ceilometer/ipmi/nodemanager/node_manager.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        :param output: output of the execution of IPMI command"},{"line_number":123,"context_line":"        :param template: a dict that contains the expected items of"},{"line_number":124,"context_line":"                IPMI command and its length."},{"line_number":125,"context_line":"        \"\"\""},{"line_number":126,"context_line":"        ret \u003d {}"},{"line_number":127,"context_line":"        index \u003d 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_c9340efe","line":124,"updated":"2014-08-22 14:21:01.000000000","message":"it would be better if you shift this string a little bit, for ex.\n:param template: a dict that contains the expected items of\n\t\t\t    IPMI command and its length.","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer.openstack.common import processutils"},{"line_number":27,"context_line":"from ceilometer import utils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def _hex(list\u003d[]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_591171ae","line":29,"updated":"2014-08-25 13:31:08.000000000","message":"not used","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"755ca0edc98092ff8417f1b2eb2b8836bf745800","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        return int(\u0027\u0027.join(list), 16)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NodeManager(object):"},{"line_number":37,"context_line":"    \"\"\"The python implementation of node manager using ipmitool"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    The class implements the node manager to read power and temperature of"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_6223e205","line":36,"updated":"2014-09-01 12:51:16.000000000","message":"This mode of parsing the output of ipmitool seems far more robust than that used in a recent change to Ironic: https://review.openstack.org/#/c/72538/44/ironic/drivers/modules/ipmitool.py,cm\n\nIs there an opportunity for some shared use here?","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"08b1c8f5a415894e646299b2b8b531ba3bc950c2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        return int(\u0027\u0027.join(list), 16)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NodeManager(object):"},{"line_number":37,"context_line":"    \"\"\"The python implementation of node manager using ipmitool"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    The class implements the node manager to read power and temperature of"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_b502313c","line":36,"in_reply_to":"fa98f980_6223e205","updated":"2014-09-02 08:13:25.000000000","message":"There are some difference here:\n1. Ironic does the polling in control node, so need run ipmitool via network with password. Its code need maintain the environment for password etc. Ceilometer IPMI agent runs on compute node, where ipmitool can easily work. So the code can be simple.\n\n2. Ceilometer agent also gets node manager data, which is more readable and concise. \n\nIt\u0027s a good idea of share code between them. But how to share need further investigation and synchronization with Ironic community. So we plan to push this patch in, and do the code sharing work in future.","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def _hex(list\u003d[]):"},{"line_number":30,"context_line":"    \"\"\"Format the return value of IPMI command into hex.\"\"\""},{"line_number":31,"context_line":"    if list:"},{"line_number":32,"context_line":"        list.reverse()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_5d79fcc6","line":29,"updated":"2014-09-03 07:23:57.000000000","message":"Shouldn\u0027t _hex be defined in the module in which it is used, i.e. ceilometer.ipmi.pollsters.data?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def _hex(list\u003d[]):"},{"line_number":30,"context_line":"    \"\"\"Format the return value of IPMI command into hex.\"\"\""},{"line_number":31,"context_line":"    if list:"},{"line_number":32,"context_line":"        list.reverse()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_5048fe86","line":29,"in_reply_to":"fa98f980_5d79fcc6","updated":"2014-09-03 10:12:12.000000000","message":"test_node_manager also used this _hex. \nSo keep it to avoid duplicated code","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"Format the return value of IPMI command into hex.\"\"\""},{"line_number":31,"context_line":"    if list:"},{"line_number":32,"context_line":"        list.reverse()"},{"line_number":33,"context_line":"        return int(\u0027\u0027.join(list), 16)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NodeManager(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_fd51d036","line":33,"updated":"2014-09-03 07:23:57.000000000","message":"Do you need to return some sentinel value, e.g. 0, when list is None?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"Format the return value of IPMI command into hex.\"\"\""},{"line_number":31,"context_line":"    if list:"},{"line_number":32,"context_line":"        list.reverse()"},{"line_number":33,"context_line":"        return int(\u0027\u0027.join(list), 16)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NodeManager(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_7060a201","line":33,"in_reply_to":"fa98f980_fd51d036","updated":"2014-09-03 10:12:12.000000000","message":"XXX\nOK","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                    args.extend(_args.split(\" \"))"},{"line_number":76,"context_line":"                args.extend(command.split(\" \"))"},{"line_number":77,"context_line":"                try:"},{"line_number":78,"context_line":"                    # NOTE(fengqian): IPMI command should be run in"},{"line_number":79,"context_line":"                    # root privilege."},{"line_number":80,"context_line":"                    (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"},{"line_number":81,"context_line":"                except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_bd53c837","line":78,"updated":"2014-09-03 07:23:57.000000000","message":"Nitpick:\n\n  s/run in/run with/","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        :return: slave address and channel number of target device."},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        ret \u003d None"},{"line_number":96,"context_line":"        prefix \u003d nmcommon.INTEL_PREFIX"},{"line_number":97,"context_line":"        # NOTE(fegnqian): According to Intel Node Manager spec, section 4.5,"},{"line_number":98,"context_line":"        # for Intel NM discovery OEM SDR records are type C0h. It contains"},{"line_number":99,"context_line":"        # manufacture ID and OEM data in the record body."}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_3d3fd8d7","line":96,"updated":"2014-09-03 07:23:57.000000000","message":"See question on Intel specificity.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        :return: slave address and channel number of target device."},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        ret \u003d None"},{"line_number":96,"context_line":"        prefix \u003d nmcommon.INTEL_PREFIX"},{"line_number":97,"context_line":"        # NOTE(fegnqian): According to Intel Node Manager spec, section 4.5,"},{"line_number":98,"context_line":"        # for Intel NM discovery OEM SDR records are type C0h. It contains"},{"line_number":99,"context_line":"        # manufacture ID and OEM data in the record body."}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_0e5738cb","line":96,"in_reply_to":"fa98f980_3d3fd8d7","updated":"2014-09-03 10:12:12.000000000","message":"This function parsed info like channel used for node manager command(specific IPMI command).\nThe basic IPMI command to get sensor should work","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            # NOTE(fengqian): If the manufacturer is not Intel, just set"},{"line_number":207,"context_line":"            # False and return."},{"line_number":208,"context_line":"            self.nm_support \u003d False"},{"line_number":209,"context_line":"            return"},{"line_number":210,"context_line":"        self.discover_slave_channel()"},{"line_number":211,"context_line":"        support \u003d self._node_manager_get_device_id()[\u0027Implemented_firmware\u0027]"},{"line_number":212,"context_line":"        # NOTE(fengqian): According to Intel Node Manager spec, return value"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_5d0e5c3c","line":209,"updated":"2014-09-03 07:23:57.000000000","message":"Is the intent here that all non-Intel hardware is simply ignored?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"59263735d1dcd032c6a9457a7b4605287b47a1c9","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            # NOTE(fengqian): If the manufacturer is not Intel, just set"},{"line_number":207,"context_line":"            # False and return."},{"line_number":208,"context_line":"            self.nm_support \u003d False"},{"line_number":209,"context_line":"            return"},{"line_number":210,"context_line":"        self.discover_slave_channel()"},{"line_number":211,"context_line":"        support \u003d self._node_manager_get_device_id()[\u0027Implemented_firmware\u0027]"},{"line_number":212,"context_line":"        # NOTE(fengqian): According to Intel Node Manager spec, return value"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_59802946","line":209,"in_reply_to":"fa98f980_2e131c0e","updated":"2014-09-03 10:27:21.000000000","message":"OK, that\u0027s good to know. Can you clarify the meaning of nm_support as cdent requested?\n\nBTW have you tested the patch with non-Intel hardware? (I think that would be a good exercise, though not necessarily a blocker for this individual patch)","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            # NOTE(fengqian): If the manufacturer is not Intel, just set"},{"line_number":207,"context_line":"            # False and return."},{"line_number":208,"context_line":"            self.nm_support \u003d False"},{"line_number":209,"context_line":"            return"},{"line_number":210,"context_line":"        self.discover_slave_channel()"},{"line_number":211,"context_line":"        support \u003d self._node_manager_get_device_id()[\u0027Implemented_firmware\u0027]"},{"line_number":212,"context_line":"        # NOTE(fengqian): According to Intel Node Manager spec, return value"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_2e131c0e","line":209,"in_reply_to":"fa98f980_5d0e5c3c","updated":"2014-09-03 10:12:12.000000000","message":"non-intel hardware can still issue normal IPMI command even self.nm_support \u003d\u003d false","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3cb9c8972d2c01de42dd695651e773aa72ddeafe","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self):"},{"line_number":56,"context_line":"        if not (self._instance and self._inited):"},{"line_number":57,"context_line":"            self.nm_support \u003d False"},{"line_number":58,"context_line":"            self.channel \u003d None"},{"line_number":59,"context_line":"            self.slave_address \u003d None"},{"line_number":60,"context_line":"            self.init_node_manager()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_76609a01","line":57,"updated":"2014-09-03 10:13:22.000000000","message":"I can\u0027t find any way in which nm_support is being used. node_manager_support() goes to some effort to set it to either True or False but the value is never used in any conditionals:\n\n    crank:~/src/ceilometer(review/zhai_edwin/bp/ipmi-support) $ gr nm_support ceilometer\n    ceilometer/ipmi/nodemanager/node_manager.py:            self.nm_support \u003d False\n    ceilometer/ipmi/nodemanager/node_manager.py:            self.nm_support \u003d False\n    ceilometer/ipmi/nodemanager/node_manager.py:            self.nm_support \u003d True\n\nCan it (node_manager_support) be removed? It seems to add a lot of code for no obvious reason.","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e27760ca2bd5c34a00b726612746333c10b8fe3e","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self):"},{"line_number":56,"context_line":"        if not (self._instance and self._inited):"},{"line_number":57,"context_line":"            self.nm_support \u003d False"},{"line_number":58,"context_line":"            self.channel \u003d None"},{"line_number":59,"context_line":"            self.slave_address \u003d None"},{"line_number":60,"context_line":"            self.init_node_manager()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_198141c4","line":57,"in_reply_to":"fa98f980_76609a01","updated":"2014-09-03 10:52:18.000000000","message":"I believe it should be used for some platform without NM support. Given no usage now, let\u0027s remove it.","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"9421002065e9137f5c3f8825aecb2b1afb248c2e","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        if self.nm_support:"},{"line_number":188,"context_line":"            return self._read_temperature_all()"},{"line_number":189,"context_line":"        else:"},{"line_number":190,"context_line":"            # Get dummy data on platfrom without Node Manager"},{"line_number":191,"context_line":"            return nmcommon.NM_STATISTICS_TEMPLATE"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def init_node_manager(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_5c39ec3f","line":190,"updated":"2014-09-03 15:54:45.000000000","message":"What is the content of the dummy data?","commit_id":"018aeecddaeb099b1c97226f064e201423a7f1d5"}],"ceilometer/ipmi/platform/ipmi_sensor.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3c526486943b64ce2a471098822d3da62f8b40e7","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if sensor_type \u003d\u003d \u0027\u0027:"},{"line_number":101,"context_line":"            return self._read_sensor_all()"},{"line_number":102,"context_line":"        elif sensor_type \u003d\u003d \u0027Temperature\u0027:"},{"line_number":103,"context_line":"            return self._read_sensor_temperature()"},{"line_number":104,"context_line":"        elif sensor_type \u003d\u003d \u0027Fan\u0027:"},{"line_number":105,"context_line":"            return self._read_sensor_fan()"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_46b09df4","line":102,"updated":"2014-09-09 04:07:08.000000000","message":"{\n\u0027\u0027: self._read_sensor_all\n\u0027Temprature\u0027: self._read_sensor_temperature,\n\n\u0027Fan\u0027: self._read_sensor_fan\n\n...\n}\n\ntry:\n    return mapping[sensor_type]()\nexcept KeyError:\n\nmaybe use a dict for this kind of mapping?","commit_id":"59b56f0d11b16970144889fca1b79012f38d545e"},{"author":{"_account_id":4992,"name":"malini-k-bhandaru","email":"malini.k.bhandaru@intel.com","username":"malini-k-bhandaru"},"change_message_id":"176b00c7c84d454d78b7c139890be9a6b122e038","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    @ipmitool.execute_ipmi_cmd(DICT_TRANSLATE_TEMPLATE)"},{"line_number":70,"context_line":"    def _read_sensor_temperature(self):"},{"line_number":71,"context_line":"        \"\"\"Get the sensor data for Temperature.\"\"\""},{"line_number":72,"context_line":"        return IPMICMD[\u0027sensor_dump\u0027] + \" type Temperature\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @ipmitool.execute_ipmi_cmd(DICT_TRANSLATE_TEMPLATE)"},{"line_number":75,"context_line":"    def _read_sensor_voltage(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_c28ef22d","line":72,"updated":"2014-09-11 00:44:25.000000000","message":"Static strings. Save on python string concatenation each time this method (and the other similar) methods are invoked by just storing in your dictionary these string variants. key \u003d \u0027current\u0027, value \u003d \u0027sensor_dump type Current\u0027","commit_id":"126c0c06b8ceadeda800f6c233050b7ed7656ea9"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"dea523c284993da2e1b639f76eab381a216cd838","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Node manager to collect power consumption and temperature of compute node\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ceilometer.ipmi.platform import exception as ipmiexcept"},{"line_number":20,"context_line":"from ceilometer.ipmi.platform import ipmitool"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_bad900f5","line":17,"updated":"2014-09-11 17:55:13.000000000","message":"Isn\u0027t node manager implemented in a different file?","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"           \"sensor_dump_fan\": \"sdr -v type Fan\","},{"line_number":29,"context_line":"           \"sensor_dump_voltage\": \"sdr -v type Voltage\"}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# NOTE(fegnqian): The template dict are made according to the spec. It contains"},{"line_number":32,"context_line":"# the expected length of each item. And it can be used to parse the output of"},{"line_number":33,"context_line":"# IPMI command."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_f019f288","line":31,"updated":"2014-09-11 14:29:40.000000000","message":"fengqian?","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":4458,"name":"Shane Wang","email":"shane.wang@intel.com","username":"shane-wang"},"change_message_id":"567fce2c6ce5e9bed6833770b609a63acb1e79bd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"           \"sensor_dump_fan\": \"sdr -v type Fan\","},{"line_number":29,"context_line":"           \"sensor_dump_voltage\": \"sdr -v type Voltage\"}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# NOTE(fegnqian): The template dict are made according to the spec. It contains"},{"line_number":32,"context_line":"# the expected length of each item. And it can be used to parse the output of"},{"line_number":33,"context_line":"# IPMI command."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_9911b154","line":31,"in_reply_to":"fa98f980_f019f288","updated":"2014-09-11 14:42:14.000000000","message":"Right, fengqian is the original author for this file, he was transitioned to the other project (not OpenStack)","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"dea523c284993da2e1b639f76eab381a216cd838","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def check_ipmi(self):"},{"line_number":110,"context_line":"        \"\"\"IPMI capability checking"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        This function is used to detected if compute node is IPMI capable"},{"line_number":113,"context_line":"        platform. Just run a simple IPMI command to get SDR info for check."},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_1a976ced","line":112,"updated":"2014-09-11 17:55:13.000000000","message":"s/detected/detect/","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3705e650553759ec261121cc3766ca130c43acce","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \"\"\"Get the sensor data for Fan.\"\"\""},{"line_number":87,"context_line":"        return IPMICMD[\u0027sensor_dump_fan\u0027]"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def read_sensor_all(self, sensor_type\u003d\u0027\u0027):"},{"line_number":90,"context_line":"        \"\"\"Get the sensor data for type.\"\"\""},{"line_number":91,"context_line":"        if not self.ipmi_support:"},{"line_number":92,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_6fc25f54","line":89,"updated":"2014-09-12 11:49:47.000000000","message":"The method naming seems confusing to me here, since read_sensor_all may return all sensors or may return just some specific sensors, depending on the sensor_type parameter.\n\nIt would be clearer I think named as say:\n\n  def read_sensor_any(self, sensor_type\u003d\u0027\u0027):","commit_id":"403b6e95de0fdf7f98331f599a67735303cc8e1c"}],"ceilometer/ipmi/platform/ipmitool.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0bc1933fceef5f9dd1be35392cb5b662426972f4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"slave_address \u003d \u0027\u0027"},{"line_number":25,"context_line":"channel \u003d \u0027\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"\"\"\"Following 3 functions are copied from ironic project to handle ipmitool\u0027s"},{"line_number":28,"context_line":"sensor data output. Need code clean and sharing in future."},{"line_number":29,"context_line":"Check ironic/drivers/modules/ipmitool.py"},{"line_number":30,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_8498086b","line":27,"updated":"2014-09-05 16:56:37.000000000","message":"Please make this a comment not a docstring.","commit_id":"0b1a33a504a937a7530770c80cee6f603ac9f913"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"94f547d1401787533ba50b95cbf12bd621cfdb14","unresolved":false,"context_lines":[{"line_number":24,"context_line":"slave_address \u003d \u0027\u0027"},{"line_number":25,"context_line":"channel \u003d \u0027\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"\"\"\"Following 3 functions are copied from ironic project to handle ipmitool\u0027s"},{"line_number":28,"context_line":"sensor data output. Need code clean and sharing in future."},{"line_number":29,"context_line":"Check ironic/drivers/modules/ipmitool.py"},{"line_number":30,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_95e909e8","line":27,"in_reply_to":"fa98f980_8498086b","updated":"2014-09-06 07:16:13.000000000","message":"Ok","commit_id":"0b1a33a504a937a7530770c80cee6f603ac9f913"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0bc1933fceef5f9dd1be35392cb5b662426972f4","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            args.extend(command.split(\" \"))"},{"line_number":132,"context_line":"            try:"},{"line_number":133,"context_line":"                # NOTE(fengqian): IPMI command should be run with"},{"line_number":134,"context_line":"                # root privilege."},{"line_number":135,"context_line":"                (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"},{"line_number":136,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":137,"context_line":"                raise ipmiexcept.IPMIException()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_64bc04bc","line":134,"updated":"2014-09-05 16:56:37.000000000","message":"Is this NOTE needed, since the command says \"run_as_root\u003dTrue\"?","commit_id":"0b1a33a504a937a7530770c80cee6f603ac9f913"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"94f547d1401787533ba50b95cbf12bd621cfdb14","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            args.extend(command.split(\" \"))"},{"line_number":132,"context_line":"            try:"},{"line_number":133,"context_line":"                # NOTE(fengqian): IPMI command should be run with"},{"line_number":134,"context_line":"                # root privilege."},{"line_number":135,"context_line":"                (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"},{"line_number":136,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":137,"context_line":"                raise ipmiexcept.IPMIException()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_f5ea55d6","line":134,"in_reply_to":"fa98f980_64bc04bc","updated":"2014-09-06 07:16:13.000000000","message":"Will remove it","commit_id":"0b1a33a504a937a7530770c80cee6f603ac9f913"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3c526486943b64ce2a471098822d3da62f8b40e7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            args \u003d [\u0027ipmitool\u0027]"},{"line_number":126,"context_line":"            command \u003d f(**kwargs)"},{"line_number":127,"context_line":"            if bridge:"},{"line_number":128,"context_line":"                _args \u003d \u0027-b \u0027 + channel + \u0027 -t \u0027 + slave_address"},{"line_number":129,"context_line":"                args.extend(_args.split(\" \"))"},{"line_number":130,"context_line":"            args.extend(command.split(\" \"))"},{"line_number":131,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_66e68118","line":128,"updated":"2014-09-09 04:07:08.000000000","message":"maybe we can get the channel/slave_address through a function passed to the decorator?","commit_id":"59b56f0d11b16970144889fca1b79012f38d545e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"694aba2592c42bd4421da5c9a3b0039cc2059fe0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ceilometer import utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Following 3 functions are copied from ironic project to handle ipmitool\u0027s"},{"line_number":26,"context_line":"# sensor data output. Need code clean and sharing in future."},{"line_number":27,"context_line":"# Check ironic/drivers/modules/ipmitool.py"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_29b7c587","line":25,"updated":"2014-09-10 07:32:44.000000000","message":"Did you mean the following *2* functions?\n\n(I can see _get_sensor_type \u0026 _process_sensor in ironic/drivers/modules/ipmitool.py, but not any of the other functions below)\n\nAlso, do you need to add to the Author attribution above given the fact that code is copied from Ironic?","commit_id":"5753923c3bbd3591350cbe08c9fb6cbca46608af"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"37b3554ffeb7f01d83b4ade4d2f57a563e960096","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ceilometer import utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Following 3 functions are copied from ironic project to handle ipmitool\u0027s"},{"line_number":26,"context_line":"# sensor data output. Need code clean and sharing in future."},{"line_number":27,"context_line":"# Check ironic/drivers/modules/ipmitool.py"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_4c13370d","line":25,"in_reply_to":"fa98f980_29b7c587","updated":"2014-09-10 07:52:55.000000000","message":"part of _translate_output reuse some code. I\u0027ll add author attribution.","commit_id":"5753923c3bbd3591350cbe08c9fb6cbca46608af"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":"    sensors_data_dict \u003d {}"},{"line_number":66,"context_line":"    if not output:"},{"line_number":67,"context_line":"        return sensors_data_dict"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    sensors_data_array \u003d output.split(\u0027\\n\\n\u0027)"},{"line_number":70,"context_line":"    for sensor_data in sensors_data_array:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_131f606d","line":67,"updated":"2014-09-11 14:29:40.000000000","message":"why is it ok to give empty data set here but not below?","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    # get nothing, no valid sensor data"},{"line_number":84,"context_line":"    if not sensors_data_dict:"},{"line_number":85,"context_line":"        raise ipmiexcept.IPMIException(_(\"parse IPMI sensor data failed,\""},{"line_number":86,"context_line":"                                         \"get noghting with input\"))"},{"line_number":87,"context_line":"    return sensors_data_dict"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_b355b41f","line":86,"updated":"2014-09-11 14:29:40.000000000","message":"s/get noghting with input/No data retrieved from given input/","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    else:"},{"line_number":105,"context_line":"        output_list \u003d output.strip().split(\u0027 \u0027)"},{"line_number":106,"context_line":"        if sum(template.values()) !\u003d len(output_list):"},{"line_number":107,"context_line":"            raise ipmiexcept.IPMIException(_(\"Ret length mismatch\"))"},{"line_number":108,"context_line":"        for item in template.items():"},{"line_number":109,"context_line":"            index_end \u003d index + item[1]"},{"line_number":110,"context_line":"            update_value \u003d output_list[index: index_end]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_33ae2482","line":107,"updated":"2014-09-11 14:29:40.000000000","message":"what does Ret stand for? probably should make it explicit in visible error messages","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d6f4bf029308f007b1345df22e0ccbbfa86e8097","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    else:"},{"line_number":105,"context_line":"        output_list \u003d output.strip().split(\u0027 \u0027)"},{"line_number":106,"context_line":"        if sum(template.values()) !\u003d len(output_list):"},{"line_number":107,"context_line":"            raise ipmiexcept.IPMIException(_(\"Ret length mismatch\"))"},{"line_number":108,"context_line":"        for item in template.items():"},{"line_number":109,"context_line":"            index_end \u003d index + item[1]"},{"line_number":110,"context_line":"            update_value \u003d output_list[index: index_end]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_ad7e1d68","line":107,"in_reply_to":"fa98f980_33ae2482","updated":"2014-09-12 01:25:49.000000000","message":"change it to \"ipmitool output lenght mismatch\"","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    return ret"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"def execute_ipmi_cmd(template\u003d{}, bridge\u003dFalse):"},{"line_number":117,"context_line":"    \"\"\"Decorator for the execution of IPMI command."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    It parses the output of IPMI command into dictionary. For bridge"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_13e4c0df","line":116,"updated":"2014-09-11 14:29:40.000000000","message":"this is oddly implemented... seems like this could just be a function that the other functions call... not a big deal though.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"dea523c284993da2e1b639f76eab381a216cd838","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    return ret"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"def execute_ipmi_cmd(template\u003d{}, bridge\u003dFalse):"},{"line_number":117,"context_line":"    \"\"\"Decorator for the execution of IPMI command."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    It parses the output of IPMI command into dictionary. For bridge"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_adad48eb","line":116,"in_reply_to":"fa98f980_13e4c0df","updated":"2014-09-11 17:55:13.000000000","message":"I agree with Gordon. Wouldn\u0027t it be more intuitive if for example get_device_id() simply called this function? As it is, if I\u0027m reading code and I see a get_device_id() call, I go check out the code, and I see that the function returns a command string.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d6f4bf029308f007b1345df22e0ccbbfa86e8097","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    return ret"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"def execute_ipmi_cmd(template\u003d{}, bridge\u003dFalse):"},{"line_number":117,"context_line":"    \"\"\"Decorator for the execution of IPMI command."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    It parses the output of IPMI command into dictionary. For bridge"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_8db15903","line":116,"in_reply_to":"fa98f980_13e4c0df","updated":"2014-09-12 01:25:49.000000000","message":"decorator make it concise. When need append extra string to the command string, it\u0027s simple.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            command \u003d f(self, **kwargs)"},{"line_number":126,"context_line":"            if bridge:"},{"line_number":127,"context_line":"                _args \u003d \u0027-b \u0027 + self.channel + \u0027 -t \u0027 + self.slave_address"},{"line_number":128,"context_line":"                args.extend(_args.split(\" \"))"},{"line_number":129,"context_line":"            args.extend(command.split(\" \"))"},{"line_number":130,"context_line":"            try:"},{"line_number":131,"context_line":"                (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_53e008fa","line":128,"updated":"2014-09-11 14:29:40.000000000","message":"you could probably just pass in [\u0027-b\u0027, self.channel, \u0027-t\u0027, self.slave_address] rather than building a string and then parsing it again.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d6f4bf029308f007b1345df22e0ccbbfa86e8097","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            command \u003d f(self, **kwargs)"},{"line_number":126,"context_line":"            if bridge:"},{"line_number":127,"context_line":"                _args \u003d \u0027-b \u0027 + self.channel + \u0027 -t \u0027 + self.slave_address"},{"line_number":128,"context_line":"                args.extend(_args.split(\" \"))"},{"line_number":129,"context_line":"            args.extend(command.split(\" \"))"},{"line_number":130,"context_line":"            try:"},{"line_number":131,"context_line":"                (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_cdd1a1fc","line":128,"in_reply_to":"fa98f980_53e008fa","updated":"2014-09-12 01:25:49.000000000","message":"ok. I\u0027ll try.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                args.extend(_args.split(\" \"))"},{"line_number":129,"context_line":"            args.extend(command.split(\" \"))"},{"line_number":130,"context_line":"            try:"},{"line_number":131,"context_line":"                (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"},{"line_number":132,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":133,"context_line":"                raise ipmiexcept.IPMIException()"},{"line_number":134,"context_line":"            return _parse_output(out, template)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_1365a0b4","line":131,"updated":"2014-09-11 14:29:40.000000000","message":"change err to __ since we don\u0027t ever use it.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            try:"},{"line_number":131,"context_line":"                (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"},{"line_number":132,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":133,"context_line":"                raise ipmiexcept.IPMIException()"},{"line_number":134,"context_line":"            return _parse_output(out, template)"},{"line_number":135,"context_line":"        return _execute"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_73734c80","line":133,"updated":"2014-09-11 14:29:40.000000000","message":"would be nice to have an error message here.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d6f4bf029308f007b1345df22e0ccbbfa86e8097","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            try:"},{"line_number":131,"context_line":"                (out, err) \u003d utils.execute(*args, run_as_root\u003dTrue)"},{"line_number":132,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":133,"context_line":"                raise ipmiexcept.IPMIException()"},{"line_number":134,"context_line":"            return _parse_output(out, template)"},{"line_number":135,"context_line":"        return _execute"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_4d2cd102","line":133,"in_reply_to":"fa98f980_73734c80","updated":"2014-09-12 01:25:49.000000000","message":"\"running ipmitool failure\"","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3705e650553759ec261121cc3766ca130c43acce","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        sensor_type \u003d _get_sensor_type(sensor_data_dict)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # ignore the sensors which has no current \u0027Sensor Reading\u0027 data"},{"line_number":76,"context_line":"        sensor_id \u003d sensor_data_dict[\u0027Sensor ID\u0027]"},{"line_number":77,"context_line":"        if \u0027Sensor Reading\u0027 in sensor_data_dict:"},{"line_number":78,"context_line":"            sensors_data_dict.setdefault(sensor_type,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_8f906344","line":75,"updated":"2014-09-12 11:49:47.000000000","message":"s/which has/which have/","commit_id":"403b6e95de0fdf7f98331f599a67735303cc8e1c"}],"ceilometer/ipmi/platform/node_manager.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3c526486943b64ce2a471098822d3da62f8b40e7","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    @ipmitool.execute_ipmi_cmd()"},{"line_number":175,"context_line":"    def _dump_sdr_file():"},{"line_number":176,"context_line":"        \"\"\"Dump SDR into a file.\"\"\""},{"line_number":177,"context_line":"        NodeManager.sdr_file_path \u003d tempfile.mkstemp()[1]"},{"line_number":178,"context_line":"        return IPMICMD[\"sdr_dump\"] + \" \" + NodeManager.sdr_file_path"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_99fbca46","line":177,"updated":"2014-09-09 04:07:08.000000000","message":"I don\u0027t think we need the sdr_file_path as the class attribute, we can pass this as a parameter to _dump_sdr_file().","commit_id":"59b56f0d11b16970144889fca1b79012f38d545e"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3c526486943b64ce2a471098822d3da62f8b40e7","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            return {}"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def init_node_manager(self):"},{"line_number":217,"context_line":"        init_retry \u003d 3"},{"line_number":218,"context_line":"        if self._init_sensor_agent_process()[\u0027ret\u0027] \u003d\u003d [\u002701\u0027]:"},{"line_number":219,"context_line":"            return"},{"line_number":220,"context_line":"        # Run sensor initialization agent"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_2682b900","line":217,"updated":"2014-09-09 04:07:08.000000000","message":"maybe we should make this as a config option?","commit_id":"59b56f0d11b16970144889fca1b79012f38d545e"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"dea523c284993da2e1b639f76eab381a216cd838","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"nm_init_retry \u003d cfg.IntOpt(\u0027nm_init_retry\u0027,"},{"line_number":33,"context_line":"                           default\u003d3,"},{"line_number":34,"context_line":"                           help\u003d\u0027Number of retries in Node Manager init.\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"CONF.register_opt(nm_init_retry, group\u003d\u0027ipmi\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_1a4f6c6c","line":34,"updated":"2014-09-11 17:55:13.000000000","message":"Wouldn\u0027t this warrant a more detailed description, meant for someone who is not familiar with the code at all? For example, as an operator, I have no idea what Node Manager init is.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d6f4bf029308f007b1345df22e0ccbbfa86e8097","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"nm_init_retry \u003d cfg.IntOpt(\u0027nm_init_retry\u0027,"},{"line_number":33,"context_line":"                           default\u003d3,"},{"line_number":34,"context_line":"                           help\u003d\u0027Number of retries in Node Manager init.\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"CONF.register_opt(nm_init_retry, group\u003d\u0027ipmi\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_38c26d53","line":34,"in_reply_to":"fa98f980_1a4f6c6c","updated":"2014-09-12 01:25:49.000000000","message":"Change it to\n\u0027In Node Manager init, init cmd then status                            check was issued to enable Node Manager                               engine. This option defines number of retries\nupon init failure\u0027","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @ipmitool.execute_ipmi_cmd(ONE_RETURN_TEMPLATE)"},{"line_number":172,"context_line":"    def _init_sensor_agent_process(self):"},{"line_number":173,"context_line":"        \"\"\"Check the status of initiazation agent.\"\"\""},{"line_number":174,"context_line":"        return IPMIRAWCMD[\"init_sensor_agent_status\"]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @ipmitool.execute_ipmi_cmd()"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_5629d635","line":173,"updated":"2014-09-11 14:29:40.000000000","message":"s/initiazation/initialization/","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @ipmitool.execute_ipmi_cmd(NM_STATISTICS_TEMPLATE, True)"},{"line_number":191,"context_line":"    def _read_power_all(self):"},{"line_number":192,"context_line":"        \"\"\"Get the power consumption of the whole platfrom.\"\"\""},{"line_number":193,"context_line":"        return IPMIRAWCMD[\u0027read_power_all\u0027]"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @ipmitool.execute_ipmi_cmd(NM_STATISTICS_TEMPLATE, True)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_1633ceab","line":192,"updated":"2014-09-11 14:29:40.000000000","message":"s/platfrom/platform/","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def read_power_all(self):"},{"line_number":201,"context_line":"        if self.nm_support:"},{"line_number":202,"context_line":"            return self._read_power_all()"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            # return empty to avoid producing sample for non-NodeManager"},{"line_number":205,"context_line":"            return {}"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_b61762ed","line":203,"updated":"2014-09-11 14:29:40.000000000","message":"you don\u0027t need else","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d6f4bf029308f007b1345df22e0ccbbfa86e8097","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def read_power_all(self):"},{"line_number":201,"context_line":"        if self.nm_support:"},{"line_number":202,"context_line":"            return self._read_power_all()"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            # return empty to avoid producing sample for non-NodeManager"},{"line_number":205,"context_line":"            return {}"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_9857d959","line":203,"in_reply_to":"fa98f980_b61762ed","updated":"2014-09-12 01:25:49.000000000","message":"ok","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def read_temperature_all(self):"},{"line_number":208,"context_line":"        if self.nm_support:"},{"line_number":209,"context_line":"            return self._read_temperature_all()"},{"line_number":210,"context_line":"        else:"},{"line_number":211,"context_line":"            # return empty to avoid producing sample for non-NodeManager"},{"line_number":212,"context_line":"            return {}"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_f6d48a21","line":210,"updated":"2014-09-11 14:29:40.000000000","message":"same.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        if self._init_sensor_agent_process()[\u0027ret\u0027] \u003d\u003d [\u002701\u0027]:"},{"line_number":216,"context_line":"            return"},{"line_number":217,"context_line":"        # Run sensor initialization agent"},{"line_number":218,"context_line":"        for i in range(0, CONF.ipmi.nm_init_retry):"},{"line_number":219,"context_line":"            self._init_sensor_agent()"},{"line_number":220,"context_line":"            # NOTE(fengqian): Ensure the initialization complete"},{"line_number":221,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_d64f8632","line":218,"updated":"2014-09-11 14:29:40.000000000","message":"the start 0 value isn\u0027t needed.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ed831598120217657778b217237f19401356efe3","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        # Run sensor initialization agent"},{"line_number":218,"context_line":"        for i in range(0, CONF.ipmi.nm_init_retry):"},{"line_number":219,"context_line":"            self._init_sensor_agent()"},{"line_number":220,"context_line":"            # NOTE(fengqian): Ensure the initialization complete"},{"line_number":221,"context_line":"            time.sleep(1)"},{"line_number":222,"context_line":"            if self._init_sensor_agent_process()[\u0027ret\u0027] \u003d\u003d [\u002701\u0027]:"},{"line_number":223,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_76e89ae2","line":220,"updated":"2014-09-11 14:29:40.000000000","message":"this note isn\u0027t really helpful","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"dea523c284993da2e1b639f76eab381a216cd838","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        for i in range(0, CONF.ipmi.nm_init_retry):"},{"line_number":219,"context_line":"            self._init_sensor_agent()"},{"line_number":220,"context_line":"            # NOTE(fengqian): Ensure the initialization complete"},{"line_number":221,"context_line":"            time.sleep(1)"},{"line_number":222,"context_line":"            if self._init_sensor_agent_process()[\u0027ret\u0027] \u003d\u003d [\u002701\u0027]:"},{"line_number":223,"context_line":"                return"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_5aa9f48e","line":221,"updated":"2014-09-11 17:55:13.000000000","message":"How robust is this? Does sleeping for 1 second ensure the initialization? Is there no way to poll for \u0027ready\u0027 status?","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d6f4bf029308f007b1345df22e0ccbbfa86e8097","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        for i in range(0, CONF.ipmi.nm_init_retry):"},{"line_number":219,"context_line":"            self._init_sensor_agent()"},{"line_number":220,"context_line":"            # NOTE(fengqian): Ensure the initialization complete"},{"line_number":221,"context_line":"            time.sleep(1)"},{"line_number":222,"context_line":"            if self._init_sensor_agent_process()[\u0027ret\u0027] \u003d\u003d [\u002701\u0027]:"},{"line_number":223,"context_line":"                return"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_786955f8","line":221,"in_reply_to":"fa98f980_5aa9f48e","updated":"2014-09-12 01:25:49.000000000","message":"In our tests. It\u0027s ok. self._init_sensor_agent_process() is used for \u0027ready\u0027 status test.","commit_id":"0859caa643aa297f2b92e0b60fd508e7384fe56e"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"82ac5bb71afda60a5954e2ee25930194009d2cee","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                           help\u003d\u0027In Node Manager init, init cmd then status \u0027"},{"line_number":38,"context_line":"                                \u0027check was issued to enable Node Manager \u0027"},{"line_number":39,"context_line":"                                \u0027engine. This option defines number of \u0027"},{"line_number":40,"context_line":"                                \u0027retries upon init failure\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa98f980_9485ddd0","line":40,"updated":"2014-09-12 08:05:37.000000000","message":"Sorry, I didn\u0027t mean for you to explain the init implementation here. I just wanted it to be clearer, which you already achieved in your second sentence here. What about just \u0027Number of retries upon Intel Node Manager initialization failure.\u0027 then?","commit_id":"96010820d9d6710ceff3eec4ed68799f9eee50b9"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3705e650553759ec261121cc3766ca130c43acce","unresolved":false,"context_lines":[{"line_number":38,"context_line":"except ImportError:"},{"line_number":39,"context_line":"    import ordereddict"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"nm_init_retry \u003d cfg.IntOpt(\u0027nm_init_retry\u0027,"},{"line_number":42,"context_line":"                           default\u003d3,"},{"line_number":43,"context_line":"                           help\u003d\u0027Number of retries upon Intel Node Manager \u0027"},{"line_number":44,"context_line":"                                \u0027initialization failure\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_5290e2ec","line":41,"updated":"2014-09-12 11:49:47.000000000","message":"I think node_manager_ would be far more readable here than nm_","commit_id":"403b6e95de0fdf7f98331f599a67735303cc8e1c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3705e650553759ec261121cc3766ca130c43acce","unresolved":false,"context_lines":[{"line_number":58,"context_line":"              \"read_temperature_all\":"},{"line_number":59,"context_line":"              \"raw 0x2e 0xc8 0x57 0x01 0x00 0x02 0x00 0x00\"}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"MANUFACTURER_ID \u003d {\"Intel\": [\u002757\u0027, \u002701\u0027, \u002700\u0027]}"},{"line_number":62,"context_line":"INTEL_PREFIX \u003d \u00275701000d01\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# The template dict are made according to the spec. It contains the expected"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_72524636","line":61,"updated":"2014-09-12 11:49:47.000000000","message":"Since Intel seems to be the only node manager manufacturer supported, I\u0027m struggling to see the purpose of this dict.","commit_id":"403b6e95de0fdf7f98331f599a67735303cc8e1c"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"0f55b2bcab879499bb22858416117ab18982f67e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"              \"read_temperature_all\":"},{"line_number":59,"context_line":"              \"raw 0x2e 0xc8 0x57 0x01 0x00 0x02 0x00 0x00\"}"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"MANUFACTURER_ID \u003d {\"Intel\": [\u002757\u0027, \u002701\u0027, \u002700\u0027]}"},{"line_number":62,"context_line":"INTEL_PREFIX \u003d \u00275701000d01\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# The template dict are made according to the spec. It contains the expected"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_847e6f17","line":61,"in_reply_to":"fa98f980_72524636","updated":"2014-09-13 07:19:04.000000000","message":"\u003d\u003e MANUFACTURER_ID_INTEL \u003d [\u002757\u0027, \u002701\u0027, \u002700\u0027]","commit_id":"403b6e95de0fdf7f98331f599a67735303cc8e1c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3705e650553759ec261121cc3766ca130c43acce","unresolved":false,"context_lines":[{"line_number":82,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Current_value\u0027] \u003d 2"},{"line_number":83,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Minimum_value\u0027] \u003d 2"},{"line_number":84,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Maximum_value\u0027] \u003d 2"},{"line_number":85,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Average_value\u0027] \u003d 2"},{"line_number":86,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Time_stamp\u0027] \u003d 4"},{"line_number":87,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Report_period\u0027] \u003d 4"},{"line_number":88,"context_line":"NM_STATISTICS_TEMPLATE[\"DomainID_PolicyState\"] \u003d 1"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_15de446d","line":85,"updated":"2014-09-12 11:49:47.000000000","message":"Since we now only report the Current_Value in the pollsters:\n\n  https://review.openstack.org/#/c/119038/13/ceilometer/ipmi/pollsters/node.py\n\ndo we still need to include the {Minimum|Maximum|Average}_value in the result?","commit_id":"403b6e95de0fdf7f98331f599a67735303cc8e1c"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"0f55b2bcab879499bb22858416117ab18982f67e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Current_value\u0027] \u003d 2"},{"line_number":83,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Minimum_value\u0027] \u003d 2"},{"line_number":84,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Maximum_value\u0027] \u003d 2"},{"line_number":85,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Average_value\u0027] \u003d 2"},{"line_number":86,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Time_stamp\u0027] \u003d 4"},{"line_number":87,"context_line":"NM_STATISTICS_TEMPLATE[\u0027Report_period\u0027] \u003d 4"},{"line_number":88,"context_line":"NM_STATISTICS_TEMPLATE[\"DomainID_PolicyState\"] \u003d 1"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa98f980_2431435a","line":85,"in_reply_to":"fa98f980_15de446d","updated":"2014-09-13 07:19:04.000000000","message":"Eoghan,\n\nThis is string returned by Node Manager with strict format defined in spec. We need check all in case of HW failure. e.g. If short string comes, we should discard it instead of pickup up current_value only, because this data is probably wrong.","commit_id":"403b6e95de0fdf7f98331f599a67735303cc8e1c"}],"ceilometer/ipmi/plugin.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"25d70ad509dd4f70a1c09e22af5e01b80ef5e354","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_9c6bce84","line":1,"updated":"2014-08-26 10:59:06.000000000","message":"empty line?","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"25d70ad509dd4f70a1c09e22af5e01b80ef5e354","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_dc0466c8","line":2,"updated":"2014-08-26 10:59:06.000000000","message":"2013 -\u003e 2014 ?","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":25,"context_line":"class IPMIPollster(plugin.PollsterBase):"},{"line_number":26,"context_line":"    \"\"\"Base class for plugins."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    It supports the polling API on the IPMI capable node."}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_d952e167","line":25,"updated":"2014-08-25 13:31:08.000000000","message":"this whole file isn\u0027t needed since it adds nothing unique to plugin.PollsterBase","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"9128be15510a99e4b48cc221fc325ff49b992681","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":25,"context_line":"class IPMIPollster(plugin.PollsterBase):"},{"line_number":26,"context_line":"    \"\"\"Base class for plugins."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    It supports the polling API on the IPMI capable node."}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_e3450cb4","line":25,"in_reply_to":"1abeadc6_d952e167","updated":"2014-08-26 08:24:32.000000000","message":"Let\u0027s keep it for now. Will remove it if no requirement coming from  other comments.","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"e7c3b13c79bd40ded589b15d50d49bfde85be2ad","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class IPMIPollster(plugin.PollsterBase):"},{"line_number":25,"context_line":"    \"\"\"Base class for plugins."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    It supports the polling API on the IPMI capable node."}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_4e79fbc6","line":24,"updated":"2014-08-29 03:25:42.000000000","message":"If no changes to the base class, let\u0027s remove this now, keep the LOC small :)","commit_id":"48b01ed1a63b3947d18b0b25cc731b41272c8cd7"}],"ceilometer/ipmi/pollsters/data.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"b1d1636bfac34947a0396583c32e156d707a5388","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.current\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_1cb85de4","line":80,"updated":"2014-09-03 02:21:17.000000000","message":"I think is the wrong meter name","commit_id":"99cfac8467eeff7620370b56a96ada99a5673923"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def read_data(self):"},{"line_number":41,"context_line":"        \"\"\"Return data sample for IPMI.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":46,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_5874aa67","line":43,"updated":"2014-09-03 07:23:57.000000000","message":"Is the pass statement actually needed here, given that the method is abstract and has a docstr?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def read_data(self):"},{"line_number":41,"context_line":"        \"\"\"Return data sample for IPMI.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":46,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_aefe2cac","line":43,"in_reply_to":"fa98f980_5874aa67","updated":"2014-09-03 10:12:12.000000000","message":"Use it to pass pep8 test.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":46,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":47,"context_line":"        stats \u003d self.read_data()"},{"line_number":48,"context_line":"        # Can add more samples besides current in future"},{"line_number":49,"context_line":"        self._data[\"platform.current\"] \u003d node_manager._hex("}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_98b7f239","line":46,"updated":"2014-09-03 07:23:57.000000000","message":"Why do we need to recreate the NodeManager on each polling cycle for each pollster?\n\nCould this be done once upfront?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":46,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":47,"context_line":"        stats \u003d self.read_data()"},{"line_number":48,"context_line":"        # Can add more samples besides current in future"},{"line_number":49,"context_line":"        self._data[\"platform.current\"] \u003d node_manager._hex("}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_4ee940e5","line":46,"in_reply_to":"fa98f980_98b7f239","updated":"2014-09-03 10:12:12.000000000","message":"For unit test. The __init__ will be called immediately to trap into true NodeManager \u0027s code even with mock.\nThis way, we can take place of the object when using it.\n\nBTW, NodeManager is designed as singleton, so no duplicated initialization.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":47,"context_line":"        stats \u003d self.read_data()"},{"line_number":48,"context_line":"        # Can add more samples besides current in future"},{"line_number":49,"context_line":"        self._data[\"platform.current\"] \u003d node_manager._hex("},{"line_number":50,"context_line":"            stats[\"Current_value\"])"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        data_sample \u003d sample.Sample("}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_9818d21f","line":49,"updated":"2014-09-03 07:23:57.000000000","message":"Possible confusion here between \"current\" meaning the value of something pertaining right now, and \"current\" meaning the flow of electricity as suggested by the hardware.ipmi.current meter.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":47,"context_line":"        stats \u003d self.read_data()"},{"line_number":48,"context_line":"        # Can add more samples besides current in future"},{"line_number":49,"context_line":"        self._data[\"platform.current\"] \u003d node_manager._hex("},{"line_number":50,"context_line":"            stats[\"Current_value\"])"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        data_sample \u003d sample.Sample("}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_6e7b6428","line":49,"in_reply_to":"fa98f980_9818d21f","updated":"2014-09-03 10:12:12.000000000","message":"XXX\nYes, maybe use \"cur_val\", \"ave_val\"?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_58974a48","line":80,"updated":"2014-09-03 07:23:57.000000000","message":"In the notification-based approach, we report a meter called \"hardware.ipmi.current\" with a power-like unit, i.e. watts:\n\n  http://docs.openstack.org/developer/ceilometer/measurements.html#ironic-hardware-ipmi-sensor-data\n\nWhat\u0027s the relationship with with your hardware.ipmi.power meter?\n\nShouldn\u0027t the same meters be reported in both cases?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"fdf9b68a8a70b7db6a5984e56999d8765f04d003","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_f9147da1","line":80,"in_reply_to":"fa98f980_39560507","updated":"2014-09-03 10:38:26.000000000","message":"The gist of the discussion is at my comment on the review at \"07-19 14:32\" (can you link directly to comments?):\n\n\"I asked Haomeng about that (on the producer-side review: https://review.openstack.org/#/c/72538/ ) and the gist that they are using the names as driven by the ipmitool output. Some of the power related sensors are current, some are power, but they have the _name_ current. So if there is a bug, it is in the ipmitool and it would be complex (in the sense of too many participants) to manage mappings from \"bad ipmitool\" to good Ironic+Ceilometer.\"\n\nThis was followed by discussion of a \"later patch\" which I think translates to \"we\u0027ll deal with that when someone reports a bug or otherwise complains\".","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b6085eecdf0305ccb1a3bed51f8b73bf1e517568","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_8453046a","line":80,"in_reply_to":"fa98f980_44103ca8","updated":"2014-09-03 11:10:16.000000000","message":"Yes, that\u0027s what I meant by \"bug should be registered with the Ironic implementation\"","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_8eab2874","line":80,"in_reply_to":"fa98f980_58974a48","updated":"2014-09-03 10:12:12.000000000","message":"Lianhao and I believe it\u0027s a bug in ironic metrics. As you said, current is the flow of electricity, so the unit should be \"A\" instead of \"Watts\".\n\nThey should be different meters.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e534a3e3eca694b6b79f1631f1bdd4fa3981f791","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_44103ca8","line":80,"in_reply_to":"fa98f980_64e9c0e5","updated":"2014-09-03 11:07:54.000000000","message":"@cdent: or else we land a corresponding fix to line up the naming in the ironic notification hanlder?\n\n(This could be done post-j3 potentially)","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a07108d8624939d7cc8c450e8fc5a1e8ef036a99","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_240b387e","line":80,"in_reply_to":"fa98f980_64e9c0e5","updated":"2014-09-03 11:14:14.000000000","message":"As Chris said, this may be a ipmitool bug, or hardware bug. Agree with Chris, reflect both meter names in doc","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"59263735d1dcd032c6a9457a7b4605287b47a1c9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_39560507","line":80,"in_reply_to":"fa98f980_8eab2874","updated":"2014-09-03 10:27:21.000000000","message":"We will need to line these up somehow.\n\n@cdent: IIRC this question of current versus power came up in the review ironic notifications patch:\n\n  https://review.openstack.org/105486\n\nWhat was the eventual outcome of that discussion with the Ironic folks, do you recall?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a0745bed1a053f3e3ea019f65919079d91ef2ef6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_64e9c0e5","line":80,"in_reply_to":"fa98f980_c446ec4e","updated":"2014-09-03 10:56:59.000000000","message":"I\u0027m undecided on that matter. The patchset currently under review assumes a context either without or at least separate from Ironic, so the different names shouldn\u0027t present a conflict. My preference would be for everyone to become \"right\" and we are more likely to reach that level of rightness if we have at least one piece of rightness in place, thus this patch should be considered correct and a bug should be registered with the Ironic implementation. If that\u0027s done we\u0027ll need to decide where in the stack we want to fix it but that discussion wouldn\u0027t need to happen here.\n\nHowever if we do go with this name in this patchset, then the docs need, for the time being, to reflect the existence of both meter names.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"95fe1ddee24c066cfbf3b881417e274be5dc8bb7","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_c446ec4e","line":80,"in_reply_to":"fa98f980_f9147da1","updated":"2014-09-03 10:50:06.000000000","message":"@cdent: so would it make sense for all of ceilometer and ironic to move in lockstep on this (possibily incorrect) naming?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def read_data(self):"},{"line_number":86,"context_line":"        return self.nodemanager.read_power_all()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_18406206","line":86,"updated":"2014-09-03 07:23:57.000000000","message":"I expected to see pollsters for hardware.ipmi.fan and hardware.ipmi.voltage also - am I missing something?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def read_data(self):"},{"line_number":86,"context_line":"        return self.nodemanager.read_power_all()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_ce061086","line":86,"in_reply_to":"fa98f980_18406206","updated":"2014-09-03 10:12:12.000000000","message":"Another patch coming soon to get all raw IPMI data like ironic. But I think these data are not so meaningful for cloud admin. e.g. all Fan sensors are reported as same \"hardware.ipmi.fan\" without  sensor ID.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"59263735d1dcd032c6a9457a7b4605287b47a1c9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def read_data(self):"},{"line_number":86,"context_line":"        return self.nodemanager.read_power_all()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_f9763da3","line":86,"in_reply_to":"fa98f980_ce061086","updated":"2014-09-03 10:27:21.000000000","message":"Well, in the ironic notification handler we create a resource ID of form:\n\n  \u0027%(nodeid)s-%(sensorid)s\u0027\n\nso the sensor ID is not discarded.\n\nAlso can you clarify what milestone the \"another patch coming soon\" will be target\u0027d at? It will have missed the juno-3 milestone, but sounds a bit too featureful to get in as a bugfix for RC1.\n\nWould we need a feature-freeze-exception to land it for Juno?\n\nOr would it be more of a kilo-1 thing?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a07108d8624939d7cc8c450e8fc5a1e8ef036a99","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def read_data(self):"},{"line_number":86,"context_line":"        return self.nodemanager.read_power_all()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_44483c87","line":86,"in_reply_to":"fa98f980_f9763da3","updated":"2014-09-03 11:14:14.000000000","message":"I\u0027d like to make this patch ASAP. Test is on going. But it duplicate some code from ironic and ceilometer, and probably need more review or more polish work.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"46e35bed5325b435d59ad56904f9f2e301aed8a8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            volume\u003dself._data[\"platform.cur_val\"],"},{"line_number":57,"context_line":"            user_id\u003dNone,"},{"line_number":58,"context_line":"            project_id\u003dNone,"},{"line_number":59,"context_line":"            resource_id\u003dCONF.host,"},{"line_number":60,"context_line":"            timestamp\u003dtimeutils.utcnow().isoformat(),"},{"line_number":61,"context_line":"            resource_metadata\u003dNone)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_59a909de","line":59,"updated":"2014-09-03 10:28:11.000000000","message":"Just noticed that the resource_id naming scheme is inconsistent with the scheme used for ironic notifications, i.e. it should be \u0027$HOST-$SENSOR_ID\u0027 (the concatenation of hostname and sensor ID).","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bb6ad1c22310b79069cb6a30fdf39b850a667921","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            volume\u003dself._data[\"platform.cur_val\"],"},{"line_number":57,"context_line":"            user_id\u003dNone,"},{"line_number":58,"context_line":"            project_id\u003dNone,"},{"line_number":59,"context_line":"            resource_id\u003dCONF.host,"},{"line_number":60,"context_line":"            timestamp\u003dtimeutils.utcnow().isoformat(),"},{"line_number":61,"context_line":"            resource_metadata\u003dNone)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_c4bfcca8","line":59,"in_reply_to":"fa98f980_59a909de","updated":"2014-09-03 11:02:48.000000000","message":"Ah yeah, I should have noticed that too, very good point. This is the way that different sensors with the same meter (such as fan rpm) distinguish themselves.","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a3d911164fed88c0c617df181f527a24d6161a98","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            volume\u003dself._data[\"platform.cur_val\"],"},{"line_number":57,"context_line":"            user_id\u003dNone,"},{"line_number":58,"context_line":"            project_id\u003dNone,"},{"line_number":59,"context_line":"            resource_id\u003dCONF.host,"},{"line_number":60,"context_line":"            timestamp\u003dtimeutils.utcnow().isoformat(),"},{"line_number":61,"context_line":"            resource_metadata\u003dNone)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_e4069085","line":59,"in_reply_to":"fa98f980_59a909de","updated":"2014-09-03 11:04:00.000000000","message":"I will follow this rule for the sensor data. This is NM command via IPMI protocal to get the overall system data, like power/thermal. So no sensor_id for it","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3cb9c8972d2c01de42dd695651e773aa72ddeafe","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_d6714645","line":80,"updated":"2014-09-03 10:13:22.000000000","message":"Just a note: Though the use of \"power\" is accurate here it is different from the way ironic implements (and names) the same meter. It uses \u0027current\u0027 because that\u0027s what impitool outputs as the name of the data and there is direct use of the output to determine the meter name.\n\nThis difference could cause some confusion in the documentation.","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e27760ca2bd5c34a00b726612746333c10b8fe3e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class PowerPollster(_Base):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self):"},{"line_number":80,"context_line":"        self._name \u003d \"hardware.ipmi.power\""},{"line_number":81,"context_line":"        self._type \u003d sample.TYPE_GAUGE"},{"line_number":82,"context_line":"        self._unit \u003d \"W\""},{"line_number":83,"context_line":"        super(PowerPollster, self).__init__()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_b9e3d5a2","line":80,"in_reply_to":"fa98f980_d6714645","updated":"2014-09-03 10:52:18.000000000","message":"We believe \u0027current\u0027 is the flow of electricity, so the unit should be \"A\" instead of \"W\" in ironic. Yes, they are 2 different meters. Need declare it in the doc","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"}],"ceilometer/ipmi/pollsters/power.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_dca12af9","line":1,"updated":"2014-08-22 14:21:01.000000000","message":"Empty line in useless from the very beginning of the file","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1b29562ad6c923c5f4664e0f696debaf9cf1c9b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_52f0a8c8","line":2,"updated":"2014-08-22 12:58:52.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":24,"context_line":"CONF \u003d cfg.CONF"},{"line_number":25,"context_line":"CONF.import_opt(\u0027host\u0027, \u0027ceilometer.service\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class _Base(plugin.IPMIPollster):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_79cb8d1e","line":27,"updated":"2014-08-25 13:31:08.000000000","message":"never used","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class VoltagePollster(_Base):"},{"line_number":36,"context_line":"    voltage_value \u003d 159"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_99e789ac","line":36,"updated":"2014-08-25 13:31:08.000000000","message":"can you add a note to explain why this is hardcoded?","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"9128be15510a99e4b48cc221fc325ff49b992681","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class VoltagePollster(_Base):"},{"line_number":36,"context_line":"    voltage_value \u003d 159"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_12796f93","line":36,"in_reply_to":"1abeadc6_99e789ac","updated":"2014-08-26 08:24:32.000000000","message":"This is code framework to get sample for each type, and I have no idea . For power and temperature, we can get it via Node Manager since it\u0027s more readable. For Fan and Voltage, I can\u0027t get summary data via bare IPMI protocal and don\u0027t want produce too many low level raw data(platform specific) as it\u0027s not much meaningful for cloud admin.\n\nIt\u0027s why I put hard code here for Fan and Voltage.","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class FanPollster(_Base):"},{"line_number":57,"context_line":"    fan_value \u003d 89"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_199299f6","line":57,"updated":"2014-08-25 13:31:08.000000000","message":"same as above","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class TemperaturePollster(_Base):"},{"line_number":78,"context_line":"    temp_value \u003d 69"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Can add more metric in future"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_398f55ce","line":79,"updated":"2014-08-25 13:31:08.000000000","message":"same as above","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":109,"context_line":"        stats \u003d self.nodemanager.read_power_all()"},{"line_number":110,"context_line":"        self._data[\"platform.power.current\"] \u003d node_manager._hex("},{"line_number":111,"context_line":"            stats[\"Current_value\"])"},{"line_number":112,"context_line":"        self._data[\"platform.power.average\"] \u003d node_manager._hex("},{"line_number":113,"context_line":"            stats[\"Average_value\"])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_d98741b5","line":110,"updated":"2014-08-25 13:31:08.000000000","message":"why set all these values if only platform.power.current is used","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"9128be15510a99e4b48cc221fc325ff49b992681","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":109,"context_line":"        stats \u003d self.nodemanager.read_power_all()"},{"line_number":110,"context_line":"        self._data[\"platform.power.current\"] \u003d node_manager._hex("},{"line_number":111,"context_line":"            stats[\"Current_value\"])"},{"line_number":112,"context_line":"        self._data[\"platform.power.average\"] \u003d node_manager._hex("},{"line_number":113,"context_line":"            stats[\"Average_value\"])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_f2e87318","line":110,"in_reply_to":"1abeadc6_d98741b5","updated":"2014-08-26 08:24:32.000000000","message":"Keep them for future usage. Because average,max and min value in last period are all useful for cloud admin","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"eaa218b8b4c7835aacf27574f79b632066503c65","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class VoltagePollster(_Base):"},{"line_number":33,"context_line":"    # hard code value for test, as hard to get meaningful data via IPMI"},{"line_number":34,"context_line":"    voltage_value \u003d 159"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_ab47e1a1","line":34,"updated":"2014-08-29 03:15:13.000000000","message":"If it\u0027s not available, I don\u0027t think we need to add these invalid pollsters here.","commit_id":"48b01ed1a63b3947d18b0b25cc731b41272c8cd7"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"eaa218b8b4c7835aacf27574f79b632066503c65","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class FanPollster(_Base):"},{"line_number":54,"context_line":"    # hard code value for test, as hard to get meaningful data via IPMI"},{"line_number":55,"context_line":"    fan_value \u003d 89"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_4bdd6ddf","line":55,"updated":"2014-08-29 03:15:13.000000000","message":"ditto","commit_id":"48b01ed1a63b3947d18b0b25cc731b41272c8cd7"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"eaa218b8b4c7835aacf27574f79b632066503c65","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # Can add more samples besides current in future"},{"line_number":122,"context_line":"        self._data[\"platform.power.current\"] \u003d node_manager._hex("},{"line_number":123,"context_line":"            stats[\"Current_value\"])"},{"line_number":124,"context_line":"        self._data[\"platform.power.average\"] \u003d node_manager._hex("},{"line_number":125,"context_line":"            stats[\"Average_value\"])"},{"line_number":126,"context_line":"        self._data[\"platform.power.max\"] \u003d node_manager._hex("},{"line_number":127,"context_line":"            stats[\"Maximum_value\"])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_0bb5357d","line":124,"updated":"2014-08-29 03:15:13.000000000","message":"If values other than platform.power.current are not used, I think it\u0027d probably better to remove these lines and add them back in the future if new requirement comes","commit_id":"48b01ed1a63b3947d18b0b25cc731b41272c8cd7"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"755ca0edc98092ff8417f1b2eb2b8836bf745800","unresolved":false,"context_lines":[{"line_number":24,"context_line":"CONF.import_opt(\u0027host\u0027, \u0027ceilometer.service\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class _Base(plugin.PollsterBase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    CACHE_KEY \u003d \u0027power\u0027"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_3dc49f91","line":27,"updated":"2014-09-01 12:51:16.000000000","message":"There is substantial overlap between the two subclasses. The main differences are in the name, type, unit and volume value of the sample and the nodemanager methods used to gather data. Perhaps some of that common code could be extracted?","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"755ca0edc98092ff8417f1b2eb2b8836bf745800","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    CACHE_KEY \u003d \u0027power\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TemperaturePollster(_Base):"},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        self._data \u003d {\u0027platform.temperature.current\u0027: 0,"},{"line_number":35,"context_line":"                      \u0027platform.temperature.average\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_62ce825c","line":32,"updated":"2014-09-01 12:51:16.000000000","message":"Maybe this has been covered before, but why is Temperature in here with Power?","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"698b20c18e33c85946750f0abaaee59f60252ea1","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    CACHE_KEY \u003d \u0027power\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TemperaturePollster(_Base):"},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        self._data \u003d {\u0027platform.temperature.current\u0027: 0,"},{"line_number":35,"context_line":"                      \u0027platform.temperature.average\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_7a550d4f","line":32,"in_reply_to":"fa98f980_5803fc0c","updated":"2014-09-02 10:56:32.000000000","message":"renaming this file to data.py, __init__.py or putting everything in pollsters.py (and removing the directory) makes much more sense than having a confusing filename. The line in setup.cfg ends up looking incorrect.","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"08b1c8f5a415894e646299b2b8b531ba3bc950c2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    CACHE_KEY \u003d \u0027power\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TemperaturePollster(_Base):"},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        self._data \u003d {\u0027platform.temperature.current\u0027: 0,"},{"line_number":35,"context_line":"                      \u0027platform.temperature.average\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_5803fc0c","line":32,"in_reply_to":"fa98f980_62ce825c","updated":"2014-09-02 08:13:25.000000000","message":"you mean why put temperature in power.py? maybe we can change the file name to data.py? You know, when more pollster added in future, we can adjust it.","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"db6ef33d6fadd1b0fb91cce9f2efc5aa87c5dc41","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":42,"context_line":"        stats \u003d self.nodemanager.read_temperature_all()"},{"line_number":43,"context_line":"        # Can add more samples besides current in future"},{"line_number":44,"context_line":"        self._data[\"platform.temperature.current\"] \u003d node_manager._hex("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_63ddba14","line":41,"updated":"2014-09-01 01:13:00.000000000","message":"can we move this into __init__()? do we need to init/check the NM status and discover the slave channel every time when we get the samples?","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"dd992ecd2292b6745e5c3036238831c288c25719","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.nodemanager \u003d node_manager.NodeManager()"},{"line_number":42,"context_line":"        stats \u003d self.nodemanager.read_temperature_all()"},{"line_number":43,"context_line":"        # Can add more samples besides current in future"},{"line_number":44,"context_line":"        self._data[\"platform.temperature.current\"] \u003d node_manager._hex("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_03001566","line":41,"in_reply_to":"fa98f980_63ddba14","updated":"2014-09-02 13:51:31.000000000","message":"NodeManager is singleton now, maybe strict check in __init__ can avoid duplicated initialization of NM.","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"db6ef33d6fadd1b0fb91cce9f2efc5aa87c5dc41","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self._data[\"platform.temperature.current\"] \u003d node_manager._hex("},{"line_number":45,"context_line":"            stats[\"Current_value\"])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        for i in range(1):"},{"line_number":48,"context_line":"            yield sample.Sample("},{"line_number":49,"context_line":"                name\u003d\"hardware.ipmi.temperature\","},{"line_number":50,"context_line":"                type\u003dsample.TYPE_GAUGE,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_83bffecf","line":47,"updated":"2014-09-01 01:13:00.000000000","message":"why need this?","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"90bfd2391ddf827a461349b704b5c86c457f9ece","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self._data[\"platform.temperature.current\"] \u003d node_manager._hex("},{"line_number":45,"context_line":"            stats[\"Current_value\"])"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        for i in range(1):"},{"line_number":48,"context_line":"            yield sample.Sample("},{"line_number":49,"context_line":"                name\u003d\"hardware.ipmi.temperature\","},{"line_number":50,"context_line":"                type\u003dsample.TYPE_GAUGE,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_d6253bac","line":47,"in_reply_to":"fa98f980_83bffecf","updated":"2014-09-01 09:08:16.000000000","message":"0_0 yeah, did not see that!\nthat is actually really strange construction","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"755ca0edc98092ff8417f1b2eb2b8836bf745800","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                user_id\u003dNone,"},{"line_number":54,"context_line":"                project_id\u003dNone,"},{"line_number":55,"context_line":"                resource_id\u003dCONF.host,"},{"line_number":56,"context_line":"                timestamp\u003dNone,"},{"line_number":57,"context_line":"                resource_metadata\u003dNone"},{"line_number":58,"context_line":"            )"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_fda5b704","line":56,"updated":"2014-09-01 12:51:16.000000000","message":"Do you really want a timestamp of None? Even if somewhere deeper in the processing of the sample will assign a timestamp there\u0027s no guarantee it is going to be near the time that the sample is actually taken.","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"db6ef33d6fadd1b0fb91cce9f2efc5aa87c5dc41","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self._data[\"platform.power.current\"] \u003d node_manager._hex("},{"line_number":75,"context_line":"            stats[\"Current_value\"])"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        for i in range(1):"},{"line_number":78,"context_line":"            yield sample.Sample("},{"line_number":79,"context_line":"                name\u003d\"hardware.ipmi.current\","},{"line_number":80,"context_line":"                type\u003dsample.TYPE_GAUGE,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_a3b402f3","line":77,"updated":"2014-09-01 01:13:00.000000000","message":"ditto","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"755ca0edc98092ff8417f1b2eb2b8836bf745800","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                user_id\u003dNone,"},{"line_number":84,"context_line":"                project_id\u003dNone,"},{"line_number":85,"context_line":"                resource_id\u003dCONF.host,"},{"line_number":86,"context_line":"                timestamp\u003dNone,"},{"line_number":87,"context_line":"                resource_metadata\u003dNone"},{"line_number":88,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_7db9c72d","line":86,"updated":"2014-09-01 12:51:16.000000000","message":"Same as above.","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"}],"ceilometer/openstack/common/processutils.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1b29562ad6c923c5f4664e0f696debaf9cf1c9b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_92bde0da","line":1,"updated":"2014-08-22 12:58:52.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    :discard_warnings   True | False. Defaults to False. If set to True,"},{"line_number":224,"context_line":"                        then for succeeding commands, stderr is cleared"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    \"\"\""},{"line_number":227,"context_line":"    discard_warnings \u003d kwargs.pop(\u0027discard_warnings\u0027, False)"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_fc57c6c7","line":225,"updated":"2014-08-22 14:21:01.000000000","message":"Empty line is not needed here","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"571f8f356d483515232e560acb6933c376df2775","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"System-level utilities and helper functions."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import errno"},{"line_number":21,"context_line":"import logging as stdlib_logging"},{"line_number":22,"context_line":"import multiprocessing"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_b40d2c3a","line":19,"updated":"2014-08-25 13:31:08.000000000","message":"this needs to be added to openstack-common.conf if you plan on using it.","commit_id":"9543b3c2cbc6ed7a2172d2537c43318bbc99e8df"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    try:"},{"line_number":283,"context_line":"        return multiprocessing.cpu_count()"},{"line_number":284,"context_line":"    except NotImplementedError:"},{"line_number":285,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_3db438d0","line":285,"updated":"2014-09-03 07:23:57.000000000","message":"Since this entire module is copied from oslo-incubator, it might have made more sense to sync it from oslo *first* via the managed copy\u0027n\u0027paste process:\n\n  https://wiki.openstack.org/wiki/Oslo#Syncing_Code_from_Incubator\n\nas opposed to simply copying into this patch directly.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    try:"},{"line_number":283,"context_line":"        return multiprocessing.cpu_count()"},{"line_number":284,"context_line":"    except NotImplementedError:"},{"line_number":285,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_4e6f802b","line":285,"in_reply_to":"fa98f980_3db438d0","updated":"2014-09-03 10:12:12.000000000","message":"XXX.\nOk.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"}],"ceilometer/tests/ipmi/nodemanager/test_node_manager.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel Corp."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_7c6bb684","line":1,"updated":"2014-08-22 14:21:01.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"}],"ceilometer/tests/ipmi/platform/test_ipmi_sensor.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"0b2c5c6de7761d3703ed9cefd4b468c6b142e886","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TestIPMISensor, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.ipmi \u003d ipmi_sensor.IPMISensor()"},{"line_number":30,"context_line":"        if not self.ipmi.ipmi_support:"},{"line_number":31,"context_line":"            # Use fake node"},{"line_number":32,"context_line":"            fake_sensor \u003d {"},{"line_number":33,"context_line":"                \u0027Temperature\u0027: {"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_f8fbd044","line":30,"updated":"2014-09-10 01:15:37.000000000","message":"I don\u0027t think we should assume the unit test cases will run on machines that have ipmi hw support. The unit test\u0027s purpose is to test the logic in our code, so maybe you should mock the situation of fake ipmi hardware supported is detected no matter what the situation is.","commit_id":"5753923c3bbd3591350cbe08c9fb6cbca46608af"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"37b3554ffeb7f01d83b4ade4d2f57a563e960096","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TestIPMISensor, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.ipmi \u003d ipmi_sensor.IPMISensor()"},{"line_number":30,"context_line":"        if not self.ipmi.ipmi_support:"},{"line_number":31,"context_line":"            # Use fake node"},{"line_number":32,"context_line":"            fake_sensor \u003d {"},{"line_number":33,"context_line":"                \u0027Temperature\u0027: {"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_ec5eabe8","line":30,"in_reply_to":"fa98f980_09f2016f","updated":"2014-09-10 07:52:55.000000000","message":"ok. I\u0027m adding test case for node_manager and IPMI without true hardware support.","commit_id":"5753923c3bbd3591350cbe08c9fb6cbca46608af"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a60a1ce1d81255aaf3e59bd468cdfcebf616d063","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TestIPMISensor, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.ipmi \u003d ipmi_sensor.IPMISensor()"},{"line_number":30,"context_line":"        if not self.ipmi.ipmi_support:"},{"line_number":31,"context_line":"            # Use fake node"},{"line_number":32,"context_line":"            fake_sensor \u003d {"},{"line_number":33,"context_line":"                \u0027Temperature\u0027: {"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_09f2016f","line":30,"in_reply_to":"fa98f980_f8fbd044","updated":"2014-09-10 07:31:24.000000000","message":"I agree with Lianhao here, having different paths through the test logic depending on the local hardware is not ideal from a reproducibility-of-failure standpoint.","commit_id":"5753923c3bbd3591350cbe08c9fb6cbca46608af"},{"author":{"_account_id":4992,"name":"malini-k-bhandaru","email":"malini.k.bhandaru@intel.com","username":"malini-k-bhandaru"},"change_message_id":"7df636f47785e1eee05a739d0e604d38be7149cf","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TestIPMISensor, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.ipmi \u003d ipmi_sensor.IPMISensor()"},{"line_number":30,"context_line":"        if not self.ipmi.ipmi_support:"},{"line_number":31,"context_line":"            # Use fake node"},{"line_number":32,"context_line":"            fake_sensor \u003d {"},{"line_number":33,"context_line":"                \u0027Temperature\u0027: {"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_78444074","line":30,"in_reply_to":"fa98f980_f8fbd044","updated":"2014-09-10 01:20:26.000000000","message":"We really should then mock data for two cases, a node with no ipmi support, a node with ipmi support, so we test both logic paths.","commit_id":"5753923c3bbd3591350cbe08c9fb6cbca46608af"}],"ceilometer/tests/ipmi/platform/test_node_manager.py":[{"author":{"_account_id":4992,"name":"malini-k-bhandaru","email":"malini.k.bhandaru@intel.com","username":"malini-k-bhandaru"},"change_message_id":"254fe19bf579307b80bccaca6bb15912e1127af2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            self.assertLessEqual(ave_val, max_val)"},{"line_number":61,"context_line":"            self.assertLessEqual(min_val, ave_val)"},{"line_number":62,"context_line":"        else:"},{"line_number":63,"context_line":"            self.assertEqual([\u002713\u0027, \u002700\u0027], power[\"Current_value\"])"},{"line_number":64,"context_line":"            self.assertEqual([\u002712\u0027, \u002700\u0027], power[\"Average_value\"])"},{"line_number":65,"context_line":"            self.assertEqual([\u002714\u0027, \u002700\u0027], power[\"Maximum_value\"])"},{"line_number":66,"context_line":"            self.assertEqual([\u002711\u0027, \u002700\u0027], power[\"Minimum_value\"])"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_932385a6","line":63,"updated":"2014-09-10 01:28:49.000000000","message":"This is a nit, but less human error if the expected value were self_assertEqual(fake_power[\"Current_value\"], power[\"Current_value\"]). Ditto for the others too.","commit_id":"5753923c3bbd3591350cbe08c9fb6cbca46608af"},{"author":{"_account_id":4992,"name":"malini-k-bhandaru","email":"malini.k.bhandaru@intel.com","username":"malini-k-bhandaru"},"change_message_id":"176b00c7c84d454d78b7c139890be9a6b122e038","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def test_read_power_all(self):"},{"line_number":75,"context_line":"        power \u003d self.nm.read_power_all()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # Non-Node Manager platform reture empty data"},{"line_number":78,"context_line":"        self.assertTrue(power \u003d\u003d {})"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_read_temperature_all(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_a2a2ceab","line":77,"updated":"2014-09-11 00:44:25.000000000","message":"nit, spelling \"return\"","commit_id":"126c0c06b8ceadeda800f6c233050b7ed7656ea9"},{"author":{"_account_id":4992,"name":"malini-k-bhandaru","email":"malini.k.bhandaru@intel.com","username":"malini-k-bhandaru"},"change_message_id":"176b00c7c84d454d78b7c139890be9a6b122e038","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_read_temperature_all(self):"},{"line_number":81,"context_line":"        temperature \u003d self.nm.read_temperature_all()"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Non-Node Manager platform reture empty data"},{"line_number":84,"context_line":"        self.assertTrue(temperature \u003d\u003d {})"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa98f980_c2a7d2bb","line":82,"updated":"2014-09-11 00:44:25.000000000","message":"nit, spelling \"return\"","commit_id":"126c0c06b8ceadeda800f6c233050b7ed7656ea9"}],"ceilometer/tests/ipmi/pollsters/base.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_9c66d2b9","line":1,"updated":"2014-08-22 14:21:01.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1b29562ad6c923c5f4664e0f696debaf9cf1c9b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_b28e5c2c","line":2,"updated":"2014-08-22 12:58:52.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"}],"ceilometer/tests/ipmi/pollsters/test_power.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"7ba2055131380479852fd0c0f709ff9ee6299d40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel Corp."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_5cf7dad2","line":1,"updated":"2014-08-22 14:21:01.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"1b29562ad6c923c5f4664e0f696debaf9cf1c9b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel Corp."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_52750830","line":2,"updated":"2014-08-22 12:58:52.000000000","message":"ditto","commit_id":"ce7b6e9c89d84196374683a40c56b64c2116e198"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"db6ef33d6fadd1b0fb91cce9f2efc5aa87c5dc41","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            \u0027ceilometer.ipmi.nodemanager.node_manager.NodeManager\u0027,"},{"line_number":93,"context_line":"            new\u003dFakeNodeManager))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        def _veryfy_temperature_metering(expected_temperature):"},{"line_number":96,"context_line":"            cache \u003d {}"},{"line_number":97,"context_line":"            resources \u003d {}"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_23f2d29a","line":95,"updated":"2014-09-01 01:13:00.000000000","message":"I think the 2  _veryfy_temperature_metering() methods defined in this file are exactly the same, may be move it into the base?","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"}],"ceilometer/tests/ipmi/test_manager.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"ef366e298b531b51af5c5978f21e185aa80a4086","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 Intel Corp."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_4a45a515","line":2,"updated":"2014-09-03 12:02:28.000000000","message":"2013?","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"}],"ceilometer/utils.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"eaa218b8b4c7835aacf27574f79b632066503c65","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def _get_root_helper():"},{"line_number":43,"context_line":"    return \u0027sudo nova-rootwrap %s\u0027 % CONF.rootwrap_config"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def execute(*cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_ae6fef5e","line":43,"updated":"2014-08-29 03:15:13.000000000","message":"We don\u0027t want nova-rootwrap come here. Just created a new ceilometer-rootwrap, even if it\u0027s mimic of nova-rootwrap.\n\nBesides, we need to create ceilometer\u0027s own rootwrap filters, otherwise, I don\u0027t think the rootwrap would work as expected.","commit_id":"48b01ed1a63b3947d18b0b25cc731b41272c8cd7"}],"doc/source/measurements.rst":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"602952360d5a1c35de12a3493e61ccfe8a31cf8f","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"There is another way to get IPMI data: Ceilometer IPMI agent, which runs on"},{"line_number":332,"context_line":"each IPMI capable node for data polling. To avoid conflict, IPMI agent should"},{"line_number":333,"context_line":"not be deployed if node is managed with Ironic."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"Dynamically retrieving the Meters via ceilometer client"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa98f980_ee8034c2","line":333,"updated":"2014-09-03 08:48:25.000000000","message":"Suggested re-wording:\n\nThere is another way to retrieve IPMI data, by deploying the Ceilometer IPMI agent on each IPMI-capable node in order to poll local sensor data. To avoid duplication of metering data and unnecessary load on the IPMI interface, the IPMI agent should not be deployed if the node is managed by Ironic and the \u0027conductor.send_sensor_data\u0027 option is set to true in the Ironic configuration.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a9a23cf4ba753635bfd8bfe845185d21f9b36857","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"There is another way to get IPMI data: Ceilometer IPMI agent, which runs on"},{"line_number":332,"context_line":"each IPMI capable node for data polling. To avoid conflict, IPMI agent should"},{"line_number":333,"context_line":"not be deployed if node is managed with Ironic."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"Dynamically retrieving the Meters via ceilometer client"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa98f980_760eda3c","line":333,"in_reply_to":"fa98f980_ee8034c2","updated":"2014-09-03 10:13:51.000000000","message":"Thanks for re-wording!\nIt\u0027s clear now.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3cb9c8972d2c01de42dd695651e773aa72ddeafe","unresolved":false,"context_lines":[{"line_number":324,"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":325,"context_line":"hardware.ipmi.fan              Gauge       RPM     fan sensor      notification  Fan RPM"},{"line_number":326,"context_line":"hardware.ipmi.temperature      Gauge       C       temp sensor     notification  Sensor Temperature Reading"},{"line_number":327,"context_line":"hardware.ipmi.current          Gauge       W       current sensor  notification  Sensor Current Reading"},{"line_number":328,"context_line":"hardware.ipmi.voltage          Gauge       V       voltage sensor  notification  Sensor Voltage Reading"},{"line_number":329,"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":330,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa98f980_76417aa8","line":327,"updated":"2014-09-03 10:13:22.000000000","message":"This is the location where the different meter name ought to be noted, or the difference should be resolved in some fashion.","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e27760ca2bd5c34a00b726612746333c10b8fe3e","unresolved":false,"context_lines":[{"line_number":324,"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":325,"context_line":"hardware.ipmi.fan              Gauge       RPM     fan sensor      notification  Fan RPM"},{"line_number":326,"context_line":"hardware.ipmi.temperature      Gauge       C       temp sensor     notification  Sensor Temperature Reading"},{"line_number":327,"context_line":"hardware.ipmi.current          Gauge       W       current sensor  notification  Sensor Current Reading"},{"line_number":328,"context_line":"hardware.ipmi.voltage          Gauge       V       voltage sensor  notification  Sensor Voltage Reading"},{"line_number":329,"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":330,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa98f980_a4bc8807","line":327,"in_reply_to":"fa98f980_76417aa8","updated":"2014-09-03 10:52:18.000000000","message":"probably need add hardware.ipmi.power in the following note of \"ipmi agent\"","commit_id":"ffd4ed631700589bd4f7eab3789d1c1db62d449f"}],"etc/ceilometer/rootwrap.conf":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ea8637487959e4ceae50b9d93482f85e2e0259","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# explicitely specify a full path (separated by \u0027,\u0027)"},{"line_number":11,"context_line":"# If not specified, defaults to system PATH environment variable."},{"line_number":12,"context_line":"# These directories MUST all be only writeable by root !"},{"line_number":13,"context_line":"exec_dirs\u003d/sbin,/usr/sbin,/bin,/usr/bin"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# Enable logging to syslog"},{"line_number":16,"context_line":"# Default value is False"}],"source_content_type":"text/plain","patch_set":8,"id":"fa98f980_586aeab3","line":13,"updated":"2014-09-03 07:23:57.000000000","message":"Since we\u0027re presumably only using rootwrap to pick up ipmitool, could this list of search directories be more constrained?","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"1c326622164cf087b3fde6c381fa9d77c922ab85","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# explicitely specify a full path (separated by \u0027,\u0027)"},{"line_number":11,"context_line":"# If not specified, defaults to system PATH environment variable."},{"line_number":12,"context_line":"# These directories MUST all be only writeable by root !"},{"line_number":13,"context_line":"exec_dirs\u003d/sbin,/usr/sbin,/bin,/usr/bin"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# Enable logging to syslog"},{"line_number":16,"context_line":"# Default value is False"}],"source_content_type":"text/plain","patch_set":8,"id":"fa98f980_eef59457","line":13,"in_reply_to":"fa98f980_586aeab3","updated":"2014-09-03 10:12:12.000000000","message":"In my ubuntu 12.04, it\u0027s in /usr/bin. But not sure for other distribution. So i\u0027d like to keep it.","commit_id":"3dd98b42fdea2ade7b2962a61a4dfafcdbdb1cdf"}],"requirements.txt":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"db6ef33d6fadd1b0fb91cce9f2efc5aa87c5dc41","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ordereddict"},{"line_number":16,"context_line":"oslo.db\u003e\u003d0.4.0"},{"line_number":17,"context_line":"oslo.config\u003e\u003d1.4.0.0a3"},{"line_number":18,"context_line":"oslo.rootwrap"},{"line_number":19,"context_line":"oslo.vmware\u003e\u003d0.5                        # Apache-2.0"},{"line_number":20,"context_line":"PasteDeploy\u003e\u003d1.5.0"},{"line_number":21,"context_line":"pbr\u003e\u003d0.6,!\u003d0.7,\u003c1.0"}],"source_content_type":"text/plain","patch_set":5,"id":"fa98f980_e31fea07","line":18,"updated":"2014-09-01 01:13:00.000000000","message":"this should be oslo.rootwrap\u003e\u003d1.3.0.0a1, otherwise the requirement task would fail","commit_id":"c56eea9013197616bd158c8e5a87de5e95acb226"}]}
