)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb3c2ef90cb7561a2223c0aedd3d68a2c9400a9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This improves the documentation on configuration parameters for the"},{"line_number":10,"context_line":"Grafana datasource."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-on: I5d1d3129b5d225f0f2fc86d149c046f9aab94d47"},{"line_number":13,"context_line":"Change-Id: Ifd8be7491669c429482d880fdf0219be5ef03163"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_1a7365b3","line":11,"updated":"2019-06-21 15:09:28.000000000","message":"nit: I\u0027d mention this is a follow up to change If1f27dc01e853c5b24bdb21f1e810f64eaee2e5c.","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"2c2d0f6e3eb959b31f578d48b58db6c5a5f2611e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This improves the documentation on configuration parameters for the"},{"line_number":10,"context_line":"Grafana datasource."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-on: I5d1d3129b5d225f0f2fc86d149c046f9aab94d47"},{"line_number":13,"context_line":"Change-Id: Ifd8be7491669c429482d880fdf0219be5ef03163"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_7a07011e","line":11,"in_reply_to":"9fb8cfa7_1a7365b3","updated":"2019-06-21 15:42:59.000000000","message":"Done","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb3c2ef90cb7561a2223c0aedd3d68a2c9400a9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This improves the documentation on configuration parameters for the"},{"line_number":10,"context_line":"Grafana datasource."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-on: I5d1d3129b5d225f0f2fc86d149c046f9aab94d47"},{"line_number":13,"context_line":"Change-Id: Ifd8be7491669c429482d880fdf0219be5ef03163"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_fa6f71c2","line":12,"updated":"2019-06-21 15:09:28.000000000","message":"Since these changes are in the same repo you could just rebase on top of this change and then you don\u0027t need the depends-on.","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"}],"watcher/conf/grafana_client.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb3c2ef90cb7561a2223c0aedd3d68a2c9400a9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"grafana_client \u003d cfg.OptGroup(name\u003d\u0027grafana_client\u0027,"},{"line_number":22,"context_line":"                              title\u003d\u0027Configuration Options for Grafana\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"GRAFANA_CLIENT_OPTS \u003d ["},{"line_number":25,"context_line":"    # TODO(Dantali0n) each individual metric could have its own token."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_1af605fb","line":22,"updated":"2019-06-21 15:09:28.000000000","message":"It looks like there is a lot in these options that is explained in more detail in https://docs.openstack.org/watcher/latest/datasources/grafana.html so it would probably be good to add a simple help to the option group to say something like:\n\nhelp\u003d\"See https://docs.openstack.org/watcher/latest/datasources/grafana.html for details on how these options are used.\"","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e158afc88530ddface6d1c33062236853a7b86c7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"grafana_client \u003d cfg.OptGroup(name\u003d\u0027grafana_client\u0027,"},{"line_number":22,"context_line":"                              title\u003d\u0027Configuration Options for Grafana\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"GRAFANA_CLIENT_OPTS \u003d ["},{"line_number":25,"context_line":"    # TODO(Dantali0n) each individual metric could have its own token."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_c5cf327d","line":22,"in_reply_to":"9fb8cfa7_1ad4c5bc","updated":"2019-06-21 15:57:52.000000000","message":"The title kwarg is different from the help kwarg that I mentioned. The help should definitely show up in the docs for the group, e.g.:\n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#upgrade-levels","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"2c2d0f6e3eb959b31f578d48b58db6c5a5f2611e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"grafana_client \u003d cfg.OptGroup(name\u003d\u0027grafana_client\u0027,"},{"line_number":22,"context_line":"                              title\u003d\u0027Configuration Options for Grafana\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"GRAFANA_CLIENT_OPTS \u003d ["},{"line_number":25,"context_line":"    # TODO(Dantali0n) each individual metric could have its own token."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_1ad4c5bc","line":22,"in_reply_to":"9fb8cfa7_1af605fb","updated":"2019-06-21 15:42:59.000000000","message":"This help option in OptGroup is not rendered anywhere not in the config sample or the configuration documentation. Not sure if that\u0027s a bug specifically in Watcher but unless that is fixed setting this help in the OptGroup is not very useful. I have put it in place anyway in case it does get fixed but keep in mind that it does not work.","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb3c2ef90cb7561a2223c0aedd3d68a2c9400a9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                },"},{"line_number":84,"context_line":"                help\u003d\"Mapping of datasource metrics to resource attributes. \""},{"line_number":85,"context_line":"                     \"For a complete list of available attributes see \""},{"line_number":86,"context_line":"                     \"https://docs.openstack.org/watcher/latest/datasources/gr\""},{"line_number":87,"context_line":"                     \"afana.html#attribute \""},{"line_number":88,"context_line":"                     \"Values should be strings. Example: hostname\"),"},{"line_number":89,"context_line":"    cfg.DictOpt(\u0027translator_map\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_faa4510a","line":86,"updated":"2019-06-21 15:09:28.000000000","message":"Ack this is why we have the dependency on https://review.opendev.org/#/c/664613/3/doc/source/datasources/grafana.rst@186","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"2c2d0f6e3eb959b31f578d48b58db6c5a5f2611e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                },"},{"line_number":84,"context_line":"                help\u003d\"Mapping of datasource metrics to resource attributes. \""},{"line_number":85,"context_line":"                     \"For a complete list of available attributes see \""},{"line_number":86,"context_line":"                     \"https://docs.openstack.org/watcher/latest/datasources/gr\""},{"line_number":87,"context_line":"                     \"afana.html#attribute \""},{"line_number":88,"context_line":"                     \"Values should be strings. Example: hostname\"),"},{"line_number":89,"context_line":"    cfg.DictOpt(\u0027translator_map\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_bada59e6","line":86,"in_reply_to":"9fb8cfa7_faa4510a","updated":"2019-06-21 15:42:59.000000000","message":"Exactly.","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb3c2ef90cb7561a2223c0aedd3d68a2c9400a9","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                     \"Values should be strings for which the .format method \""},{"line_number":126,"context_line":"                     \"will transform it. The transformation offers five \""},{"line_number":127,"context_line":"                     \"parameters to the query labeled {0} to {4}. {0} will be \""},{"line_number":128,"context_line":"                     \"replaced with the aggregate, {1} with the resource\""},{"line_number":129,"context_line":"                     \"attribute, {2} with the period, {3} with the\""},{"line_number":130,"context_line":"                     \"granularity and {4} with translator specifics for\""},{"line_number":131,"context_line":"                     \"InfluxDB this will be the retention period. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_3ad2e95d","line":128,"range":{"start_line":128,"start_character":72,"end_line":128,"end_character":73},"updated":"2019-06-21 15:09:28.000000000","message":"need a space","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"2c2d0f6e3eb959b31f578d48b58db6c5a5f2611e","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                     \"Values should be strings for which the .format method \""},{"line_number":126,"context_line":"                     \"will transform it. The transformation offers five \""},{"line_number":127,"context_line":"                     \"parameters to the query labeled {0} to {4}. {0} will be \""},{"line_number":128,"context_line":"                     \"replaced with the aggregate, {1} with the resource\""},{"line_number":129,"context_line":"                     \"attribute, {2} with the period, {3} with the\""},{"line_number":130,"context_line":"                     \"granularity and {4} with translator specifics for\""},{"line_number":131,"context_line":"                     \"InfluxDB this will be the retention period. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_7ae4e1ac","line":128,"range":{"start_line":128,"start_character":72,"end_line":128,"end_character":73},"in_reply_to":"9fb8cfa7_3ad2e95d","updated":"2019-06-21 15:42:59.000000000","message":"Done","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb3c2ef90cb7561a2223c0aedd3d68a2c9400a9","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                     \"will transform it. The transformation offers five \""},{"line_number":127,"context_line":"                     \"parameters to the query labeled {0} to {4}. {0} will be \""},{"line_number":128,"context_line":"                     \"replaced with the aggregate, {1} with the resource\""},{"line_number":129,"context_line":"                     \"attribute, {2} with the period, {3} with the\""},{"line_number":130,"context_line":"                     \"granularity and {4} with translator specifics for\""},{"line_number":131,"context_line":"                     \"InfluxDB this will be the retention period. \""},{"line_number":132,"context_line":"                     \"These queries will need to be constructed using tools \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_5ad55d42","line":129,"range":{"start_line":129,"start_character":66,"end_line":129,"end_character":67},"updated":"2019-06-21 15:09:28.000000000","message":"space","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"2c2d0f6e3eb959b31f578d48b58db6c5a5f2611e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                     \"will transform it. The transformation offers five \""},{"line_number":127,"context_line":"                     \"parameters to the query labeled {0} to {4}. {0} will be \""},{"line_number":128,"context_line":"                     \"replaced with the aggregate, {1} with the resource\""},{"line_number":129,"context_line":"                     \"attribute, {2} with the period, {3} with the\""},{"line_number":130,"context_line":"                     \"granularity and {4} with translator specifics for\""},{"line_number":131,"context_line":"                     \"InfluxDB this will be the retention period. \""},{"line_number":132,"context_line":"                     \"These queries will need to be constructed using tools \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_9adf55d5","line":129,"range":{"start_line":129,"start_character":66,"end_line":129,"end_character":67},"in_reply_to":"9fb8cfa7_5ad55d42","updated":"2019-06-21 15:42:59.000000000","message":"Done","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb3c2ef90cb7561a2223c0aedd3d68a2c9400a9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                     \"parameters to the query labeled {0} to {4}. {0} will be \""},{"line_number":128,"context_line":"                     \"replaced with the aggregate, {1} with the resource\""},{"line_number":129,"context_line":"                     \"attribute, {2} with the period, {3} with the\""},{"line_number":130,"context_line":"                     \"granularity and {4} with translator specifics for\""},{"line_number":131,"context_line":"                     \"InfluxDB this will be the retention period. \""},{"line_number":132,"context_line":"                     \"These queries will need to be constructed using tools \""},{"line_number":133,"context_line":"                     \"such as Postman. Example: SELECT cpu FROM {4}.\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_1acfe5b0","line":130,"range":{"start_line":130,"start_character":71,"end_line":130,"end_character":72},"updated":"2019-06-21 15:09:28.000000000","message":"space","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"2c2d0f6e3eb959b31f578d48b58db6c5a5f2611e","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                     \"parameters to the query labeled {0} to {4}. {0} will be \""},{"line_number":128,"context_line":"                     \"replaced with the aggregate, {1} with the resource\""},{"line_number":129,"context_line":"                     \"attribute, {2} with the period, {3} with the\""},{"line_number":130,"context_line":"                     \"granularity and {4} with translator specifics for\""},{"line_number":131,"context_line":"                     \"InfluxDB this will be the retention period. \""},{"line_number":132,"context_line":"                     \"These queries will need to be constructed using tools \""},{"line_number":133,"context_line":"                     \"such as Postman. Example: SELECT cpu FROM {4}.\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_3af0a967","line":130,"range":{"start_line":130,"start_character":71,"end_line":130,"end_character":72},"in_reply_to":"9fb8cfa7_1acfe5b0","updated":"2019-06-21 15:42:59.000000000","message":"Done","commit_id":"65a9e98b69acb3e131cc90b4fab2c0ca5d59d35b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c19378ecc52b9bf6e9036a065369f7d7aecc4218","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"grafana_client \u003d cfg.OptGroup(name\u003d\u0027grafana_client\u0027,"},{"line_number":22,"context_line":"                              title\u003d\u0027Configuration Options for Grafana\u0027,"},{"line_number":23,"context_line":"                              help\u003d\"See https://docs.openstack.org/watcher/lat\""},{"line_number":24,"context_line":"                                   \"est/datasources/grafana.html for details \""},{"line_number":25,"context_line":"                                   \"on how these options are used.\")"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_a5c47e60","line":23,"updated":"2019-06-21 15:58:30.000000000","message":"Yeah this should render in the docs.","commit_id":"4f04d558470c99669e57d3d98e6a9d907ee30f0f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"771fd173c10059f58528ce14649085ce061a7542","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"grafana_client \u003d cfg.OptGroup(name\u003d\u0027grafana_client\u0027,"},{"line_number":22,"context_line":"                              title\u003d\u0027Configuration Options for Grafana\u0027,"},{"line_number":23,"context_line":"                              help\u003d\"See https://docs.openstack.org/watcher/lat\""},{"line_number":24,"context_line":"                                   \"est/datasources/grafana.html for details \""},{"line_number":25,"context_line":"                                   \"on how these options are used.\")"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_c5d092fa","line":23,"in_reply_to":"9fb8cfa7_a599de79","updated":"2019-06-21 16:04:21.000000000","message":"Hmm, it looks like you\u0027re correct:\n\nhttp://logs.openstack.org/56/666856/2/check/openstack-tox-docs/0c61762/html/configuration/watcher.html#grafana-client\n\nSomething must be misconfigured about the way watcher builds configuration...I can dig into that.","commit_id":"4f04d558470c99669e57d3d98e6a9d907ee30f0f"},{"author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"change_message_id":"34c94d5de5fa468825804da13532d3f6619d5a9e","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"grafana_client \u003d cfg.OptGroup(name\u003d\u0027grafana_client\u0027,"},{"line_number":22,"context_line":"                              title\u003d\u0027Configuration Options for Grafana\u0027,"},{"line_number":23,"context_line":"                              help\u003d\"See https://docs.openstack.org/watcher/lat\""},{"line_number":24,"context_line":"                                   \"est/datasources/grafana.html for details \""},{"line_number":25,"context_line":"                                   \"on how these options are used.\")"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_a599de79","line":23,"in_reply_to":"9fb8cfa7_a5c47e60","updated":"2019-06-21 16:00:25.000000000","message":"I would look once they are generated, I highly suspect they will not be. I have tested this locally and also noticed this several times while others were writing patches.","commit_id":"4f04d558470c99669e57d3d98e6a9d907ee30f0f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fe2283831ed29a635489c91ace0ef5c6b4925ef3","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def list_opts():"},{"line_number":146,"context_line":"    return [(\u0027grafana_client\u0027, GRAFANA_CLIENT_OPTS)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_f45c65ee","line":146,"range":{"start_line":146,"start_character":14,"end_line":146,"end_character":28},"updated":"2019-06-21 17:58:34.000000000","message":"Apparently this has to be the object to get the help string to render, see how one is done in nova:\n\nhttps://github.com/openstack/nova/blob/c6218428e9b29a2c52808ec7d27b4b21aadc0299/nova/conf/conductor.py#L62\n\nI asked about this in #openstack-oslo:\n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-oslo/%23openstack-oslo.2019-06-21.log.html#t2019-06-21T16:29:48","commit_id":"4f04d558470c99669e57d3d98e6a9d907ee30f0f"}]}
