)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"ec7fb6e2b561ca07c06c14e02c63921b713ae61b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"80fbe722_5fb5bf9f","updated":"2026-02-06 16:16:38.000000000","message":"Thank you for the patch, Riccardo. LGTM with a couple minor suggestions.","commit_id":"783c9dc75f526c67e5933b08f8b17913f0f790f2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"59bb0da66d049a54794fb8922864c4d8fe997a61","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0978c03d_ffc2781c","updated":"2026-02-24 17:19:32.000000000","message":"Group review with Julia, Doug, Jason P, Dmitry, mumesan, + me:\n\nUnrelated to this patch; is a PTG topic (just putting a note here for documentation). We have general concerns from Doug around inconsistent field names. This is related, generally to IPE and not this change so it\u0027s not blocking feedback. We need to add more safeguards to ensure that the types of keys/values coming out are matching the expectations of prometheus. (and that they do not change!)","commit_id":"b0ffb2adbacfedbc22f8686200e5598276c33f3d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d022ab01c313cf7687a1a318ab208eb99b798631","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"64fe5c30_0eb7d057","updated":"2026-02-09 14:03:03.000000000","message":"Thank you Riccardo, LGTM","commit_id":"b0ffb2adbacfedbc22f8686200e5598276c33f3d"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"7b475554aaed7f95288672421e2d87f94e8511ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2982ae9a_5a41e4bc","updated":"2026-02-25 09:46:05.000000000","message":"recheck","commit_id":"b0ffb2adbacfedbc22f8686200e5598276c33f3d"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d7729343cd03de7e9dcee08699ea57767d98536d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b44b02f3_530aa098","updated":"2026-02-27 10:25:31.000000000","message":"recheck","commit_id":"b0ffb2adbacfedbc22f8686200e5598276c33f3d"}],"ironic_prometheus_exporter/parsers/redfish.py":[{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"ec7fb6e2b561ca07c06c14e02c63921b713ae61b","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    for sensor_id, sensor_data in payload.items():"},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            if sensor_data.get(\u0027state\u0027, \u0027\u0027).lower() !\u003d \u0027enabled\u0027:"},{"line_number":92,"context_line":"                continue"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"            # Build metrics using the provided function"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4b71f8d_3e4faa9c","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":65},"updated":"2026-02-06 16:16:38.000000000","message":"suggestion: Claude claims we\u0027re changing behaviour here from KeyError if state is missing to silent failure. Perhaps worth a debug log in this scenario?","commit_id":"783c9dc75f526c67e5933b08f8b17913f0f790f2"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d022ab01c313cf7687a1a318ab208eb99b798631","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    for sensor_id, sensor_data in payload.items():"},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            if sensor_data.get(\u0027state\u0027, \u0027\u0027).lower() !\u003d \u0027enabled\u0027:"},{"line_number":92,"context_line":"                continue"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"            # Build metrics using the provided function"}],"source_content_type":"text/x-python","patch_set":1,"id":"ad2da877_34b09e83","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":65},"in_reply_to":"73c439f2_fe1a842d","updated":"2026-02-09 14:03:03.000000000","message":"Done","commit_id":"783c9dc75f526c67e5933b08f8b17913f0f790f2"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1b1a415ee1a44838ccb63820c594c3112ebc853f","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    for sensor_id, sensor_data in payload.items():"},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            if sensor_data.get(\u0027state\u0027, \u0027\u0027).lower() !\u003d \u0027enabled\u0027:"},{"line_number":92,"context_line":"                continue"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"            # Build metrics using the provided function"}],"source_content_type":"text/x-python","patch_set":1,"id":"73c439f2_fe1a842d","line":91,"range":{"start_line":91,"start_character":2,"end_line":91,"end_character":65},"in_reply_to":"f4b71f8d_3e4faa9c","updated":"2026-02-09 09:30:52.000000000","message":"makes sense","commit_id":"783c9dc75f526c67e5933b08f8b17913f0f790f2"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"ec7fb6e2b561ca07c06c14e02c63921b713ae61b","unresolved":true,"context_lines":[{"line_number":159,"context_line":"        health \u003d sensor_data.get(\u0027health\u0027)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if not physical_context:"},{"line_number":162,"context_line":"            LOG.warning(\u0027Missing physical_context in temperature sensor\u0027)"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":"        if reading_celsius is None:"},{"line_number":165,"context_line":"            LOG.debug(\u0027Missing reading_celsius in temperature sensor\u0027)"},{"line_number":166,"context_line":"            return None"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        metric_name \u003d \u0027baremetal_temp_%s_celsius\u0027 % physical_context.lower()"}],"source_content_type":"text/x-python","patch_set":1,"id":"12d8ded4_05026ea7","line":165,"range":{"start_line":162,"start_character":0,"end_line":165,"end_character":70},"updated":"2026-02-06 16:16:38.000000000","message":"suggestion: inconsistent log levels for similar types of issues, maybe worth revisiting","commit_id":"783c9dc75f526c67e5933b08f8b17913f0f790f2"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1b1a415ee1a44838ccb63820c594c3112ebc853f","unresolved":true,"context_lines":[{"line_number":159,"context_line":"        health \u003d sensor_data.get(\u0027health\u0027)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if not physical_context:"},{"line_number":162,"context_line":"            LOG.warning(\u0027Missing physical_context in temperature sensor\u0027)"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":"        if reading_celsius is None:"},{"line_number":165,"context_line":"            LOG.debug(\u0027Missing reading_celsius in temperature sensor\u0027)"},{"line_number":166,"context_line":"            return None"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        metric_name \u003d \u0027baremetal_temp_%s_celsius\u0027 % physical_context.lower()"}],"source_content_type":"text/x-python","patch_set":1,"id":"a6ec4b43_abea0f12","line":165,"range":{"start_line":162,"start_character":0,"end_line":165,"end_character":70},"in_reply_to":"12d8ded4_05026ea7","updated":"2026-02-09 09:30:52.000000000","message":"interesting, I\u0027m sure I changed this as I\u0027ve noticed the inconsistency\nanyway, I will update it again","commit_id":"783c9dc75f526c67e5933b08f8b17913f0f790f2"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"d022ab01c313cf7687a1a318ab208eb99b798631","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        health \u003d sensor_data.get(\u0027health\u0027)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if not physical_context:"},{"line_number":162,"context_line":"            LOG.warning(\u0027Missing physical_context in temperature sensor\u0027)"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":"        if reading_celsius is None:"},{"line_number":165,"context_line":"            LOG.debug(\u0027Missing reading_celsius in temperature sensor\u0027)"},{"line_number":166,"context_line":"            return None"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        metric_name \u003d \u0027baremetal_temp_%s_celsius\u0027 % physical_context.lower()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5cdc6d91_f18d842e","line":165,"range":{"start_line":162,"start_character":0,"end_line":165,"end_character":70},"in_reply_to":"a6ec4b43_abea0f12","updated":"2026-02-09 14:03:03.000000000","message":"Done","commit_id":"783c9dc75f526c67e5933b08f8b17913f0f790f2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"59bb0da66d049a54794fb8922864c4d8fe997a61","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    payload \u003d node_message"},{"line_number":68,"context_line":"    for key in (\u0027payload\u0027, sensor_type):"},{"line_number":69,"context_line":"        payload \u003d payload.get(key, {})"},{"line_number":70,"context_line":"    return payload"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def _build_generic_sensor_metrics("}],"source_content_type":"text/x-python","patch_set":2,"id":"e3644de2_19d1f9d4","line":70,"updated":"2026-02-24 17:19:32.000000000","message":"This produced a lot of discussion in review chat. It\u0027s a direct copy paste and it\u0027s IPE :shrug:","commit_id":"b0ffb2adbacfedbc22f8686200e5598276c33f3d"}]}
