【问题标题】:Detecting when a task has finished through REST APIs通过 REST API 检测任务何时完成
【发布时间】:2021-01-27 02:20:54
【问题描述】:

Sonatype 的 Nexus 存储库服务器提供了经典的 REST API。当通过 REST API 触发操作时,调用会立即返回,通过其状态代码指示操作是否启动成功。我正在寻找一种方法来检测工作是否以及何时成功完成

在我的具体案例中,我正在启动一个备份任务,它以序列化格式将配置数据库写入磁盘:

curl -X POST "$mynexus/service/rest/v1/tasks/$task-id/run" -H "accept: application/json"

立即返回 204“任务已运行”。

但是,在那之后几分钟,手动检查表明该任务创建的磁盘文件仍在增长。当然,我可以尝试观察 lsof 的输出,直到该任务似乎完成,但这非常不切实际,需要对服务器的 root 访问权限,并且还会破坏 REST 设计。

这里的similar question自2016年以来一直没有收到答案,所以我就用更笼统的方式问一下,希望答案更普遍适用:

在与 Sonatype Nexus 3.x 系列服务器通信时,REST 客户端如何检测到服务器端的操作已完全完成?

如果没有这样的方法,您会认为这是 Nexus 的问题,还是建议创建自定义解决方法?

【问题讨论】:

  • GET $mynexus/service/rest/v1/tasks/$task-id 应该返回一个 json 字典,其中包含一个名为 currentState 的字段。
  • @Zeitounator 好像就是这样!您为什么不发表您的评论作为答案,以便我接受?

标签: rest nexus


【解决方案1】:

Nexus 3 有一个获取任务 API 端点,它将为您提供有关特定任务的不同信息,包括其 currentState

GET /service/v1/tasks/{id}

来自以下链接文档的示例 API 响应:

{
  "id" : "0261aed9-9f29-447b-8794-f21693b1f9ac",
  "name" : "Hello World",
  "type" : "script",
  "message" : null,
  "currentState" : "WAITING",
  "lastRunResult" : null,
  "nextRun" : null,
  "lastRun" : null
}

参考:Nexus get task API endpoint documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2014-11-05
    • 1970-01-01
    相关资源
    最近更新 更多