class Sidekiq::Monitor::Counters::Base

Attributes

enqueued[R]
name[R]
runtime[R]

Public Class Methods

all(force = false) click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 19
def self.all(force = false)
  update if force || update_needed?

  Sidekiq.redis do |conn|
    names.inject({}) do |memo, name|
      memo[name] = conn.hgetall(new(name).key)
      memo
    end
  end
end
events_column() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 15
def self.events_column
  raise NotImplementedError
end
names() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 30
def self.names
  Sidekiq.redis do |conn|
    conn.smembers(namespace).sort
  end
end
namespace() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 11
def self.namespace
  raise NotImplementedError
end
new(name, enqueued = nil, runtime = nil) click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 7
def initialize(name, enqueued = nil, runtime = nil)
  @name, @enqueued, @runtime = name, enqueued, runtime
end
update() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 36
def self.update
  events = Sidekiq::Monitor::Event
  Sidekiq.redis { |conn| conn.set("#{namespace}:updated_at", Time.now) }
  events.connection.execute("SELECT #{events_column}, COUNT(id), AVG(runtime) FROM #{events.table_name} \
    GROUP BY #{events_column}").values.each do |name, enqueued, runtime|

    new(name, enqueued, runtime).save
  end
end
update_needed?() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 46
def self.update_needed?
  updated_at.nil? || updated_at.advance(seconds: 10).past?
end
updated_at() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 50
def self.updated_at
  Sidekiq.redis { |conn| Time.parse conn.get("#{namespace}:updated_at") }
rescue
end

Public Instance Methods

key() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 55
def key
  "#{self.class.namespace}:#{name}"
end
save() click to toggle source
# File lib/sidekiq/monitor/counters/base.rb, line 59
def save
  Sidekiq.redis do |conn|
    conn.pipelined do
      conn.hmset(key, :enqueued, enqueued, :runtime, runtime)
      conn.sadd(self.class.namespace, name)
    end
  end
end