添加 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 存储接口需要更新:groupbymetadata 过滤器之间不应进行区分。 因此,应从 retrievetotal 函数的原型中删除 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 存储接口的 retrievetotal 方法的原型,以删除 group_filters 参数。

  • 实现该端点。

  • 为该端点添加 tempest 测试。

  • 将对客户端添加对该端点的支持。

依赖项

测试

将添加该端点的 tempest 测试。

文档影响

该端点将被添加到 API 参考中。

参考资料