添加 v2 报告端点¶
https://storyboard.openstack.org/#!/story/2005664
问题描述¶
现在 v2 存储已经合并,可以在其基础上实现新功能。 这是一项关于 v2 端点的提案,用于替换 v1 的 /report/summary。 该端点应支持对任何 groupby 属性进行过滤和分组。
提议的变更¶
提议的端点将支持分页、过滤器字典以及用于按数据分组的属性列表。
示例用例
当前月份的每个用户的总计,针对整个云
示例客户端用法
cloudkitty summary get --groupby user_id
这将导致以下 HTTP 请求
GET /v2/summary?groupby=user_id
针对特定周,scope X 和用户 Y 的每个资源的统计总计
示例客户端用法
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
这将导致以下 HTTP 请求
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
备选方案¶
无
数据模型影响¶
数据模型没有直接更改。 但是,v2 存储接口需要更新:groupby 和 metadata 过滤器之间不应进行区分。 因此,应从 retrieve 和 total 函数的原型中删除 group_filters 参数。
REST API 影响¶
这将添加一个位于 /v2/summary 的端点,并支持 GET HTTP 方法。
该方法将支持以下参数
offset:(可选,默认为 0) 应返回的第一个元素的偏移量。limit:(可选,默认为 100) 要返回的最大结果数。filter:(可选) 要应用的元数据过滤器字典。groupby:(可选) 要分组的属性列表。begin:(可选,默认为午夜的当月第一天) 请求应应用的周期的开始时间。end:(可选,默认为午夜的下个月第一天) 请求应应用的周期的结束时间。
对该端点的 GET 请求将返回以下格式的 JSON 对象
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 包含匹配元素的总数(用于分页)。
columns 包含 results 的每个元素的可用列列表。
results 是一个与 columns 排序方式相同的同长度数组列表。
示例响应
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"
],
[...]
]
}
安全影响¶
此补丁不会引入任何安全影响。
注意
为了限制访问,来自非管理员用户的请求将自动添加其项目过滤器。
通知影响¶
无
其他最终用户影响¶
当使用 v2 API 时,客户端的 summary get 方法将被更新,以便为分页、过滤器和分组提供支持。 用户体验将得到改善,因为用户将对他们的资源使用情况有更精确的了解。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
peschk_l
- 其他贡献者
jferrieu
工作项¶
更新 v2 存储接口的
retrieve和total方法的原型,以删除group_filters参数。实现该端点。
为该端点添加 tempest 测试。
将对客户端添加对该端点的支持。
依赖项¶
无
测试¶
将添加该端点的 tempest 测试。
文档影响¶
该端点将被添加到 API 参考中。
参考资料¶
无