)]}'
{"specs/juno/gnocchi-custom-aggregation.rst":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4a1d07a1210ae8157b86cd613af1207ca05a71b5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    GET /v1/entity/UUID/measures?aggregation\u003dmoving-average\u0026window\u003d90s\u0026"},{"line_number":43,"context_line":"                   center\u003dFalse"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"The parameters are parsed by pecan and sent to the extension object as a dict."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Alternatives"},{"line_number":48,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"baada198_e5ef4485","line":45,"updated":"2014-07-21 12:52:47.000000000","message":"If a GET request is made with either a non-existent aggregation or with missing required parameters what is the planned response code?","commit_id":"b3625c3d2aa173d441321d091afe7d8380230bc9"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f4484b9359f5c7cf9a4c2141d0f700a5298c2cf5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    GET /v1/entity/UUID/measures?aggregation\u003dmoving-average\u0026window\u003d90s\u0026"},{"line_number":43,"context_line":"                   center\u003dFalse"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"The parameters are parsed by pecan and sent to the extension object as a dict."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Alternatives"},{"line_number":48,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"baada198_0026ca15","line":45,"in_reply_to":"baada198_e5ef4485","updated":"2014-07-28 13:29:48.000000000","message":"It\u0027s currently a 400 Bad Request for unrecognized standard aggregations:\n\n  https://github.com/stackforge/gnocchi/blob/master/gnocchi/rest/__init__.py#L100\n\nAna has followed the same pattern in her patch implementing this BP:\n\n  https://review.openstack.org/#/c/104415/13/gnocchi/rest/__init__.py (line 109)\n\nBut you\u0027re right, would be helpful to state explicitly in the spec.","commit_id":"b3625c3d2aa173d441321d091afe7d8380230bc9"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"We would like to be able to implement custom aggregation functions in the v3"},{"line_number":6,"context_line":"Ceilometer API (Gnocchi) that need moving time windows, such as moving"},{"line_number":7,"context_line":"averages. This requires the retention of raw datapoints, and thus must always"},{"line_number":8,"context_line":"be calculated on-the-go. This blueprint describes a proposed extension to"},{"line_number":9,"context_line":"Gnocchi for moving aggregates."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_86c26f33","line":7,"updated":"2014-07-31 10:11:56.000000000","message":"Request full retention of raw datapoints by the driver, or just an archive with 1s resolution?\n\nAlso, would it be possible for a caller to accept the inherent limitations of mean-of-means, and just make do with the moving average say being calculated over less granular data if that\u0027s all that\u0027s available?","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/ceilometer/+spec/gnocchi-custom-aggregation"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem Description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"When a user asks for a custom aggregate on the data, the API must check that"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_c327f9c5","line":13,"updated":"2014-07-31 10:11:56.000000000","message":"We really should be less picky about case, but the tests currently require \u0027Problem *d*escription\u0027 as opposed to \u0027Problem *D*escription\u0027, see:\n\n  https://github.com/openstack/ceilometer-specs/blob/master/tests/test_titles.py#L43\n\nSo you\u0027ll need to either fix the test accept both cases, or more simply just use a lower case \u0027d\u0027.","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Upon API instantiation, a dict is created that maps the aggregation function"},{"line_number":35,"context_line":"name to the extension object. If the aggregation field in the request matches"},{"line_number":36,"context_line":"one of the names in this dict, the corresponding extension object is called"},{"line_number":37,"context_line":"on the data."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"The required parameters for these functions must be specified in the GET"},{"line_number":40,"context_line":"request::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_c618e7cf","line":37,"updated":"2014-07-31 10:11:56.000000000","message":"Now the corresponding extension object isn\u0027t called on the data any more surely, instead the storage driver object is passed into the custom-aggregator and then the extension itself calls down to the storage driver to retrieve the more fine-grained data.","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"request::"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    GET /v1/entity/UUID/measures?aggregation\u003dmoving-average\u0026window\u003d90s\u0026"},{"line_number":43,"context_line":"                   center\u003dFalse"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"The parameters are parsed by pecan and sent to the extension object as a"},{"line_number":46,"context_line":"dictionary. Currently a 400 status code is returned for a GET request on an"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_46b5b7eb","line":43,"updated":"2014-07-31 10:11:56.000000000","message":"Since the custom aggregator parameters signatures are getting a bit complicated, I wonder would it make sense to consider making query parameters those discoverable for each aggregate?\n\ne.g. via the HTTP OPTIONS verb?\n\nFor example where:\n\n  OPTIONS /v1/entity/UUID/measures?aggregation\u003dmoving-average\n \nis returned some sort of schema representing the available query-params for this aggregation method (just a thought, not sure how feasible it would be).","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"-------------------------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The raw data must be retrieved for each custom aggregate call, which could be"},{"line_number":92,"context_line":"a potential issue for large time series. In addition, the data is currently"},{"line_number":93,"context_line":"returned as a dict, which destroys time ordering, so the custom aggregate"},{"line_number":94,"context_line":"functions currently have to sort the time/value pairs in order to compute"},{"line_number":95,"context_line":"the aggregate."}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_0661ff37","line":92,"updated":"2014-07-31 10:11:56.000000000","message":"In this case, could the custom aggregator split the long time duration into subranges and then yield the results of applying its aggregation piece-wise, in a generator-like pattern?\n\n(assuming the order-destruction issue referenced in my next comment is addressed)","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"a potential issue for large time series. In addition, the data is currently"},{"line_number":93,"context_line":"returned as a dict, which destroys time ordering, so the custom aggregate"},{"line_number":94,"context_line":"functions currently have to sort the time/value pairs in order to compute"},{"line_number":95,"context_line":"the aggregate."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Other Deployer Impact"},{"line_number":98,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_c64627a7","line":95,"updated":"2014-07-31 10:11:56.000000000","message":"Does that order destruction sound like a bug to you in the existing implementation?\n\n(it does a bit to me)","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Create CustomAggregator base class"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Implement custom aggregate classes for the prototype function: moving average"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Create dict of custom aggregate name, extension object pairs"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_e6b96b7d","line":122,"updated":"2014-07-31 10:11:56.000000000","message":"Also ewma, moving-variance, holt-winters etc.?","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The current tests of this proposal are being done with InfluxDB as the"},{"line_number":135,"context_line":"backend. Ultimately this change should work for all configured storage drivers."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Testing"},{"line_number":138,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_269d230b","line":135,"updated":"2014-07-31 10:11:56.000000000","message":"Is that still true, since your recent rebasing?","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"dba9ce3132f07bffd3bd48b52a9460fe08b4c3b5","unresolved":false,"context_lines":[{"line_number":137,"context_line":"Testing"},{"line_number":138,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Tests should be added"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Documentation Impact"},{"line_number":143,"context_line":"\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":2,"id":"baada198_a69053ee","line":140,"updated":"2014-07-31 10:11:56.000000000","message":"Unit tests?\n\n(and/or also more scenario type tests, right through to a real backend?)","commit_id":"6e84d1c24570c2928af368edce5c18bd4baac217"}]}
