sidekiqで引数を省略しないで表示してほしい

バージョン

  • sidekiq 5.2.8

sidekiqで引数を省略しないで表示してほしい

Sidekiq::Webを使った時の実行中ジョブの一覧(/sidekiq/busy)で、実行中のジョブの引数を見れる。
見れるんだけど、この引数の部分に表示されるのって、truncateされてて、途中で切れてるんだよね・・。

ここ。

全部みたい。全部見せてくれって思って、Sidekiq::Webの画面を色々見ていたのだけど、いまいち見つからない。見つからないので、どうやって表示するかを調べてみた。

どうやらこのジョブ一覧のviewはここ。
https://github.com/mperham/sidekiq/blob/v5.2.8/web/views/busy.erb#L81

    <% workers.each do |process, thread, msg| %>
      <% job = Sidekiq::Job.new(msg['payload']) %>
      <tr>
        <td><%= process %></td>
        <td><%= thread %></td>
        <td><%= job.jid %></td>
        <td>
          <a href="<%= root_path %>queues/<%= msg['queue'] %>"><%= msg['queue'] %></a>
        </td>
        <td><%= job.display_class %></td>
        <td>
          <div class="args"><%= display_args(job.display_args) %></div>
        </td>
        <td><%= relative_time(Time.at(msg['run_at'])) %></td>
      </tr>
    <% end %>

display_argsヘルパがやっていることは、2000文字でのtruncateだった。
https://github.com/mperham/sidekiq/blob/v5.2.8/lib/sidekiq/web/helpers.rb#L209-L220

    def display_args(args, truncate_after_chars = 2000)
      return "Invalid job payload, args is nil" if args == nil
      return "Invalid job payload, args must be an Array, not #{args.class.name}" if !args.is_a?(Array)
      begin
        args.map do |arg|
          h(truncate(to_display(arg), truncate_after_chars))
        end.join(", ")
      rescue
        "Illegal job arguments: #{h args.inspect}"
      end
    end

なので、job.display_argsを直接取得できれば良さそう。
そのためには、workersが何なのかを知る必要がある。
workersは何を指しているかというと、これ
https://github.com/mperham/sidekiq/blob/v5.2.8/lib/sidekiq/web/helpers.rb#L133

    def workers
      @workers ||= Sidekiq::Workers.new
    end

つまり、コンソールで次の用にすればsidekiqの引数全てを取得できるっぽい。

Sidekiq::Workers.new.each do |_process, _thread, msg|
  job = Sidekiq::Job.new(msg['payload'])
  p job['display_args']
end

2000文字以上表示したいケースということで、この出力結果はめっちゃ長くなる。
よしなに加工して表示しよう。

タイトルとURLをコピーしました