Rails - 通过 API 访问 sidekiq 状态

Rails - Access sidekiq status via API

我正在为工作人员使用 sidekiqsidekiq-status gem,并在网络上跟踪他们的进度 UI:/sidekiq/statuses

对于单个工作人员跟踪 /sidekiq/statuses/job_id

如何通过 API 从前端访问进度信息?

GET /sidekiq/stats 我收到回复:

{
    "sidekiq": {
        "processed": 805,
        "failed": 62,
        "busy": 3,
        "processes": 1,
        "enqueued": 0,
        "scheduled": 0,
        "retries": 1,
        "dead": 0,
        "default_latency": 0
    },
    "redis": {
        "redis_version": "3.0.6",
        "uptime_in_days": "0",
        "connected_clients": "24",
        "used_memory_human": "1.06M",
        "used_memory_peak_human": "2.00M"
    },
    "server_utc_time": "14:50:29 UTC"
}

我可以为 /statuses/job_id 做类似的事情吗?

查看 Sidekiq::Web source 我看到返回的唯一端点 JSON 是 /sidekiq/stats/sidekiq/stats/queues.

记住,Sidekiq 有很多 API helpers for use in your Ruby code。您没有理由不能创建自己的控制器来使用 Ruby API 将作业信息传递到前端。例如。 Sidekiq::Queue.new("high-queue").find_job(jid)

这还有一个好处是可以让您对数据设置更细粒度的用户访问控制,而不是让您前端的任何用户都可以访问 Sidekiq API。

如果您打算大量使用它,您可能会考虑升级到专业版,其中包括 Pro API 和更高效的 Sidekiq::JobSet#find_job(jid) 方法。

最后,如果 Sidekiq 中没有 API 帮助程序,请记住 Sidekiq 只是后端的 Redis,您可以编写自己的 Redis 查询来获取所需形状的正确数据。

如果您想获取单个 sidekiq 队列的统计信息,我已经写了一个小 gem sidekiq_queue_metrics 来实现。它在 Web UI 上提供各个队列统计信息,并提供 API 来获取指标。

require 'sidekiq_queue_metrics'

Sidekiq.configure_server do |config|
  Sidekiq::QueueMetrics.init(config)
end

API 获取统计信息:

Sidekiq::QueueMetrics.fetch
#=> {
  "mailer_queue" => {"processed" => 5, "failed" => 1, "enqueued" => 2, "in_retry" => 0},
  "default_queue" => {"processed" => 10, "failed" => 0, "enqueued" => 1, "in_retry" => 1}
}

网页UI: