Sha256: ff107b267f51bff2e253f0857fc764629a676d20a4a30a91238468856c9b6f11
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
module Sidekiq module Monitor module Counters class Base attr_reader :name, :enqueued, :runtime def initialize(name, enqueued = nil, runtime = nil) @name, @enqueued, @runtime = name, enqueued, runtime end def self.namespace raise NotImplementedError end def self.events_column raise NotImplementedError end 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 def self.names Sidekiq.redis do |conn| conn.smembers(namespace).sort end end 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 def self.update_needed? updated_at.nil? || updated_at.advance(seconds: 10).past? end def self.updated_at Sidekiq.redis { |conn| Time.parse conn.get("#{namespace}:updated_at") } rescue end def key "#{self.class.namespace}:#{name}" end 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 end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sidekiq-monitor-0.0.2 | lib/sidekiq/monitor/counters/base.rb |