参加GSOC有感 | 将 Ceph 问题跟踪器与 Ceph 仪表板集成

嘿!大家好我是Shreyaa。我是 Ceph 的 GSoC 2021 学生开发人员。这个博客系列是关于我在 Ceph Organisation 的旅程。自 6 月 6 日 GSoC 编码期开始以来,我一直在与仪表板团队合作。我的导师是 Ernesto Puerta 和 Alfonso Martínez。

我要感谢我的导师和 Ceph 的整个仪表板团队,感谢他们整个夏天的持续支持和指导。每当我遇到困难时,他们总是在那里帮助我,并激励我遵循良好的编码实践。在整个计划中,他们指导我做出更好的设计选择,并不断帮助我作为开发人员改进,并提供建设性的反馈。

我的项目 

我的 GSoC 项目正在将 Ceph 问题跟踪器与 Ceph 仪表板集成。

问题陈述 

当 Ceph 用户遇到错误、面临问题或提出功能请求时,他/她必须前往 Ceph 问题跟踪器报告或请求相同的内容。这会导致几个问题,例如:

  1. 糟糕的用户体验
    用户的工作流程中断。他们必须从一个站点收集相关信息并访问另一个站点以创建新问题。

  2. 漏斗减少 当用户遇到问题时,他/她通常会联系 ceph 用户或开发人员邮件列表来询问相同的问题。并非所有用户都得到回复。假设在 100 个用户报告中,只有 75% 得到回复(粗略数字,仅用于解释)。在得到回复的 75 人中,约有 50 人被要求在 Ceph 问题跟踪器上创建一个新问题。在那些被要求创建问题的人中,由于这个过程的每个阶段的不便,并不是所有的人最终都会访问 Ceph 问题跟踪器。因此,最终报告问题的用户数量非常少。我们可以使用下图更好地理解这一点:

漏斗图

建议的解决方案 

我们提出的解决方案是将 Ceph Issue Tracker 与 Ceph Dashboard 集成。Ceph Dashboard 是 Ceph 项目的前端组件。它可用于监控和更新在 Ceph 环境中运行的服务。

用户应该能够从 Ceph CLI 和 Ceph 仪表板报告问题。

Ceph 用户工作流程

我的工作 

Ceph 问题跟踪器基于 Redmine。Ceph 问题跟踪器公开了可用于创建、获取和更新问题的端点。我在 Ceph 仪表板模块中添加了端点,这些端点调用内部使用这些暴露的 Ceph 问题跟踪器端点的服务。用户可以使用问题编号获取问题并创建新问题。

要创建问题,用户必须在 Ceph 问题跟踪器上拥有一个帐户。这是强制性的,以避免在问题跟踪器上发送垃圾邮件。

my account选项卡下,存储了 API 访问密钥。此 API 密钥用于用户的身份验证和授权。

在以下位置创建问题的可用组件:

  1. 仪表盘
  2. 块 (rbd)
  3. 对象 (rgw)
  4. 文件系统(cephfs)
  5. ceph_manager
  6. 编排器
  7. ceph_volume
  8. core_ceph

要创建的可用跟踪器类型:

  1. 漏洞
  2. 特征

使用命令行界面 

用户使用命令在 Ceph 集群中设置这个键

ceph dashboard set-issue-tracker-api-key -i <file-containing-key>

然后用户可以使用以下方法解决问题:

ceph dashboard get issue <issue_number>

此命令可以在不设置 API 访问密钥的情况下运行

要创建一个新问题:

ceph dashboard create issue <component-name> <tracker-type> <subject> <description>

使用仪表板 

单击窗口右上角的设置图标后,用户需要在导航栏中单击“提出问题”。这将打开一个如下所示的模式:

Ceph 仪表板

用户必须从相应的下拉菜单列表中选择组件和跟踪器。然后他们可以输入问题的标题和描述。然后他们可以继续在 ceph 问题跟踪器中创建问题。之后打开的模态包含所创建问题的详细信息以及重定向到 Ceph 问题跟踪器或停留在当前页面上的选项。

面临的挑战 

我最初使用该python-redmine库来创建问题并熟悉基于 redmine 的问题跟踪器。但是我无法继续使用这个库,因为它不是为 CentOS 打包的,CentOS 是 Ceph 支持的操作系统。

然后我决定继续处理原始 API 请求,但redmine上的文档并不准确。我无法使用文档中给出的 curl 调用和请求正文描述来创建问题。

下一个方法是转储python-redmine图书馆发送的请求为此,我使用了wireshark,但是由于发布请求是加密的,并且库只将请求发送到https安全链接,这不起作用。在 stackoverflow 上花费了无数个小时,我遇到了这些日志记录行,这足以帮助我发现一些参数是作为查询参数发送的。原始请求在那之后工作。

默认情况下,Ceph 问题跟踪器会创建一个错误。我无法使用此功能创建功能。然后我发现了webhook.site,它记录了在唯一生成的 API 端点上发送的请求。所以我记录了一个使用
python-redmine库发送的功能创建请求,并在我的原始请求中发送了一个类似的正文。功能创建现在开始工作了!