2013-04-05 7 views

答えて

21

あなたはSidekiqが提供するRedisの情報を使用することができます:

redis_info = Sidekiq.redis { |conn| conn.info } 
redis_info['connected_clients'] # => "16" 

Sidekiq's Sinatra status appからそれを取ったが、私はこのような何かを行うことができるようにしたいです。

+5

'conn.info'があろうと使用可能なRedisの接続やサーバーがありません場合は例外を発生させる 'Redis :: CannotConnectError' –

4

私はこのメソッドをRailsにoboveの答えを返します。接続されている場合はtrue、そうでない場合はfalseを返します。

def redis_connected? 
    !!Sidekiq.redis(&:info) rescue false 
    end 
8

特定の時点でジョブを処理して実行するSidekiqプロセスがあるかどうかを知りたいと思うようです。 Sidekiq 3.0では、あなたがこれを行うことができます:

require 'sidekiq/api' 

ps = Sidekiq::ProcessSet.new 
if ps.size > 0 
    MyWorker.perform_async(1,2,3) 
else 
    MyWorker.new.perform(1,2,3) 
end 

Sidekiq :: ProcessSetはあなたに実行しているSidekiqプロセスに関する情報(5秒毎に更新)、ほぼリアルタイムに提供します。

okcomputer宝石を使用してそれらのために、これは私が設定したカスタムチェックで、overalldukaの答え@飛び降り
1
begin 
    MrWorker.perform_async('do_work', user.id) 
rescue Redis::CannotConnectError => e 
    MrWorker.new.perform('do_work', user.id) 
end 
2

class SidekiqCheck < OkComputer::Check 
    def check 
    if sidekiq_accessible? 
     mark_message "ok" 
    else 
     mark_failure 
    end 
    end 

    private 
    def sidekiq_accessible? 
    begin 
     Sidekiq.redis { |conn| conn.info } 
    rescue Redis::CannotConnectError 
    end.present? 
    end 
end 

OkComputer::Registry.register "sidekiq", SidekiqCheck.new