21

Using the console, how can I tell if sidekiq is connected to a redis server? I want to be able to do something like this:

if (sidekiq is connected to redis) # psuedo code
  MrWorker.perform_async('do_work', user.id)
else
  MrWorker.new.perform('do_work', user.id)
end
keruilin
  • 16,782
  • 34
  • 108
  • 175

5 Answers5

40

You can use Redis info provided by Sidekiq:

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

Took it from Sidekiq's Sinatra status app.

iltempo
  • 15,718
  • 8
  • 61
  • 72
  • 7
    If there's no redis connection or server available that `conn.info` would raise an exception `Redis::CannotConnectError` – Leo Correa May 07 '13 at 18:16
15

I make this method to Rails whit the obove answer, return true if connected and false if not.

  def redis_connected?
    !!Sidekiq.redis(&:info) rescue false
  end
deprecated
  • 5,142
  • 3
  • 41
  • 62
overallduka
  • 1,520
  • 19
  • 27
10

It sounds like you want to know if there is a Sidekiq process up and running to process jobs at a given point in time. With Sidekiq 3.0, you can do this:

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 gives you almost real-time (updated every 5 sec) info about any running Sidekiq processes.

Mike Perham
  • 21,300
  • 6
  • 59
  • 61
3

jumping off @overallduka's answer, for those using the okcomputer gem, this is the custom check i set up:

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
Alex Moore-Niemi
  • 2,913
  • 2
  • 24
  • 22
1
begin
  MrWorker.perform_async('do_work', user.id)
rescue Redis::CannotConnectError => e
  MrWorker.new.perform('do_work', user.id)
end
ryanttb
  • 1,278
  • 13
  • 20