)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"47a7d0a073a1aec3a1438530623ee4c4b34780ee","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Documented available aggregate functions"},{"line_number":10,"context_line":"and added example syntax showing how to use"},{"line_number":11,"context_line":"Capabilities API, which allows the user to"},{"line_number":12,"context_line":"selectively access aggregate functions."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9739d2102baf6040de017843ae20391c4c9b6fff"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAWH%2F%2FxwQ%3D","line":11,"updated":"2014-03-13 21:43:00.000000000","message":"It is the Statistics API, which is described in the second half of this sentence, so you can refer to it as something like improved Statistics API. And you can add one more sentence about Capabilities API, which is the one that is used to return the available functionality for the different DB drivers.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"}],"doc/source/webapi/v2.rst":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":37,"context_line":".. autotype:: ceilometer.api.controllers.v2.Statistics"},{"line_number":38,"context_line":"   :members:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The Aggregate functions are *avg*, *sum*, *min*, *max*, *count*, *stdev*,"},{"line_number":41,"context_line":"and *cardinality* (the number of unique values for some sample attribute)."},{"line_number":42,"context_line":"See the Functional Examples section for more detail on using aggregate functions."},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx%2F8%3D","line":40,"updated":"2014-03-13 21:15:42.000000000","message":"Two ds, i.e. stddev","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"   :members:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The Aggregate functions are *avg*, *sum*, *min*, *max*, *count*, *stdev*,"},{"line_number":41,"context_line":"and *cardinality* (the number of unique values for some sample attribute)."},{"line_number":42,"context_line":"See the Functional Examples section for more detail on using aggregate functions."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":".. autotype:: ceilometer.api.controllers.v2.Aggregate"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx7U%3D","line":41,"updated":"2014-03-13 21:15:42.000000000","message":"Need to distinguish between:\n\n1. standard aggregate functions (avg, sum, min, max, count) that are *all* applied if no specific aggregate function is explicitly selected in the statistics query\n\nand:\n\n2. the wider range of aggregate functions (currently: stddev, cardinality) that are *only* applied if explicitly selected for the statistics query","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The Aggregate functions are *avg*, *sum*, *min*, *max*, *count*, *stdev*,"},{"line_number":41,"context_line":"and *cardinality* (the number of unique values for some sample attribute)."},{"line_number":42,"context_line":"See the Functional Examples section for more detail on using aggregate functions."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":".. autotype:: ceilometer.api.controllers.v2.Aggregate"},{"line_number":45,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fzz8%3D","line":42,"updated":"2014-03-13 17:49:32.000000000","message":"You can use references instead of typing the name of the section that you would like to refer to. You can specify the source of a reference (if it has not been defined already) as the one below for Alarms, which has the tag:\n.. _alarms-api:\n\nTo use the reference in the text, you have to use the following syntax: :ref:`alarms-api`","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":44,"context_line":".. autotype:: ceilometer.api.controllers.v2.Aggregate"},{"line_number":45,"context_line":"   :members:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"You can use the Capabilities API to select specific aggregate functions"},{"line_number":48,"context_line":"supported by the currently configured storage driver. See the API Queries"},{"line_number":49,"context_line":"section for example syntax."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx%2FM%3D","line":47,"updated":"2014-03-13 21:15:42.000000000","message":"s/to select specific aggregate/to discover the specific aggregate/\n\nAlso you need an example of using the capabilities API.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"   :members:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"You can use the Capabilities API to select specific aggregate functions"},{"line_number":48,"context_line":"supported by the currently configured storage driver. See the API Queries"},{"line_number":49,"context_line":"section for example syntax."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":".. autotype:: ceilometer.api.controllers.v2.Capabilities"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fzy8%3D","line":48,"updated":"2014-03-13 17:49:32.000000000","message":"Reference instead of API Queries, as above.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":51,"context_line":".. autotype:: ceilometer.api.controllers.v2.Capabilities"},{"line_number":52,"context_line":"   :members:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. autotype:: ceilometer.api.controllers.v2.CapabilitiesController"},{"line_number":55,"context_line":"   :members:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":".. _alarms-api:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2FzxQ%3D","line":54,"updated":"2014-03-13 17:49:32.000000000","message":"Please transpose this block with the previous one (Capabilities), as the pattern in this file is to list the Controller first.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":193,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":194,"context_line":"       \"http://localhost:8777/v2/meters/instance?q.field\u003dmetadata.event_type\u0026q.value\u003dcompute.instance.delete.start\""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"A query to find *max*, *stdev*, and *count* using the capabilities API::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":199,"context_line":"       \"http://localhost:8777/v2/cpu/statistics?q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fzv4%3D","line":196,"updated":"2014-03-13 17:49:32.000000000","message":"a/capabilities/Capabilities/","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":193,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":194,"context_line":"       \"http://localhost:8777/v2/meters/instance?q.field\u003dmetadata.event_type\u0026q.value\u003dcompute.instance.delete.start\""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"A query to find *max*, *stdev*, and *count* using the capabilities API::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":199,"context_line":"       \"http://localhost:8777/v2/cpu/statistics?q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx%2BU%3D","line":196,"updated":"2014-03-13 21:15:42.000000000","message":"s/the capabilities API/the statistics API/\n\n(the capabilities APi allow one to discover which aggregate functions are supported, where as the statistics API provides the actual logic)","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"47a7d0a073a1aec3a1438530623ee4c4b34780ee","unresolved":false,"context_lines":[{"line_number":193,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":194,"context_line":"       \"http://localhost:8777/v2/meters/instance?q.field\u003dmetadata.event_type\u0026q.value\u003dcompute.instance.delete.start\""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"A query to find *max*, *stdev*, and *count* using the capabilities API::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":199,"context_line":"       \"http://localhost:8777/v2/cpu/statistics?q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx1A%3D","line":196,"in_reply_to":"AAAAWH%2F%2Fx%2BU%3D","updated":"2014-03-13 21:43:00.000000000","message":"Good point, my \"syntax checker\" was stronger here than the \"semantics\" one. :)\n\nBut one more here: s/stdev/stddev/","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"A query to find *max*, *stdev*, and *count* using the capabilities API::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":199,"context_line":"       \"http://localhost:8777/v2/cpu/statistics?q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"When one or more of the requested aggregates are unsupported, a 400"},{"line_number":202,"context_line":"bad request response will be returned along with a log message."}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fzos%3D","line":199,"updated":"2014-03-13 17:49:32.000000000","message":"I think this syntax is not correct here, the request that you explained above should be addressed by using this syntax, you mentioned below: /v2/meters/\u003cmeter_name\u003e/statistics?aggregate.func\u003d\u003cname\u003e\u0026aggregate.param\u003d\u003cvalue\u003e, where you can add more aggregate.func and aggregate.value with separating them with \u0027\u0026\u0027.\n\nAlso a \u0027 \" \u0027 is missing from the end of the URL.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":196,"context_line":"A query to find *max*, *stdev*, and *count* using the capabilities API::"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":199,"context_line":"       \"http://localhost:8777/v2/cpu/statistics?q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"When one or more of the requested aggregates are unsupported, a 400"},{"line_number":202,"context_line":"bad request response will be returned along with a log message."}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx9o%3D","line":199,"updated":"2014-03-13 21:15:42.000000000","message":"s/q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count/\n /aggregate.func\u003dmax\u0026aggregate.func\u003dstddev\u0026aggregate.func\u003dcount\"/\n\n... you\u0027ve mixed query and aggregate syntax in that URL.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":198,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":199,"context_line":"       \"http://localhost:8777/v2/cpu/statistics?q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"When one or more of the requested aggregates are unsupported, a 400"},{"line_number":202,"context_line":"bad request response will be returned along with a log message."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additional examples::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2FznQ%3D","line":201,"updated":"2014-03-13 17:49:32.000000000","message":"I think it would be a bit more readable to write something like this:\nIf any of the requested aggregate functions is not supported, then an error message will be returned with HTTP 400 error code along with a proper error message.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"     curl -H \u0027X-Auth-Token: \u003cinserttokenhere\u003e\u0027 \\"},{"line_number":199,"context_line":"       \"http://localhost:8777/v2/cpu/statistics?q.field\u003daggregate?q.op\u003deq\u0026q.value\u003dmax,stddev,count"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"When one or more of the requested aggregates are unsupported, a 400"},{"line_number":202,"context_line":"bad request response will be returned along with a log message."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"Additional examples::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx9E%3D","line":201,"in_reply_to":"AAAAWH%2F%2FznQ%3D","updated":"2014-03-13 21:15:42.000000000","message":"Agree.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"To access the aggregation functions selectively, use the following syntax::"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    GET /v2/meters/\u003cmeter_name\u003e/statistics?aggregate.func\u003d\u003cname\u003e\u0026aggregate.param\u003d\u003cvalue\u003e"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"An example query would be::"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx7M%3D","line":392,"updated":"2014-03-13 21:15:42.000000000","message":"Note that the aggregate.param is optional.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":407,"context_line":"      \"groupby\": null,"},{"line_number":408,"context_line":"      \"unit\" : \"%\"}]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"Currently only *cardinality* needs the attribute name as an input parameter."},{"line_number":411,"context_line":"An example using cardinality, period and group by aggregation to calculate"},{"line_number":412,"context_line":"the number of distinct instances that existed for each tenant"},{"line_number":413,"context_line":"contrasted with the total number of instance samples for that tenant"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2FzjU%3D","line":410,"updated":"2014-03-13 17:49:32.000000000","message":"This line should be moved up to the description of the available function in Statistics. It can be highlighted with a Note section. It could be something like this:\n\n.. note:: *cardinality* needs the \u0027aggregate.param\u0027 field to be specified in the request.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":408,"context_line":"      \"unit\" : \"%\"}]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"Currently only *cardinality* needs the attribute name as an input parameter."},{"line_number":411,"context_line":"An example using cardinality, period and group by aggregation to calculate"},{"line_number":412,"context_line":"the number of distinct instances that existed for each tenant"},{"line_number":413,"context_line":"contrasted with the total number of instance samples for that tenant"},{"line_number":414,"context_line":"in each 15 min period::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2FzgE%3D","line":411,"updated":"2014-03-13 17:49:32.000000000","message":"I think something like this would be more clear here:\n... using *cardinality* as aggregation function, with \u0027period\u0027 and \u0027group by\u0027 options specified, to calculate ...","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":408,"context_line":"      \"unit\" : \"%\"}]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"Currently only *cardinality* needs the attribute name as an input parameter."},{"line_number":411,"context_line":"An example using cardinality, period and group by aggregation to calculate"},{"line_number":412,"context_line":"the number of distinct instances that existed for each tenant"},{"line_number":413,"context_line":"contrasted with the total number of instance samples for that tenant"},{"line_number":414,"context_line":"in each 15 min period::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx6g%3D","line":411,"in_reply_to":"AAAAWH%2F%2FzgE%3D","updated":"2014-03-13 21:15:42.000000000","message":"Agree with ildikov.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e4271753bb2f4a02e6c9d4024f09471d2014958a","unresolved":false,"context_lines":[{"line_number":411,"context_line":"An example using cardinality, period and group by aggregation to calculate"},{"line_number":412,"context_line":"the number of distinct instances that existed for each tenant"},{"line_number":413,"context_line":"contrasted with the total number of instance samples for that tenant"},{"line_number":414,"context_line":"in each 15 min period::"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    GET /v2/meters/instance/statistics?aggregate.func\u003d"},{"line_number":417,"context_line":"    cardinality\u0026aggregate.param\u003dresource_id"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fzf8%3D","line":414,"updated":"2014-03-13 17:49:32.000000000","message":"A suggestion for the section above is to divide this long sentence to a few shorter ones, I think it would be more readable that way.","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ed662a22777fc0eaa42d1ac25e4177bb10b5ef9f","unresolved":false,"context_lines":[{"line_number":418,"context_line":"    \u0026aggregate.func\u003dcount"},{"line_number":419,"context_line":"    $groupby\u003dprojectid\u0026period\u003d900"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"gives return values of::"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    [{\"count\": 19,"},{"line_number":424,"context_line":"      \"aggregate\": {\"count\": 19.0, \"cardinality/resource_id\": 3.0},"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAWH%2F%2Fx5s%3D","line":421,"updated":"2014-03-13 21:15:42.000000000","message":"s/gives return values of/gives an example response of form/","commit_id":"2961e80f68b79cb277471033af03df8f71601f7f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"   :members:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":".. autotype:: ceilometer.api.controllers.v2.Statistics"},{"line_number":38,"context_line":"   :members:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"A HTTP v2/meter/\u003cmeter_name\u003e/statistics request will return the standard set"},{"line_number":41,"context_line":"of statistics: *avg*, *sum*, *min*, *max*, *count*. The Statistics API has been"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FqOU%3D","line":38,"updated":"2014-03-14 18:02:31.000000000","message":"In my opinion, a subsection would be useful here to highlight the new aggregates functionality here I think. Subsections can be defined similarly like the section titles, you only need to use \u0027+\u0027 for that, in the \u0027API and CLI query examples\u0027 section you can find a few examples.","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":37,"context_line":".. autotype:: ceilometer.api.controllers.v2.Statistics"},{"line_number":38,"context_line":"   :members:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"A HTTP v2/meter/\u003cmeter_name\u003e/statistics request will return the standard set"},{"line_number":41,"context_line":"of statistics: *avg*, *sum*, *min*, *max*, *count*. The Statistics API has been"},{"line_number":42,"context_line":"extended to include the aggregate functions *stddev* and *cardinality*. You can"},{"line_number":43,"context_line":"explicitly select these functions or any from the standard set by specifying"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrWI%3D","line":40,"updated":"2014-03-14 15:25:09.000000000","message":"Leading slash and pluralized meter*s*\n\n  /v2/meters/...","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":37,"context_line":".. autotype:: ceilometer.api.controllers.v2.Statistics"},{"line_number":38,"context_line":"   :members:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"A HTTP v2/meter/\u003cmeter_name\u003e/statistics request will return the standard set"},{"line_number":41,"context_line":"of statistics: *avg*, *sum*, *min*, *max*, *count*. The Statistics API has been"},{"line_number":42,"context_line":"extended to include the aggregate functions *stddev* and *cardinality*. You can"},{"line_number":43,"context_line":"explicitly select these functions or any from the standard set by specifying"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FqMk%3D","line":40,"in_reply_to":"AAAAWH%2F%2FrWI%3D","updated":"2014-03-14 18:02:31.000000000","message":"I think this sentence would be more informative, if the available function would be highlighted more, as the syntax is already documented in the \u0027Meters\u0027 section above. I would write something like this:\n\nWhen a simple statistics request is invoked (using GET /v2/meters/...), it will return the standard set of *Statistics*: ...","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":42,"context_line":"extended to include the aggregate functions *stddev* and *cardinality*. You can"},{"line_number":43,"context_line":"explicitly select these functions or any from the standard set by specifying"},{"line_number":44,"context_line":"an aggregate function in the statistics query, e.g.:"},{"line_number":45,"context_line":"v2/meter/\u003cmeter_name\u003e/statistics?aggregate.func\u003d\u003cname\u003e\u0026aggregate.param\u003d\u003cvalue\u003e"},{"line_number":46,"context_line":"(where aggregate.param is optional). See the :ref:`functional_examples`"},{"line_number":47,"context_line":"section for more detail."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrVo%3D","line":45,"updated":"2014-03-14 15:25:09.000000000","message":"/v2/meters/...","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":42,"context_line":"extended to include the aggregate functions *stddev* and *cardinality*. You can"},{"line_number":43,"context_line":"explicitly select these functions or any from the standard set by specifying"},{"line_number":44,"context_line":"an aggregate function in the statistics query, e.g.:"},{"line_number":45,"context_line":"v2/meter/\u003cmeter_name\u003e/statistics?aggregate.func\u003d\u003cname\u003e\u0026aggregate.param\u003d\u003cvalue\u003e"},{"line_number":46,"context_line":"(where aggregate.param is optional). See the :ref:`functional_examples`"},{"line_number":47,"context_line":"section for more detail."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FqJI%3D","line":45,"in_reply_to":"AAAAWH%2F%2FrVo%3D","updated":"2014-03-14 18:02:31.000000000","message":"I think it could be placed in a new line with the spaces before, etc., like in case of the functional examples, and this way it would be more readable:\n\n... statistics query, e.g.::\n\n    /v2/meters/...","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"explicitly select these functions or any from the standard set by specifying"},{"line_number":44,"context_line":"an aggregate function in the statistics query, e.g.:"},{"line_number":45,"context_line":"v2/meter/\u003cmeter_name\u003e/statistics?aggregate.func\u003d\u003cname\u003e\u0026aggregate.param\u003d\u003cvalue\u003e"},{"line_number":46,"context_line":"(where aggregate.param is optional). See the :ref:`functional_examples`"},{"line_number":47,"context_line":"section for more detail."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. note:: Currently only *cardinality* needs aggregate.param to be specified."}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FqKo%3D","line":46,"updated":"2014-03-14 18:02:31.000000000","message":"s/functional_examples/functional-examples/\n\nCurrently it does not match the reference that you specified below.","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":49,"context_line":".. note:: Currently only *cardinality* needs aggregate.param to be specified."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":".. autotype:: ceilometer.api.controllers.v2.Aggregate"},{"line_number":52,"context_line":"   :members:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The Capabilities API allows you to directly find out which aggregate functions"},{"line_number":55,"context_line":"are supported by the currently configured storage driver. A capabilities query"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FqVs%3D","line":52,"updated":"2014-03-14 18:02:31.000000000","message":"I think it would be good to add a title for the Capabilities API, so it would be a new section, as it is a separate API endpoint, with a separate functionality. You can specify a section title by using \u0027\u003d\u0027, like in case of the Samples and Statistics above. The line from \u0027\u003d\u0027s should be as long as many characters the title contains, if I know right.","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":51,"context_line":".. autotype:: ceilometer.api.controllers.v2.Aggregate"},{"line_number":52,"context_line":"   :members:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The Capabilities API allows you to directly find out which aggregate functions"},{"line_number":55,"context_line":"are supported by the currently configured storage driver. A capabilities query"},{"line_number":56,"context_line":"returns a flattened dictionary of properties with associated boolean values -"},{"line_number":57,"context_line":"the absence of a property means it is not enabled."}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrUw%3D","line":54,"updated":"2014-03-14 15:25:09.000000000","message":"s/directly find out/discover/\n\nor: \n\ns/directly find out/ascertain/","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":51,"context_line":".. autotype:: ceilometer.api.controllers.v2.Aggregate"},{"line_number":52,"context_line":"   :members:"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The Capabilities API allows you to directly find out which aggregate functions"},{"line_number":55,"context_line":"are supported by the currently configured storage driver. A capabilities query"},{"line_number":56,"context_line":"returns a flattened dictionary of properties with associated boolean values -"},{"line_number":57,"context_line":"the absence of a property means it is not enabled."}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2Fp80%3D","line":54,"in_reply_to":"AAAAWH%2F%2FrUw%3D","updated":"2014-03-14 18:02:31.000000000","message":"Capabilities API is not just for discovering which of the aggregate functions are available. The different DB drivers support only the different subsets of the functionality, provided by the V2 API of Ceilometer. Here something like this would be better:\n\n... to discover which functions from the V2 API functionality, including the selectable aggregate functions, are supported by ...","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":54,"context_line":"The Capabilities API allows you to directly find out which aggregate functions"},{"line_number":55,"context_line":"are supported by the currently configured storage driver. A capabilities query"},{"line_number":56,"context_line":"returns a flattened dictionary of properties with associated boolean values -"},{"line_number":57,"context_line":"the absence of a property means it is not enabled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":".. autotype:: ceilometer.api.controllers.v2.CapabilitiesController"},{"line_number":60,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2Fp7A%3D","line":57,"updated":"2014-03-14 18:02:31.000000000","message":"Here the \u0027True\u0027 means that a feature is available and \u0027Flase\u0027 means that it is not supported, which is a bit different from \u0027enabled\u0027. I think the \u0027True\u0027 value is kind of staright forward, so as you did, the negative case could be described like:\n\n... - the \u0027False\u0027 value means that the corresponding feature is not available for the configured DB backend.","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"the absence of a property means it is not enabled."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":".. autotype:: ceilometer.api.controllers.v2.CapabilitiesController"},{"line_number":60,"context_line":"   :members:"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. autotype:: ceilometer.api.controllers.v2.Capabilities"},{"line_number":63,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FqhQ%3D","line":60,"updated":"2014-03-14 18:02:31.000000000","message":"You have to use \u0027webprefix\u0027 here instead of \u0027members\u0027, as this block explains the REST endpoint here, so you have to change :members: to\n\n:webprefix: /v2/capabilities\n\nwhich will result in listing the available operation son this endpoint, so you will get result:\n\nGET /v2/capabilities \n\nand the additional comment from v2.py, as you can see in the current doc, for instance in case of how the Resources section is started right at the beginning.","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"Use the same syntax to access the aggregate functions not in the standard set,"},{"line_number":409,"context_line":"e.g. *stddev* and *cardinality*. If you have a request for the standard"},{"line_number":410,"context_line":"deviation of the CPU utilization, it would have the form::"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    GET /v2/meters/cpu_util/statistics?aggregate.func\u003dstddev"},{"line_number":413,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrTI%3D","line":410,"updated":"2014-03-14 15:25:09.000000000","message":"s/If you have a request for the standard deviation of the CPU utilization, it would have the form/A request for the standard deviation of CPU utilization would take the form/","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    GET /v2/meters/cpu_util/statistics?aggregate.func\u003dstddev"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"And would give return values like the example response below::"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    [{\"aggregate\": {\"stddev\":0.6858829535841072},"},{"line_number":417,"context_line":"      \"duration_start\": \"2014-01-30T11:13:23\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrSU%3D","line":414,"updated":"2014-03-14 15:25:09.000000000","message":"s/And would give return values like the example response below/And would give a response such as the example/","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":424,"context_line":"      \"unit\" : \"%\"}]"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"The request syntax is similar for *cardinality* but with the aggregate.param"},{"line_number":427,"context_line":"option enabled. So, for example, if you want to know the number of distinct"},{"line_number":428,"context_line":"users with images, you would do::"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"     GET /v2/meters/image/statistics?aggregate.func\u003dcardinality"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrSI%3D","line":427,"updated":"2014-03-14 15:25:09.000000000","message":"s/enabled/provided/","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":428,"context_line":"users with images, you would do::"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"     GET /v2/meters/image/statistics?aggregate.func\u003dcardinality"},{"line_number":431,"context_line":"                                       \u0026aggregate.param\u003duser_id"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"For a more involved example, say you want to know, for some tenant, the number"},{"line_number":434,"context_line":"of distinct instances (*cardinality*) as well as the total number of instance"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrCE%3D","line":431,"updated":"2014-03-14 15:25:09.000000000","message":"That\u0027s probably not a great example because IIRC glance does not identify the image owner, only the tenant.\n\nSo maybe count the number of distinct projects instead of users in that case?","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":430,"context_line":"     GET /v2/meters/image/statistics?aggregate.func\u003dcardinality"},{"line_number":431,"context_line":"                                       \u0026aggregate.param\u003duser_id"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"For a more involved example, say you want to know, for some tenant, the number"},{"line_number":434,"context_line":"of distinct instances (*cardinality*) as well as the total number of instance"},{"line_number":435,"context_line":"samples (*count*). You might also want to see this information for every 15"},{"line_number":436,"context_line":"minute interval. Then, using the *period* and *groupby* options, a query would"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrAY%3D","line":433,"updated":"2014-03-14 15:25:09.000000000","message":"s/say you want to know/consider a requirement for determining/","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"For a more involved example, say you want to know, for some tenant, the number"},{"line_number":434,"context_line":"of distinct instances (*cardinality*) as well as the total number of instance"},{"line_number":435,"context_line":"samples (*count*). You might also want to see this information for every 15"},{"line_number":436,"context_line":"minute interval. Then, using the *period* and *groupby* options, a query would"},{"line_number":437,"context_line":"look like the following::"},{"line_number":438,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2Fp4o%3D","line":435,"updated":"2014-03-14 18:02:31.000000000","message":"Maybe s/for every 15 minute interval/with 15 minute long intervals/","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ba62b695494d13c614fffdabaf59aa81a2634e02","unresolved":false,"context_lines":[{"line_number":477,"context_line":"If you are not sure what aggregate functionality is supported by your database"},{"line_number":478,"context_line":"backend, do a capabilities query::"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"     GET /v2/capabilities"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"If you want to retrieve all the instances (not the list of samples, but the"},{"line_number":483,"context_line":"resource itself) that have been run during this month for a given project,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2FrAs%3D","line":480,"updated":"2014-03-14 15:25:09.000000000","message":"Maybe include an example response?\n\n\n{\"api\": {\"statistics:query:complex\": false, \"alarms:history:query:simple\": true, \"events:query:simple\": false, \"alarms:query:simple\": true, \"resources:query:simple\": true, \"statistics:query:simple\": true, \"statistics:aggregation:selectable:count\": true, \"statistics:aggregation:selectable:min\": true, \"samples:pagination\": false, \"statistics:pagination\": false, \"statistics:aggregation:selectable:avg\": true, \"meters:query:complex\": false, \"resources:pagination\": false, \"statistics:groupby\": true, \"alarms:history:query:complex\": true, \"meters:pagination\": false, \"meters:query:simple\": true, \"samples:query:metadata\": true, \"statistics:query:metadata\": true, \"samples:query:simple\": true, \"resources:query:metadata\": true, \"samples:groupby\": false, \"statistics:aggregation:selectable:max\": true, \"samples:query:complex\": true, \"statistics:aggregation:standard\": true, \"statistics:aggregation:selectable:sum\": true, \"meters:query:metadata\": true, \"statistics:aggregation:selectable:stddev\": true, \"alarms:query:complex\": true, \"statistics:aggregation:selectable:cardinality\": true, \"resources:query:complex\": false}}\n\n(with proper formatting and a more logical ordering of the dict elements)","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8e6199a67d6215f336d86ae4d092c6d61db5edc1","unresolved":false,"context_lines":[{"line_number":477,"context_line":"If you are not sure what aggregate functionality is supported by your database"},{"line_number":478,"context_line":"backend, do a capabilities query::"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"     GET /v2/capabilities"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"If you want to retrieve all the instances (not the list of samples, but the"},{"line_number":483,"context_line":"resource itself) that have been run during this month for a given project,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"AAAAWH%2F%2Fp2c%3D","line":480,"in_reply_to":"AAAAWH%2F%2FrAs%3D","updated":"2014-03-14 18:02:31.000000000","message":"As the sample is already included in the endpoint description above and it is quite long, I think that maybe it is ok to not include it again here. It\u0027s another question that this example here is needed or not.","commit_id":"c51fd5a9ee40ca01afe26113abcd8ae2c9ece081"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1bdbee7789b8adaf922b0ef32723b326e725cab5","unresolved":false,"context_lines":[{"line_number":57,"context_line":"Capabilities"},{"line_number":58,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"The Capabilities API allows you to directly discover which functions from the V2 API functionality, including the selectable aggregate functions, are supported by the currently configured storage driver. A capabilities query returns a"},{"line_number":61,"context_line":"flattened dictionary of properties with associated boolean values - the"},{"line_number":62,"context_line":"\u0027False\u0027 value means that the corresponding feature is not available in the backend."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAWH%2F%2FmaY%3D","line":60,"updated":"2014-03-15 11:40:22.000000000","message":"In usual it is better to keep the lines about at most 90 characters long and then gerrit will not break the lines like this one here. It will not affect the generated documentation, so it is just a general suggestion.","commit_id":"c870538ca2606fd47d4b4a220d4d259bf034ac56"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"404608dd146d6238e50ea8c9a316a2df4509d775","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"The Capabilities API allows you to directly discover which functions from the V2 API functionality, including the selectable aggregate functions, are supported by the currently configured storage driver. A capabilities query returns a"},{"line_number":61,"context_line":"flattened dictionary of properties with associated boolean values - the"},{"line_number":62,"context_line":"\u0027False\u0027 value means that the corresponding feature is not available in the backend."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":".. autotype:: ceilometer.api.controllers.v2.CapabilitiesController"},{"line_number":65,"context_line":"   :webprefix: /v2/capabilities"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAWH%2F%2FmlM%3D","line":62,"updated":"2014-03-15 08:55:06.000000000","message":"a/the \u0027False\u0027 value/a \u0027False\u0027 or absent value/","commit_id":"c870538ca2606fd47d4b4a220d4d259bf034ac56"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1bdbee7789b8adaf922b0ef32723b326e725cab5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"flattened dictionary of properties with associated boolean values - the"},{"line_number":62,"context_line":"\u0027False\u0027 value means that the corresponding feature is not available in the backend."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":".. autotype:: ceilometer.api.controllers.v2.CapabilitiesController"},{"line_number":65,"context_line":"   :webprefix: /v2/capabilities"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":".. autotype:: ceilometer.api.controllers.v2.Capabilities"}],"source_content_type":"text/x-rst","patch_set":4,"id":"AAAAWH%2F%2FmeQ%3D","line":64,"updated":"2014-03-15 11:40:22.000000000","message":"I\u0027m sorry, it\u0027s my mistake that I haven\u0027t checked this, when I asked you to use \u0027webprefix\u0027. Here you need to use \u0027rest-controller\u0027 instead of \u0027autotype\u0027:\n\n.. rest-controller:: ceilometer.api...","commit_id":"c870538ca2606fd47d4b4a220d4d259bf034ac56"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"f78f721532007518c85b165e31cc71732cb5e2ff","unresolved":false,"context_lines":[{"line_number":66,"context_line":"\u0027False\u0027 or absent value means that the corresponding feature is not available"},{"line_number":67,"context_line":"in the backend."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":".. rest-controller:: ceilometer.api.controllers.v2.CapabilitiesController"},{"line_number":70,"context_line":"   :webprefix: /v2/capabilities"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":".. autotype:: ceilometer.api.controllers.v2.Capabilities"}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAWH%2F%2Fl5U%3D","line":69,"updated":"2014-03-15 18:07:13.000000000","message":"One more here: s/v2.CapabilitiesController/v2:CapabilitiesController/\n\nThe \u0027get\u0027 method in CapabilitiesController in v2.py needs doc string to be added, without that it will still not work. So you need to add doc string here: \nhttps://github.com/openstack/ceilometer/blob/master/ceilometer/api/controllers/v2.py#L2421\n\nYou can find a sample, that how a doc string looks like and should be formatted, here:\nhttps://github.com/openstack/ceilometer/blob/master/ceilometer/api/controllers/v2.py#L1868\n\nIt will be enough to add only one sentence, which describes the functionality of this endpoint, like:\n\n\"\"\" Returns a flattened dictionary of API capabilities that allows to directly discover which functions, from the V2 API functionality, are supported by the currently configured database driver.\n\n\"\"\"\n\nCheck the indentation of the doc string, it should look like the one in the above example I included the link of. In that file you can find examples that how the text should be indented in case of multi-line texts. It is also important, that in v2.py you cannot add lines that are longer than 79 character, as this will fail on the pep8 gate.","commit_id":"3846b35abdad79bb4f9cf7e7c2d71dfa1e4d90ce"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"bdc83203fd444f07939d1b4547bf6fa7c374462b","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Capabilities"},{"line_number":60,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":".. rest-controller:: ceilometer.api.controllers.v2:CapabilitiesController"},{"line_number":63,"context_line":"   :webprefix: /v2/capabilities"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAAWH%2F%2Fi9o%3D","line":61,"updated":"2014-03-17 06:49:53.000000000","message":"Was dropping the following paragraph intentional or an oversight:\n\n\"The Capabilities API allows you to directly discover which functions ... a \u0027False\u0027 or absent value means that the corresponding feature is not available in the backend.\"\n\nSee: https://review.openstack.org/#/c/80299/5..6/doc/source/webapi/v2.rst","commit_id":"e72862e97877317624716ea2cdbda7ea2f017b77"}]}
