支持按时间戳比较过滤用户消息

https://blueprints.launchpad.net/manila/+spec/query-user-message-by-timestamp

添加支持通过指定时间戳查询用户消息,该时间戳将与 created_at 字段进行比较,Manila 将返回与给定时间条件匹配的所有消息。

问题描述

Manila API 仅支持按离散值(例如 message_id 或 resource_id)过滤用户消息,即使用户消息具有时间戳字段 created_at,用户也无法按给定时间段查询。用户可能对特定时间段内的用户消息感兴趣,以便分析异步错误的根本原因。目前他们需要自行检索和过滤资源消息。此更改将提高搜索用户消息的可用性以及基于时间戳的查询效率。

用例

在大规模环境中,可能会创建大量的异步错误消息。为了快速定位错误原因,用户或系统管理员只需要获取在指定时间段内创建的与资源对应的用户消息,而不是查询资源的所有异步错误消息。

提议的变更

提出以下更改:

  • 在搜索用户消息的 URL 中引入两个额外的参数,均为时间戳。

    • created_before 返回早于指定时间的结果。

    • created_since 返回晚于或等于指定时间的结果。

备选方案

数据模型影响

REST API 影响

列出用户消息 API 将接受新的查询字符串参数。用户可以将 created_before 添加到 URL 以查询早于指定时间的用户消息,并将 created_since 添加到 URL 以查询晚于或等于指定时间的用户消息,或者同时使用它们来查询在指定时间间隔内创建的用户消息。此更改还需要提升 API 的微版本以保持向前兼容性。

  • GET /v2/{project_id}/messages?created_since=2019-11-01T01:00:00&created_before=2019-11-02T01:00:00

时间格式为 ISO 8601,可以如下所示

  • 2019-11-01

  • 2019-11-01T01:00

  • 2019-11-01T01:00:00Z

  • 2019-11-01T01:00:00+05:00

安全影响

通知影响

无。

其他最终用户影响

将更新一个命令

manila message-list [--resource_id <resource_id>]
                    [--resource_type <type>] [--action_id <id>]
                    [--detail_id <id>] [--request_id <request_id>]
                    [--level <level>] [--limit <limit>]
                    [--offset <offset>] [--sort-key <sort_key>]
                    [--sort-dir <sort_dir>] [--columns <columns>]
                    [--before <b_time>] [--since <s_time>]

Python 客户端可以添加帮助信息,告知用户此新过滤器,并将更新相应的 cli 命令。

性能影响

在使用数据库引擎时,可以提高基于时间戳的查询性能。此外,使用索引可以提高查询性能。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

haixin<haixin@inspur.com>

工作项

  • 添加 API 过滤器

  • 在 sql 中添加查询支持

  • 添加相关的单元测试和功能测试

  • 添加 python-manilaclient 支持

  • 添加文档更新

依赖项

测试

  1. 单元测试,以测试是否可以正确应用这些过滤器。

  2. Tempest 测试,以从 API 角度验证更改后的过滤器是否工作正常。

文档影响

  1. Manila API 文档需要更新以反映 REST API 的更改。

参考资料