添加一个 v2 API 端点来检索 DataFrame 对象¶
https://storyboard.openstack.org/#!/story/2005890
CloudKitty 需要在其 v2 API 中添加一个端点来检索 DataFrame 对象。本规范旨在定义需要做什么以及原因。本文档中的所有内容均可讨论,同样适用于相关的 storyboard 和 gerrit。
问题描述¶
现在已经存在一个可用的端点,绑定在 POST /v2/dataframes 上,允许我们将 DataFrame 对象推送到 CloudKitty 存储后端。我们还需要一个 v2 API 端点来从后端检索这些对象。
此功能也在 v1 API 上可用,地址为 GET /v1/storage/dataframes。因此,有必要将其包含在 v2 API 中。
提议的变更¶
提议的端点将支持分页,一个字典形式的过滤器,以及一个 begin 和一个 end 参数,作为 ISO 8601 字符串,支持时区偏移,例如 2019-08-29T07:18:40+00:00。
它将在 GET /v2/dataframes 上可用。
示例
获取
image.size指标类型,针对项目 X 和用户 Y 的特定周期的所有 dataframe这将导致以下 HTTP 请求
GET /v2/dataframes?filter=type:image.size&filter=project_id:X&filter=user_id:Y&begin=2019-05-01T00:00:00&end=2019-05-07T00:00:00
此功能也将提供给 CloudKitty 客户端库和 CLI。
备选方案¶
无。
数据模型影响¶
无。
REST API 影响¶
这将在 /v2/dataframes 上添加一个端点,并支持 GET HTTP 方法。
该端点将支持以下查询参数
offset:(可选,默认为 0) 应返回的第一个元素的偏移量。limit:(可选,默认为 100) 要返回的最大结果数。filter:(可选) 应用的元数据过滤器字典。begin:(可选,默认为当月第一天午夜) 请求应应用的周期的开始时间。end:(可选,默认为下个月第一天午夜) 请求应应用的周期的结束时间。
对该端点发起的 GET 请求将返回以下格式的 JSON 对象
{
"total": 2,
"dataframes": [
{
"usage": {
"volume.size": [
{
"vol": {
"unit": "GiB",
"qty": 1.9
},
"rating": {
"price": 3.8
},
"groupby": {
"project_id": "8ace6f139a1742548e09f1e446bc9737",
"user_id": "b28fd3f448c34c17bf70e32886900eed",
"id": "be966c6d-78a0-42cf-bab9-e833ed996dee"
},
"metadata": {
"volume_type": ""
}
}
]
},
"period": {
"begin": "2019-08-01T01:00:00+00:00",
"end": "2019-08-01T02:00:00+00:00"
}
},
{
"usage": {
"image.size": [
{
"vol": {
"unit": "MiB",
"qty": 3.55339050293
},
"rating": {
"price": 1.77669525146
},
"groupby": {
"project_id": "5994682e63af4aa8873d247aa28b876e",
"user_id": "b28fd3f448c34c17bf70e32886900eed",
"id": "f7541950-96d5-4e89-ac76-9d4eacf59b83"
},
"metadata": {
"container_format": "foo",
"disk_format": "bar"
}
}
]
},
"period": {
"begin": "2019-08-01T02:00:00+00:00",
"end": "2019-08-01T03:00:00+00:00"
}
}
]
}
对该端点发起的 GET 请求的预期 HTTP 成功响应代码是 200 OK。
对该端点发起的 GET 请求的预期 HTTP 错误响应代码是
400 错误请求:请求格式错误。403 Forbidden:用户没有检索 dataframe 的必要权限。404 Not Found:未找到与提供的参数匹配的 dataframe。
该端点将针对管理员以及请求的 dataframe 的租户/项目所有者进行授权(关于指定的 project_id 过滤器)。
安全影响¶
任何访问此端点用户都将能够检索 CloudKitty 评级的数据信息。因此,应谨慎地将访问此端点的权限授予非管理员用户。
通知影响¶
无。
其他最终用户影响¶
客户端也将更新,以便包含一个函数和一个 CLI 命令,允许检索 DataFrame 对象。
性能影响¶
无。
其他部署者影响¶
对于管理员和部署者来说,检索 Dataframe 将会更容易。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
<jferrieu>
工作项¶
使用单元测试实现 API 端点
添加 tempest 测试
使用单元测试和功能测试支持客户端中的此端点。
依赖项¶
无。
测试¶
将添加该端点的 tempest 测试。
文档影响¶
该端点将被添加到 API 参考中。
参考资料¶
规范:添加 DataFrame/DataPoint 对象:https://specs.openstack.org/openstack/cloudkitty-specs/specs/train/add_dataframe_datapoint_object.html
规范:添加一个 v2 API 端点来推送 DataFrame 对象:https://specs.openstack.org/openstack/cloudkitty-specs/specs/train/add_push_dataframes_api_endpoint.html