Add a v2 reporting endpoint
See "specs/train/add_v2_reporting_endpoint.rst" for details. Change-Id: I821a89572610d1d04369571d4d597ed96cc304cd Story: 2005664 Task: 30957
This commit is contained in:
parent
ea093e834d
commit
ce5cc73278
222
specs/train/add_v2_reporting_endpoint.rst
Normal file
222
specs/train/add_v2_reporting_endpoint.rst
Normal file
@ -0,0 +1,222 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
===========================
|
||||
Add a v2 reporting endpoint
|
||||
===========================
|
||||
|
||||
https://storyboard.openstack.org/#!/story/2005664
|
||||
|
||||
Problem Description
|
||||
===================
|
||||
|
||||
Now that the v2 storage has been merged, new features can be implemented on
|
||||
top of it. This is a proposal for a v2 endpoint replacing v1's
|
||||
``/report/summary``. The endpoint should support filters and grouping on any
|
||||
``groupby`` attribute.
|
||||
|
||||
Proposed Change
|
||||
===============
|
||||
|
||||
The proposed endpoint will support pagination, a dict of filters, and a list of
|
||||
attributes to group data by.
|
||||
|
||||
Example usecases:
|
||||
|
||||
* A per-user total for the current month, for the whole cloud:
|
||||
|
||||
Example client usage::
|
||||
|
||||
cloudkitty summary get --groupby user_id
|
||||
|
||||
This would result in the following HTTP request::
|
||||
|
||||
GET /v2/summary?groupby=user_id
|
||||
|
||||
* A per-resource total for scope X and user Y for a specific week:
|
||||
|
||||
Example client usage::
|
||||
|
||||
cloudkitty summary get --filter project_id:X --filter user_id:Y --groupby id --begin 2019-05-01T00:00:00 --end 2019-05-07T00:00:00
|
||||
|
||||
This would result in the following HTTP request::
|
||||
|
||||
GET /v2/summary?filter=project_id:X&filter=user_id:Y&groupby=id&begin=2019-05-01T00%3A00%3A00&end=2019-05-07T00%3A00%3A00
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
There is no direct change to the data model. However, the v2 storage interface
|
||||
will have to be updated: no distinction should be made between ``groupby`` and
|
||||
``metadata`` filters. Thus, the ``group_filters`` parameter should be removed
|
||||
from the prototypes of the ``retrieve`` and ``total`` function.
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
This will add an endpoint on ``/v2/summary`` with support for the ``GET``
|
||||
HTTP method.
|
||||
|
||||
The method will support the following parameters:
|
||||
|
||||
* ``offset``: (optional, defaults to 0) The offset of the first element that
|
||||
should be returned.
|
||||
|
||||
* ``limit``: (optional, defaults to 100) The maximal number of results to
|
||||
return.
|
||||
|
||||
* ``filter``: (optional) A dict of metadata filters to apply.
|
||||
|
||||
* ``groupby``: (optional) A list of attributes to group by.
|
||||
|
||||
* ``begin``: (optional, defaults to the first day of the month at midnight)
|
||||
start of the period the request should apply to.
|
||||
|
||||
* ``end``: (optional, defaults to the first day of the next month at midnight)
|
||||
end of the period the request should apply to.
|
||||
|
||||
A ``GET`` request on this endpoint will return a JSON object of the following
|
||||
format:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: "object"
|
||||
properties:
|
||||
total:
|
||||
type: "integer"
|
||||
columns:
|
||||
type: "array"
|
||||
items:
|
||||
type: "string"
|
||||
results:
|
||||
type: "array"
|
||||
items:
|
||||
oneOf:
|
||||
- type: string
|
||||
- type: string
|
||||
format: datetime
|
||||
- type: integer
|
||||
- type: float
|
||||
|
||||
``total`` contains the total number of matching elements (for pagination).
|
||||
|
||||
``columns`` contains the list of columns available for each element of
|
||||
``results``.
|
||||
|
||||
``results`` is a list of same-length arrays sorted in the same way as
|
||||
``columns``.
|
||||
|
||||
Example response:
|
||||
|
||||
.. code-block::
|
||||
|
||||
GET /v2/summary?groupby=user_id
|
||||
|
||||
{
|
||||
"total": 20,
|
||||
"columns": [
|
||||
"begin",
|
||||
"end",
|
||||
"qty",
|
||||
"rate",
|
||||
"user_id"
|
||||
],
|
||||
"results": [
|
||||
[
|
||||
"2019-05-01T00:00:00Z",
|
||||
"2019-06-01T00:00:00Z",
|
||||
42.21,
|
||||
13.37,
|
||||
"f6b331ad-af19-45b9-a4a3-2d27e8ab76e0"
|
||||
],
|
||||
[...]
|
||||
]
|
||||
}
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
There is no security impact introduced by this patch.
|
||||
|
||||
.. note:: In order to limit access, requests from non-admin users will
|
||||
automatically have a filter on their project added.
|
||||
|
||||
Notifications Impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
The client's ``summary get`` method will be updated when using the v2 API in
|
||||
order to provide support for pagination, filters and grouping. User experience
|
||||
will be improved, as users will have a more precise view of their resource
|
||||
usage.
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
peschk_l
|
||||
|
||||
Other contributors:
|
||||
jferrieu
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Update the prototype of the ``retrieve`` and ``total`` methods of the v2
|
||||
storage interface in order to remove the ``group_filters`` parameter.
|
||||
|
||||
* Implement the endpoint.
|
||||
|
||||
* Add tempest tests for this endpoint.
|
||||
|
||||
* Add support for the endpoint to the client.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Tempest tests for this endpoint will be added.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
The endpoint will be added to the API reference.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
None
|
Loading…
Reference in New Issue
Block a user