)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"a04f8df6aa4cc2c5f6e3b4bf91d5bb44f8cb7e8a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement consuming ipmi notifications from Ironic"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This borrows heavily from the compute notifications code. The basic"},{"line_number":10,"context_line":"idea is that there are a few classes of samples that can be had"},{"line_number":11,"context_line":"(Fan, Temperature, Voltage, Current). Within these are potentially"},{"line_number":12,"context_line":"multiple individual sensors and values. In all cases the volume and"},{"line_number":13,"context_line":"unit of a sample can always be extracted from the value of a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_eceb2876","line":10,"range":{"start_line":10,"start_character":23,"end_line":10,"end_character":24},"updated":"2014-07-10 06:24:46.000000000","message":"remove \u0027a\u0027, please :)","commit_id":"46949c0839ec5dd47f2f9f477b6ada1494000a38"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":28,"context_line":"* meter name is based on the class name and is generic, only"},{"line_number":29,"context_line":"  paired with a resource_id does it identify a specific sensor"},{"line_number":30,"context_line":"* unit is parsed out of sensor data but may not be consistent"},{"line_number":31,"context_line":"  with units used elsewher in ceilometer"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Questions (this section to be removed before review is finalized):"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_049c57bf","line":31,"updated":"2014-07-12 22:15:50.000000000","message":"*elsewhere\n\nBut you\u0027re using SI units, right? Which is the preference for ceilometer units.","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Questions (this section to be removed before review is finalized):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"* How much of the payload should be kept?"},{"line_number":36,"context_line":"* Are the meter names appropriate?"},{"line_number":37,"context_line":"* What is \"event_types\" at the notifications level?"},{"line_number":38,"context_line":"* What is Sample.event?"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_642273a4","line":35,"updated":"2014-07-12 22:15:50.000000000","message":"I think only those pieces of data that consumers of this data might want to reason over.\n\nFor example if \u0027Negative Hysteresis\u0027 is set equal \u0027Unspecified\u0027 in most or all cases, I can\u0027t really see it being of interest to anything consuming these data from ceilometer.\n\nSo I think what you need to do is go ask for example the Tuskar folks what subset of these data they actually want to be in ceilometer.","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Questions (this section to be removed before review is finalized):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"* How much of the payload should be kept?"},{"line_number":36,"context_line":"* Are the meter names appropriate?"},{"line_number":37,"context_line":"* What is \"event_types\" at the notifications level?"},{"line_number":38,"context_line":"* What is Sample.event?"},{"line_number":39,"context_line":"* Does a sample require a user_id and project_id? If so, where does"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_8441473b","line":36,"updated":"2014-07-12 22:15:50.000000000","message":"* hardware.ipmi.temperature seems fine\n* hardware.ipmi.fan might be more descriptive as say hardware.ipmi.fan_speed\n* hardware.ipmi.current seems inconsistent with the unit being watts as opposed to be amps (IIRC from my high school physics many moons ago, current_in_amps \u003d power_in_watts / voltage_in_volts)","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"* How much of the payload should be kept?"},{"line_number":36,"context_line":"* Are the meter names appropriate?"},{"line_number":37,"context_line":"* What is \"event_types\" at the notifications level?"},{"line_number":38,"context_line":"* What is Sample.event?"},{"line_number":39,"context_line":"* Does a sample require a user_id and project_id? If so, where does"},{"line_number":40,"context_line":"  it come from?"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_c447bf4a","line":37,"updated":"2014-07-12 22:15:50.000000000","message":"IIUC the event type is literally the type of event that the notification relates to, e.g. compute.instance.start.end","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":35,"context_line":"* How much of the payload should be kept?"},{"line_number":36,"context_line":"* Are the meter names appropriate?"},{"line_number":37,"context_line":"* What is \"event_types\" at the notifications level?"},{"line_number":38,"context_line":"* What is Sample.event?"},{"line_number":39,"context_line":"* Does a sample require a user_id and project_id? If so, where does"},{"line_number":40,"context_line":"  it come from?"},{"line_number":41,"context_line":"* What else is required in the docs? I\u0027d like to link to Ironic"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_e444c348","line":38,"updated":"2014-07-12 22:15:50.000000000","message":"Is there such a top-level attribute in the Sample class?\n\nI only see the event_type field in the Sample.resource_metadata:\n\n  https://github.com/openstack/ceilometer/blob/master/ceilometer/sample.py#L81","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":37,"context_line":"* What is \"event_types\" at the notifications level?"},{"line_number":38,"context_line":"* What is Sample.event?"},{"line_number":39,"context_line":"* Does a sample require a user_id and project_id? If so, where does"},{"line_number":40,"context_line":"  it come from?"},{"line_number":41,"context_line":"* What else is required in the docs? I\u0027d like to link to Ironic"},{"line_number":42,"context_line":"  configuration docs (to turn on its notifier)."},{"line_number":43,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_247a3b88","line":40,"updated":"2014-07-12 22:15:50.000000000","message":"If there is such a user and project ID associated with the \"resource\" then it should be included in the sample (as there is both a project \u0026 user ID set in the case of user-visible resource such as instances, but not necessarily a user_id set say in the case of an image IIRC).\n\nIIUC Ironic does not associate a user and project ID with a node, at least before that node is associated with a nova non-virtualized instance.\n\nBut, can you confirm that with the Ironic guys just to be 100% sure?","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":39,"context_line":"* Does a sample require a user_id and project_id? If so, where does"},{"line_number":40,"context_line":"  it come from?"},{"line_number":41,"context_line":"* What else is required in the docs? I\u0027d like to link to Ironic"},{"line_number":42,"context_line":"  configuration docs (to turn on its notifier)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Change-Id: Ie7ac92aebb45fc23d6134b4d6693f8a1e4d4ea40"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"baada198_e45be31f","line":42,"updated":"2014-07-12 22:15:50.000000000","message":"Is the problem the cross-project linking here? Can an external link to http://docs.openstack.org/developer/ironic/foobar be used?","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"46539b111adf1a7a298834011a4395f943044c90","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* Inquiries will be made with the Ironic and Tuskar teams to see"},{"line_number":35,"context_line":"  which parts of the payload are to be kept as resource_metadata."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Change-Id: Ie7ac92aebb45fc23d6134b4d6693f8a1e4d4ea40"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"baada198_dbf1e002","line":36,"updated":"2014-07-16 12:40:03.000000000","message":"Forgot this tag:\n\n  Implements blueprint ironic-notifications\n\n(drives the BP whiteboard auto-update in launchpad)","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1be1d8e0923801d678f20cb444fdd891dff8b02d","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* Inquiries will be made with the Ironic and Tuskar teams to see"},{"line_number":35,"context_line":"  which parts of the payload are to be kept as resource_metadata."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Change-Id: Ie7ac92aebb45fc23d6134b4d6693f8a1e4d4ea40"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"baada198_9b2928f5","line":36,"in_reply_to":"baada198_dbf1e002","updated":"2014-07-16 13:32:08.000000000","message":"Done","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"}],"ceilometer/hardware/notifications/ipmi.py":[{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"d9c343014b81e6cc67947c703dc43282182e36f6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def _package_payload(self, message, payload):"},{"line_number":90,"context_line":"        info \u003d {}"},{"line_number":91,"context_line":"        info[\u0027publisher_id\u0027] \u003d message[\u0027publisher_id\u0027]"},{"line_number":92,"context_line":"        info[\u0027resource_id\u0027] \u003d \u0027%s-%s\u0027 % (message[\u0027payload\u0027][\u0027node_uuid\u0027],"},{"line_number":93,"context_line":"                                         self._transform_id("},{"line_number":94,"context_line":"                                             payload[\u0027Sensor ID\u0027]))"},{"line_number":95,"context_line":"        info[\u0027timestamp\u0027] \u003d message[\u0027payload\u0027][\u0027timestamp\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8ebb4fe4","line":92,"updated":"2014-07-11 08:34:56.000000000","message":"This might be a stupid question since I\u0027m not very familiar with how IPMI interoperates with Ceilometer, but isn\u0027t resource_id supposed to be ID of the resource that the sample is \"about\", not the ID of the sensor? E.g. shouldn\u0027t resource_id here be simply node_uuid, just like \u0027cpu\u0027 meter\u0027s resource_id is the ID of the VM?","commit_id":"e13bf03946931519ded2f3f033a77259890ca04a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"24602d2f384f2a756d394c947f51ac3f54cba0e5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def _package_payload(self, message, payload):"},{"line_number":90,"context_line":"        info \u003d {}"},{"line_number":91,"context_line":"        info[\u0027publisher_id\u0027] \u003d message[\u0027publisher_id\u0027]"},{"line_number":92,"context_line":"        info[\u0027resource_id\u0027] \u003d \u0027%s-%s\u0027 % (message[\u0027payload\u0027][\u0027node_uuid\u0027],"},{"line_number":93,"context_line":"                                         self._transform_id("},{"line_number":94,"context_line":"                                             payload[\u0027Sensor ID\u0027]))"},{"line_number":95,"context_line":"        info[\u0027timestamp\u0027] \u003d message[\u0027payload\u0027][\u0027timestamp\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_71a41a4b","line":92,"in_reply_to":"baada198_8ebb4fe4","updated":"2014-07-11 09:11:15.000000000","message":"I wondered the same thing and in an earlier version it was just the node_uuid but some review from Eoghan and Lucas suggested otherwise.\n\nIt is, however, entirely likely that I misunderstood their suggestion.\n\nThe semantics of this stuff is not very obvious at all to me, my expectations are always being violated when I run the command line tool.\n\nEoghan can you provide some clarity please?","commit_id":"e13bf03946931519ded2f3f033a77259890ca04a"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"OPTS \u003d ["},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027ipmi_sensor_exchange\u0027,"},{"line_number":32,"context_line":"               default\u003d\u0027ironic\u0027,"},{"line_number":33,"context_line":"               help\u003d\u0027Exchange name for IPMI notifications.\u0027),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_84af87e2","line":31,"updated":"2014-07-12 22:15:50.000000000","message":"To be consistent with the other *_exchange config options (which as all named \u003cproject\u003e_exchange) should this be called simply ironic_exchange?","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    event_types \u003d [\u0027hardware.ipmi.*\u0027]"},{"line_number":59,"context_line":"    sample_type \u003d sample.TYPE_GAUGE"},{"line_number":60,"context_line":"    event_type \u003d \u0027hardware.ipmi.metrics.update\u0027  # required by Sample"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_84ddc772","line":59,"updated":"2014-07-12 22:15:50.000000000","message":"This sample type seems constant, so maybe clearer to refer directly to sample.TYPE_GAUGE on line 123?","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    event_types \u003d [\u0027hardware.ipmi.*\u0027]"},{"line_number":59,"context_line":"    sample_type \u003d sample.TYPE_GAUGE"},{"line_number":60,"context_line":"    event_type \u003d \u0027hardware.ipmi.metrics.update\u0027  # required by Sample"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @property"},{"line_number":63,"context_line":"    def metric(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_c4b5ff32","line":60,"updated":"2014-07-12 22:15:50.000000000","message":"I thought the event_type would be set in the incoming notification?","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    @property"},{"line_number":63,"context_line":"    def metric(self):"},{"line_number":64,"context_line":"        \"\"\"Calculate metric name from class name.\"\"\""},{"line_number":65,"context_line":"        return self.__class__.__name__.replace(\u0027SensorNotification\u0027, \u0027\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @staticmethod"},{"line_number":68,"context_line":"    def get_targets(conf):"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_24887b70","line":65,"updated":"2014-07-12 22:15:50.000000000","message":"Might it be clearer to avoid the string replacement and simply do something like:\n\n  class TemperatureSensorNotification(SensorNotification):\n      metric \u003d \u0027temperature\u0027\n\n  class CurrentSensorNotification(SensorNotification):\n      metric \u003d \u0027current\u0027\n\n... etc.","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                    in message[\u0027payload\u0027][self.metric].items())"},{"line_number":78,"context_line":"        except KeyError:"},{"line_number":79,"context_line":"            return []"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _validate_reading(self, data):"},{"line_number":82,"context_line":"        \"\"\"Some sensors read \"Disabled\".\"\"\""},{"line_number":83,"context_line":"        return data !\u003d \u0027Disabled\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_a493aba1","line":80,"updated":"2014-07-12 22:15:50.000000000","message":"@staticmethod","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def _validate_reading(self, data):"},{"line_number":82,"context_line":"        \"\"\"Some sensors read \"Disabled\".\"\"\""},{"line_number":83,"context_line":"        return data !\u003d \u0027Disabled\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _transform_id(self, data):"},{"line_number":86,"context_line":"        return data.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e4892370","line":84,"updated":"2014-07-12 22:15:50.000000000","message":"@staticmethod","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _transform_id(self, data):"},{"line_number":86,"context_line":"        return data.lower().replace(\u0027 \u0027, \u0027_\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _transform_reading(self, data):"},{"line_number":89,"context_line":"        \"\"\"We expect data to be a float.\"\"\""},{"line_number":90,"context_line":"        data \u003d data.split(\u0027 \u0027, 1)[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_44f00ffd","line":87,"updated":"2014-07-12 22:15:50.000000000","message":"@staticmethod","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \"\"\"We expect data to be a float.\"\"\""},{"line_number":90,"context_line":"        data \u003d data.split(\u0027 \u0027, 1)[0]"},{"line_number":91,"context_line":"        return float(data)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _extract_unit(self, data):"},{"line_number":94,"context_line":"        unit \u003d data.rsplit(\u0027 \u0027, 1)[-1]"},{"line_number":95,"context_line":"        return UNIT_MAP.get(unit, unit)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_64f513ec","line":92,"updated":"2014-07-12 22:15:50.000000000","message":"@staticmethod","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _extract_unit(self, data):"},{"line_number":94,"context_line":"        unit \u003d data.rsplit(\u0027 \u0027, 1)[-1]"},{"line_number":95,"context_line":"        return UNIT_MAP.get(unit, unit)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _package_payload(self, message, payload):"},{"line_number":98,"context_line":"        info \u003d {}"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_44c72f98","line":95,"updated":"2014-07-12 22:15:50.000000000","message":"Just wondering would be clearer to have a single method that parses out both the reading and unit? so it would be used e.g.\n\n  volume, unit \u003d self._parse_read(data)","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e9675fdd16c2c5d8ffb80619654311f4985be3ef","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def _package_payload(self, message, payload):"},{"line_number":98,"context_line":"        info \u003d {}"},{"line_number":99,"context_line":"        info[\u0027publisher_id\u0027] \u003d message[\u0027publisher_id\u0027]"},{"line_number":100,"context_line":"        info[\u0027resource_id\u0027] \u003d \u0027%s-%s\u0027 % (message[\u0027payload\u0027][\u0027node_uuid\u0027],"},{"line_number":101,"context_line":"                                         self._transform_id("},{"line_number":102,"context_line":"                                             payload[\u0027Sensor ID\u0027]))"},{"line_number":103,"context_line":"        info[\u0027timestamp\u0027] \u003d message[\u0027payload\u0027][\u0027timestamp\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e4b7631f","line":100,"updated":"2014-07-12 22:15:50.000000000","message":"IIRC the resource ID does not have to be set in the message dict passed into Sample.from_notification, as this value is already passed as an explicit arg.","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"0ad04b00725b781fa88bf5ec7d7deabc725c02b4","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                        resource_id\u003dinfo[\u0027resource_id\u0027],"},{"line_number":123,"context_line":"                        message\u003dinfo,"},{"line_number":124,"context_line":"                        # No, user_id and project_id from Ironic"},{"line_number":125,"context_line":"                        user_id\u003dNone,"},{"line_number":126,"context_line":"                        project_id\u003dNone)"},{"line_number":127,"context_line":"            except (ValueError, KeyError):"},{"line_number":128,"context_line":"                LOG.warn(\u0027invalid sensor data for %(id)s\u0027 %"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d1b47184","line":125,"updated":"2014-07-16 08:31:38.000000000","message":"Hi Chris,\n\nHere, I found the gap, from Ironic side, we just know the nova\u0027s instance_id, so for such user_id, project_id, we have to retrieve from nova api, but not sure if that is easy for Ceilometer to get it?\n\nFrom our Ironic side, our Ironic nova driver is prepare to merge to nova, so at these days, we dont want to change the ironic driver, just wait nova\u0027s approval, so if Ceilometer can populate these user_id and project_id, that is fine, if not we have to wait our Ironic nova driver code approved and commit new patch to add these data population once the instance is booted from nova.\n\nAny comments from Ceilometer view?\n\nThank you.","commit_id":"1989ef0eb020a23b7c448e7275865a0a8ad36620"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d714c1b29210ec32616d5745bd6c016a534b2e08","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        info[\u0027publisher_id\u0027] \u003d message[\u0027publisher_id\u0027]"},{"line_number":93,"context_line":"        info[\u0027resource_id\u0027] \u003d \u0027%s-%s\u0027 % (message[\u0027payload\u0027][\u0027node_uuid\u0027],"},{"line_number":94,"context_line":"                                         self._transform_id("},{"line_number":95,"context_line":"                                             payload[\u0027Sensor ID\u0027]))"},{"line_number":96,"context_line":"        info[\u0027timestamp\u0027] \u003d message[\u0027payload\u0027][\u0027timestamp\u0027]"},{"line_number":97,"context_line":"        info[\u0027event_type\u0027] \u003d message[\u0027payload\u0027][\u0027event_type\u0027]"},{"line_number":98,"context_line":"        info[\u0027user_id\u0027] \u003d message[\u0027payload\u0027].get(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_69cc9162","line":95,"updated":"2014-07-16 12:37:10.000000000","message":"I may have mentioned this before, but I don\u0027t the resource_id is needed in this info dict.\n\nRather it could just be constructed in process_notification and passed directly on line 123.","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1be1d8e0923801d678f20cb444fdd891dff8b02d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        info[\u0027publisher_id\u0027] \u003d message[\u0027publisher_id\u0027]"},{"line_number":93,"context_line":"        info[\u0027resource_id\u0027] \u003d \u0027%s-%s\u0027 % (message[\u0027payload\u0027][\u0027node_uuid\u0027],"},{"line_number":94,"context_line":"                                         self._transform_id("},{"line_number":95,"context_line":"                                             payload[\u0027Sensor ID\u0027]))"},{"line_number":96,"context_line":"        info[\u0027timestamp\u0027] \u003d message[\u0027payload\u0027][\u0027timestamp\u0027]"},{"line_number":97,"context_line":"        info[\u0027event_type\u0027] \u003d message[\u0027payload\u0027][\u0027event_type\u0027]"},{"line_number":98,"context_line":"        info[\u0027user_id\u0027] \u003d message[\u0027payload\u0027].get(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_7ba53446","line":95,"in_reply_to":"baada198_69cc9162","updated":"2014-07-16 13:32:08.000000000","message":"Done","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c54422042de9b6261a3156f9f235f39344642a58","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        payloads \u003d self._get_sample(message[\u0027payload\u0027])"},{"line_number":109,"context_line":"        for payload in payloads:"},{"line_number":110,"context_line":"            try:"},{"line_number":111,"context_line":"                resource_id \u003d \u0027missing id\u0027"},{"line_number":112,"context_line":"                resource_id \u003d \u0027%(nodeid)s-%(sensorid)s\u0027 % {"},{"line_number":113,"context_line":"                    \u0027nodeid\u0027: message[\u0027payload\u0027][\u0027node_uuid\u0027],"},{"line_number":114,"context_line":"                    \u0027sensorid\u0027: self._transform_id(payload[\u0027Sensor ID\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_3c480087","line":111,"updated":"2014-07-16 21:22:10.000000000","message":"The purpose of line 111 is a little oblique - are you guarding against the case where the node_uuid or Sensor ID are missing, so that resource_id can be referred to in the except clause log message?\n\nIn that case, how about replacing lines 111-116 with:\n\n     resource_id \u003d \u0027%(nodeid)s-%(sensorid)s\u0027 % dict(\n         nodeid\u003dmessage[\u0027payload\u0027].get(\u0027node_uuid\u0027, \u0027missing\u0027),\n         sensorid\u0027\u003dself._transform_id(payload.get(\u0027Sensor ID\u0027, \u0027missing\u0027))\n     )","commit_id":"d36be2a2001e796f7b18abab8cdef61d9106df34"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"552fd0a2579654ca486e2803931069f0bbbca927","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        payloads \u003d self._get_sample(message[\u0027payload\u0027])"},{"line_number":109,"context_line":"        for payload in payloads:"},{"line_number":110,"context_line":"            try:"},{"line_number":111,"context_line":"                resource_id \u003d \u0027missing id\u0027"},{"line_number":112,"context_line":"                resource_id \u003d \u0027%(nodeid)s-%(sensorid)s\u0027 % {"},{"line_number":113,"context_line":"                    \u0027nodeid\u0027: message[\u0027payload\u0027][\u0027node_uuid\u0027],"},{"line_number":114,"context_line":"                    \u0027sensorid\u0027: self._transform_id(payload[\u0027Sensor ID\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_01c2de52","line":111,"in_reply_to":"baada198_3c480087","updated":"2014-07-17 10:40:38.000000000","message":"If that change is made then the exception handling will not be thrown in the case of a missing \u0027node_uuid\u0027 or missing \u0027Sensor ID\u0027. I\u0027ll make another patch with tests to cover those two cases and comment this block to make the exception handling\u0027s purpose more clear.","commit_id":"d36be2a2001e796f7b18abab8cdef61d9106df34"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e0259471a2d50bf76f95747710e4fc9b9a7e9dbd","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class CurrentSensorNotification(SensorNotification):"},{"line_number":146,"context_line":"    # NOTE(chdent): This is probably power, checking."},{"line_number":147,"context_line":"    metric \u003d \u0027Current\u0027"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_c2786c91","line":146,"updated":"2014-07-21 16:06:15.000000000","message":"has this been verified?","commit_id":"6cc65a0bb4acc786d61c01ee9fa68af092c9a1fe"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b944f8bce5dd8e5b89182299edd2e9905e3f4c33","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class CurrentSensorNotification(SensorNotification):"},{"line_number":146,"context_line":"    # NOTE(chdent): This is probably power, checking."},{"line_number":147,"context_line":"    metric \u003d \u0027Current\u0027"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_e296503d","line":146,"in_reply_to":"baada198_c2786c91","updated":"2014-07-21 16:12:43.000000000","message":"This is the \"open question\" we referred to in the non-inline discussion on patch set 12.","commit_id":"6cc65a0bb4acc786d61c01ee9fa68af092c9a1fe"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7b428ce650ae672e9838ce885135be5ae3345604","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class CurrentSensorNotification(SensorNotification):"},{"line_number":146,"context_line":"    # NOTE(chdent): This is probably power, checking."},{"line_number":147,"context_line":"    metric \u003d \u0027Current\u0027"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_5cf99b4c","line":146,"in_reply_to":"baada198_e296503d","updated":"2014-07-21 18:21:06.000000000","message":"Given that the metric names are coming from the sensor identifiers and it is those sensor ids which have \"weird\" names, I think it is going to remain \"Current\" even in those cases where its not quite a good fit.\n\nSo I think I\u0027ll just kill the note.","commit_id":"6cc65a0bb4acc786d61c01ee9fa68af092c9a1fe"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"597017ea37cdde9fbb624170712bac5c4deba678","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                        user_id\u003dinfo[\u0027user_id\u0027],"},{"line_number":134,"context_line":"                        project_id\u003dinfo[\u0027project_id\u0027])"},{"line_number":135,"context_line":"            except (ValueError, KeyError):"},{"line_number":136,"context_line":"                LOG.warn(\u0027invalid sensor data for %(id)s\u0027 %"},{"line_number":137,"context_line":"                         {\u0027id\u0027: resource_id})"},{"line_number":138,"context_line":"                continue"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_733490ac","line":136,"updated":"2014-07-22 13:35:55.000000000","message":"This log message does not seem to be too useful, as it is too generic.","commit_id":"62eaeed046cf83e798c55e93b97841e8340a8f01"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7060ed5a433d1da3ecfd223df1708ee469bbe755","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                        user_id\u003dinfo[\u0027user_id\u0027],"},{"line_number":134,"context_line":"                        project_id\u003dinfo[\u0027project_id\u0027])"},{"line_number":135,"context_line":"            except (ValueError, KeyError):"},{"line_number":136,"context_line":"                LOG.warn(\u0027invalid sensor data for %(id)s\u0027 %"},{"line_number":137,"context_line":"                         {\u0027id\u0027: resource_id})"},{"line_number":138,"context_line":"                continue"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_79063187","line":136,"in_reply_to":"baada198_733490ac","updated":"2014-07-22 14:12:29.000000000","message":"I wasn\u0027t too sure what to include here, other than some way of identifying which chunk of the sensor data went wrong, since there\u0027s nothing that can be done, _on the ceilometer side_, to fix it. The only thing that can be done is to take the identifier back to the publishing side and see where things have gone wrong. For example in my tests I\u0027ve seen:\n\n    invalid sensor data for 64f07340-3737-4e67-9b4c-2c1ee7143a7a-pwr_rail_1_fault_(0x21)\n\nwhich points to a sensor reading from ipmitool which does not fit the expected form (no space between value and units).\n\nThe options here seem to be:\n\n* log no warning, just skip bad data\n* log more specifically (at each point where ValueError or KeyError happen) and then reraise to a generic skip of the current (bad) sensor\n* do the logging as is","commit_id":"62eaeed046cf83e798c55e93b97841e8340a8f01"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ba35031b16355d6644d886e66037f5a3c112d199","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                        user_id\u003dinfo[\u0027user_id\u0027],"},{"line_number":134,"context_line":"                        project_id\u003dinfo[\u0027project_id\u0027])"},{"line_number":135,"context_line":"            except (ValueError, KeyError):"},{"line_number":136,"context_line":"                LOG.warn(\u0027invalid sensor data for %(id)s\u0027 %"},{"line_number":137,"context_line":"                         {\u0027id\u0027: resource_id})"},{"line_number":138,"context_line":"                continue"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_91b759f8","line":136,"in_reply_to":"baada198_79063187","updated":"2014-07-22 14:40:09.000000000","message":"Logging nothing does not seem to be the best option to me.\n\nWhere we have a chance to identify what\u0027s missing or wrong, like in case of missing ids, then I think we could/should go for logging them separately. Where we do not have any clue what went wrong, we can stay with a more generic one. Also the \u0027invalid sensor data\u0027 implies that you know why it is not valid, but there isn\u0027t any additional info here about that. So if we know that we could parse the payload, then we should log that, etc.\n\nDo the above mentioned things make sense to you?","commit_id":"62eaeed046cf83e798c55e93b97841e8340a8f01"}],"ceilometer/tests/hardware/notifications/test_ipmi.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                }"},{"line_number":654,"context_line":"            }"},{"line_number":655,"context_line":"        }"},{"line_number":656,"context_line":"    }"},{"line_number":657,"context_line":"}"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_24323ba7","line":656,"updated":"2014-07-12 22:37:51.000000000","message":"I wonder could we slim down the above notification by a hundred line by simply generating the repetitive elements in a loop?","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":763,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":764,"context_line":"                         processor.process_notification(SENSOR_DATA)])"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"        self.assertEqual(len(counters), 10,"},{"line_number":767,"context_line":"                         \u0027expected 10 temperature readings\u0027)"},{"line_number":768,"context_line":"        resource_id \u003d ("},{"line_number":769,"context_line":"            \u0027f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-dimm_gh_vr_temp_(0x3b)\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_44dacf4b","line":766,"updated":"2014-07-12 22:37:51.000000000","message":"preferred order is expected, actual as opposed to actual, expected","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":785,"context_line":"                         processor.process_notification(SENSOR_DATA)])"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"        self.assertEqual(len(counters), 1,"},{"line_number":788,"context_line":"                         \u0027expected 1 current reading\u0027)"},{"line_number":789,"context_line":"        resource_id \u003d ("},{"line_number":790,"context_line":"            \u0027f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-avg_power_(0x2e)\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_64dfd33a","line":787,"updated":"2014-07-12 22:37:51.000000000","message":"preferred order is expected, actual as opposed to actual, expected","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":806,"context_line":"                         processor.process_notification(SENSOR_DATA)])"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"        self.assertEqual(len(counters), 12,"},{"line_number":809,"context_line":"                         \u0027expected 12 fan readings\u0027)"},{"line_number":810,"context_line":"        resource_id \u003d ("},{"line_number":811,"context_line":"            \u0027f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-fan_4a_tach_(0x46)\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_84e78711","line":808,"updated":"2014-07-12 22:37:51.000000000","message":"preferred order is expected, actual as opposed to actual, expected","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":826,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":827,"context_line":"                         processor.process_notification(SENSOR_DATA)])"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        self.assertEqual(len(counters), 4,"},{"line_number":830,"context_line":"                         \u0027expected 4 volate readings\u0027)"},{"line_number":831,"context_line":"        resource_id \u003d ("},{"line_number":832,"context_line":"            \u0027f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-planar_vbat_(0x1c)\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_a4e48b0d","line":829,"updated":"2014-07-12 22:37:51.000000000","message":"preferred order is expected, actual as opposed to actual, expected","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":844,"context_line":"                         processor.process_notification(SENSOR_DATA)])"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"        self.assertEqual(len(counters), 10,"},{"line_number":847,"context_line":"                         \u0027expected 10 temperature readings\u0027)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"        resource_id \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_c4edfff1","line":846,"updated":"2014-07-12 22:37:51.000000000","message":"preferred order is expected, actual as opposed to actual, expected","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":858,"context_line":"                         processor.process_notification(EMPTY_PAYLOAD)])"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        self.assertEqual(len(counters), 0,"},{"line_number":861,"context_line":"                         \u0027expected 0 readings\u0027)"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"    @mock.patch(\u0027ceilometer.hardware.notifications.ipmi.LOG\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e4ea03d7","line":860,"updated":"2014-07-12 22:37:51.000000000","message":"preferred order is expected, actual as opposed to actual, expected","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":868,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":871,"context_line":"                         processor.process_notification(MISSING_SENSOR)])"},{"line_number":872,"context_line":""},{"line_number":873,"context_line":"        self.assertEqual("},{"line_number":874,"context_line":"            messages[0],"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_4423af57","line":871,"updated":"2014-07-12 22:37:51.000000000","message":"counters unused","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":873,"context_line":"        self.assertEqual("},{"line_number":874,"context_line":"            messages[0],"},{"line_number":875,"context_line":"            \u0027invalid sensor data for f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-pci_riser_1_temp_(0x33)\u0027"},{"line_number":876,"context_line":"        )"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"    @mock.patch(\u0027ceilometer.hardware.notifications.ipmi.LOG\u0027)"},{"line_number":879,"context_line":"    def test_sensor_data_malformed(self, mylog):"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_8420674a","line":876,"updated":"2014-07-12 22:37:51.000000000","message":"Making test assertions on the content of log messages seems a bit odd to me.","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":883,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":884,"context_line":""},{"line_number":885,"context_line":"        counters \u003d dict([(counter.resource_id, counter) for counter in"},{"line_number":886,"context_line":"                         processor.process_notification(BAD_SENSOR)])"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"        self.assertEqual("},{"line_number":889,"context_line":"            messages[0],"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_6428b333","line":886,"updated":"2014-07-12 22:37:51.000000000","message":"counters unused","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":888,"context_line":"        self.assertEqual("},{"line_number":889,"context_line":"            messages[0],"},{"line_number":890,"context_line":"            \u0027invalid sensor data for f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-pci_riser_1_temp_(0x33)\u0027"},{"line_number":891,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_c416dff1","line":891,"updated":"2014-07-12 22:37:51.000000000","message":"Similarly.","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d714c1b29210ec32616d5745bd6c016a534b2e08","unresolved":false,"context_lines":[{"line_number":870,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        dict([(counter.resource_id, counter) for counter in"},{"line_number":873,"context_line":"              processor.process_notification(MISSING_SENSOR)])"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"        self.assertEqual("},{"line_number":876,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_2948d986","line":873,"updated":"2014-07-16 12:37:10.000000000","message":"I don\u0027t think the dict comprehension is required here.","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1be1d8e0923801d678f20cb444fdd891dff8b02d","unresolved":false,"context_lines":[{"line_number":870,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        dict([(counter.resource_id, counter) for counter in"},{"line_number":873,"context_line":"              processor.process_notification(MISSING_SENSOR)])"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"        self.assertEqual("},{"line_number":876,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_db42c067","line":873,"in_reply_to":"baada198_2948d986","updated":"2014-07-16 13:32:08.000000000","message":"Done","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d714c1b29210ec32616d5745bd6c016a534b2e08","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"        dict([(counter.resource_id, counter) for counter in"},{"line_number":889,"context_line":"              processor.process_notification(BAD_SENSOR)])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        self.assertEqual("},{"line_number":892,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_6959f15a","line":889,"updated":"2014-07-16 12:37:10.000000000","message":"I don\u0027t think the dict comprehension is required here.","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1be1d8e0923801d678f20cb444fdd891dff8b02d","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"        dict([(counter.resource_id, counter) for counter in"},{"line_number":889,"context_line":"              processor.process_notification(BAD_SENSOR)])"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"        self.assertEqual("},{"line_number":892,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_fb478475","line":889,"in_reply_to":"baada198_6959f15a","updated":"2014-07-16 13:32:08.000000000","message":"Done","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d714c1b29210ec32616d5745bd6c016a534b2e08","unresolved":false,"context_lines":[{"line_number":892,"context_line":"            \u0027invalid sensor data for \u0027"},{"line_number":893,"context_line":"            \u0027f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-pci_riser_1_temp_(0x33)\u0027,"},{"line_number":894,"context_line":"            messages[0]"},{"line_number":895,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_89048519","line":895,"updated":"2014-07-16 12:37:10.000000000","message":"Still not loving the assertions on log messages :)","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1be1d8e0923801d678f20cb444fdd891dff8b02d","unresolved":false,"context_lines":[{"line_number":892,"context_line":"            \u0027invalid sensor data for \u0027"},{"line_number":893,"context_line":"            \u0027f4982fd2-2f2b-4bb5-9aff-48aac801d1ad-pci_riser_1_temp_(0x33)\u0027,"},{"line_number":894,"context_line":"            messages[0]"},{"line_number":895,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_1b0a7827","line":895,"in_reply_to":"baada198_89048519","updated":"2014-07-16 13:32:08.000000000","message":"Feel free to suggest an alternative way of checking that the bad data handling is happening. This way is straightforward and non-complex, so I don\u0027t really understand the objection.","commit_id":"01395ba76463ade193ee6332fb3f5cd210e64423"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c54422042de9b6261a3156f9f235f39344642a58","unresolved":false,"context_lines":[{"line_number":869,"context_line":"        messages \u003d []"},{"line_number":870,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        list(processor.process_notification(MISSING_SENSOR))"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"        self.assertEqual("},{"line_number":875,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_3c02c06f","line":872,"updated":"2014-07-16 21:22:10.000000000","message":"Sorry to be a pest, but is even the list required here?","commit_id":"d36be2a2001e796f7b18abab8cdef61d9106df34"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"552fd0a2579654ca486e2803931069f0bbbca927","unresolved":false,"context_lines":[{"line_number":869,"context_line":"        messages \u003d []"},{"line_number":870,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        list(processor.process_notification(MISSING_SENSOR))"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"        self.assertEqual("},{"line_number":875,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_e1740a38","line":872,"in_reply_to":"baada198_3c02c06f","updated":"2014-07-17 10:40:38.000000000","message":"`process_notification()` is a generator. It won\u0027t \"process\" the data (and thus case the exception) unless the generator is made to unwind. The quick and dirty way to get a generator to run to completion is to cast it to a list.","commit_id":"d36be2a2001e796f7b18abab8cdef61d9106df34"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c54422042de9b6261a3156f9f235f39344642a58","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        messages \u003d []"},{"line_number":885,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"        list(processor.process_notification(BAD_SENSOR))"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        self.assertEqual("},{"line_number":890,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_9c474cbc","line":887,"updated":"2014-07-16 21:22:10.000000000","message":"Similarly (though please shout if I\u0027ve missed more pythonic subtlety).","commit_id":"d36be2a2001e796f7b18abab8cdef61d9106df34"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"552fd0a2579654ca486e2803931069f0bbbca927","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        messages \u003d []"},{"line_number":885,"context_line":"        mylog.warn \u003d lambda *args: messages.extend(args)"},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"        list(processor.process_notification(BAD_SENSOR))"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        self.assertEqual("},{"line_number":890,"context_line":"            \u0027invalid sensor data for \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_c19c665e","line":887,"in_reply_to":"baada198_9c474cbc","updated":"2014-07-17 10:40:38.000000000","message":"See above, and you\u0027ll be so happy! I\u0027m adding two more log checking tests that have the same generator unwinding...","commit_id":"d36be2a2001e796f7b18abab8cdef61d9106df34"}],"doc/source/measurements.rst":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b56710ebf05c81aede49272243c2416de8393b80","unresolved":false,"context_lines":[{"line_number":288,"context_line":"Meter                          Type        Unit    Resource        Origin        Note"},{"line_number":289,"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":290,"context_line":"hardware.ipmi.fan              Gauge       RPM     fan sensor      notification  Fan RPM"},{"line_number":291,"context_line":"hardware.ipmi.temperature      Gauge       C       temp senosor    notification  Sensor Temperature Reading"},{"line_number":292,"context_line":"hardware.ipmi.current          Gauge       W       current sensor  notification  Sensor Current Reading"},{"line_number":293,"context_line":"hardware.ipmi.voltage          Gauge       V       voltage sensor  notification  Sensor Voltage Reading"},{"line_number":294,"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"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baada198_04bb77e5","line":291,"updated":"2014-07-12 22:37:51.000000000","message":"Is the \"Sensor\" in Sensor Temperature Reading implicit?","commit_id":"ea3bd19234b546ada18029f3902ff37e4706d3bd"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e0259471a2d50bf76f95747710e4fc9b9a7e9dbd","unresolved":false,"context_lines":[{"line_number":293,"context_line":"Meter                          Type        Unit    Resource        Origin        Note"},{"line_number":294,"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":295,"context_line":"hardware.ipmi.fan              Gauge       RPM     fan sensor      notification  Fan RPM"},{"line_number":296,"context_line":"hardware.ipmi.temperature      Gauge       C       temp senosor    notification  Sensor Temperature Reading"},{"line_number":297,"context_line":"hardware.ipmi.current          Gauge       W       current sensor  notification  Sensor Current Reading"},{"line_number":298,"context_line":"hardware.ipmi.voltage          Gauge       V       voltage sensor  notification  Sensor Voltage Reading"},{"line_number":299,"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"}],"source_content_type":"text/x-rst","patch_set":12,"id":"baada198_822cb494","line":296,"updated":"2014-07-21 16:06:15.000000000","message":"s/temp senosor/temp sensor/","commit_id":"6cc65a0bb4acc786d61c01ee9fa68af092c9a1fe"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7b428ce650ae672e9838ce885135be5ae3345604","unresolved":false,"context_lines":[{"line_number":293,"context_line":"Meter                          Type        Unit    Resource        Origin        Note"},{"line_number":294,"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":295,"context_line":"hardware.ipmi.fan              Gauge       RPM     fan sensor      notification  Fan RPM"},{"line_number":296,"context_line":"hardware.ipmi.temperature      Gauge       C       temp senosor    notification  Sensor Temperature Reading"},{"line_number":297,"context_line":"hardware.ipmi.current          Gauge       W       current sensor  notification  Sensor Current Reading"},{"line_number":298,"context_line":"hardware.ipmi.voltage          Gauge       V       voltage sensor  notification  Sensor Voltage Reading"},{"line_number":299,"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"}],"source_content_type":"text/x-rst","patch_set":12,"id":"baada198_1cb1e38e","line":296,"in_reply_to":"baada198_822cb494","updated":"2014-07-21 18:21:06.000000000","message":"Done","commit_id":"6cc65a0bb4acc786d61c01ee9fa68af092c9a1fe"}],"setup.cfg":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e0259471a2d50bf76f95747710e4fc9b9a7e9dbd","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    http.response \u003d ceilometer.middleware:HTTPResponse"},{"line_number":67,"context_line":"    stack_crud \u003d ceilometer.orchestration.notifications:StackCRUD"},{"line_number":68,"context_line":"    profiler \u003d ceilometer.profiler.notifications:ProfilerNotifications"},{"line_number":69,"context_line":"    hardware_temperature \u003d ceilometer.hardware.notifications.ipmi:TemperatureSensorNotification"},{"line_number":70,"context_line":"    hardware_voltage \u003d ceilometer.hardware.notifications.ipmi:VoltageSensorNotification"},{"line_number":71,"context_line":"    hardware_current \u003d ceilometer.hardware.notifications.ipmi:CurrentSensorNotification"},{"line_number":72,"context_line":"    hardware_fan \u003d ceilometer.hardware.notifications.ipmi:FanSensorNotification"}],"source_content_type":"text/x-ttcn-cfg","patch_set":12,"id":"baada198_62bb200f","line":69,"updated":"2014-07-21 16:06:15.000000000","message":"the names here should match metric names. ie. hardware.ipmi.xyz","commit_id":"6cc65a0bb4acc786d61c01ee9fa68af092c9a1fe"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7b428ce650ae672e9838ce885135be5ae3345604","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    http.response \u003d ceilometer.middleware:HTTPResponse"},{"line_number":67,"context_line":"    stack_crud \u003d ceilometer.orchestration.notifications:StackCRUD"},{"line_number":68,"context_line":"    profiler \u003d ceilometer.profiler.notifications:ProfilerNotifications"},{"line_number":69,"context_line":"    hardware_temperature \u003d ceilometer.hardware.notifications.ipmi:TemperatureSensorNotification"},{"line_number":70,"context_line":"    hardware_voltage \u003d ceilometer.hardware.notifications.ipmi:VoltageSensorNotification"},{"line_number":71,"context_line":"    hardware_current \u003d ceilometer.hardware.notifications.ipmi:CurrentSensorNotification"},{"line_number":72,"context_line":"    hardware_fan \u003d ceilometer.hardware.notifications.ipmi:FanSensorNotification"}],"source_content_type":"text/x-ttcn-cfg","patch_set":12,"id":"baada198_3c2147b4","line":69,"in_reply_to":"baada198_62bb200f","updated":"2014-07-21 18:21:06.000000000","message":"Done","commit_id":"6cc65a0bb4acc786d61c01ee9fa68af092c9a1fe"}]}
