Module: Bellbro::SidekiqUtils

Included in:
Service, Worker
Defined in:
lib/bellbro/sidekiq_utils.rb

Instance Method Summary collapse

Instance Method Details

#_jobsObject



12
13
14
15
16
# File 'lib/bellbro/sidekiq_utils.rb', line 12

def _jobs
  Retryable.retryable(on: Redis::TimeoutError) do
    jobs_for_class("#{self.name}")
  end
end

#_workersObject



6
7
8
9
10
# File 'lib/bellbro/sidekiq_utils.rb', line 6

def _workers
  Retryable.retryable(on: Redis::TimeoutError) do
    workers_for_class("#{self.name}")
  end
end

#active_workersObject



18
19
20
21
22
23
24
25
26
# File 'lib/bellbro/sidekiq_utils.rb', line 18

def active_workers
  _workers.map do |w|
    {
        :domain => worker_domain(w),
        :jid => worker_jid(w),
        :time => worker_time(w)
    }
  end
end

#clear_all_queuesObject



108
109
110
111
112
# File 'lib/bellbro/sidekiq_utils.rb', line 108

def clear_all_queues
  queues.each do |q|
    clear_queue(q)
  end
end

#job_domain(job) ⇒ Object



92
93
94
# File 'lib/bellbro/sidekiq_utils.rb', line 92

def job_domain(job)
  job.args.first["domain"] if job.args.any?
end

#job_jid(job) ⇒ Object



96
97
98
# File 'lib/bellbro/sidekiq_utils.rb', line 96

def job_jid(job)
  job.jid
end

#jobs_for_class(klass) ⇒ Object



86
87
88
89
90
# File 'lib/bellbro/sidekiq_utils.rb', line 86

def jobs_for_class(klass)
  queues.map do |q|
    jobs_for_queue(q).select { |job| job.klass == klass }
  end.flatten
end

#jobs_for_queue(q) ⇒ Object



82
83
84
# File 'lib/bellbro/sidekiq_utils.rb', line 82

def jobs_for_queue(q)
  Sidekiq::Queue.new(q)
end

#jobs_in_flight_with_domain(domain) ⇒ Object



40
41
42
# File 'lib/bellbro/sidekiq_utils.rb', line 40

def jobs_in_flight_with_domain(domain)
  jobs_with_domain(domain) + workers_with_domain(domain)
end

#jobs_with_domain(domain) ⇒ Object



36
37
38
# File 'lib/bellbro/sidekiq_utils.rb', line 36

def jobs_with_domain(domain)
  queued_jobs.select { |j| j[:domain] == domain }
end

#number_of_active_workers(q_name) ⇒ Object



100
101
102
# File 'lib/bellbro/sidekiq_utils.rb', line 100

def number_of_active_workers(q_name)
  workers_for_queue(q_name).count
end

#queued_jobsObject



28
29
30
# File 'lib/bellbro/sidekiq_utils.rb', line 28

def queued_jobs
  _jobs.map { |j| {:domain => job_domain(j), :jid => job_jid(j)} }
end

#queuesObject



104
105
106
# File 'lib/bellbro/sidekiq_utils.rb', line 104

def queues
  Sidekiq::Stats::Queues.new.lengths.keys
end

#worker_class(worker) ⇒ Object



74
75
76
# File 'lib/bellbro/sidekiq_utils.rb', line 74

def worker_class(worker)
  worker["payload"]["class"] if worker["payload"]
end

#worker_domain(worker) ⇒ Object



66
67
68
# File 'lib/bellbro/sidekiq_utils.rb', line 66

def worker_domain(worker)
  worker["payload"]["args"].first["domain"] if worker["payload"] && worker["payload"]["args"].try(:any?)
end

#worker_jid(worker) ⇒ Object



62
63
64
# File 'lib/bellbro/sidekiq_utils.rb', line 62

def worker_jid(worker)
  worker["payload"]["jid"] if worker["payload"]
end

#worker_queue(worker) ⇒ Object



78
79
80
# File 'lib/bellbro/sidekiq_utils.rb', line 78

def worker_queue(worker)
  worker["queue"]
end

#worker_time(worker) ⇒ Object



70
71
72
# File 'lib/bellbro/sidekiq_utils.rb', line 70

def worker_time(worker)
  worker["run_at"]
end

#workersObject



44
45
46
47
48
# File 'lib/bellbro/sidekiq_utils.rb', line 44

def workers
  Sidekiq::Workers.new.map do |process_id, thread_id, worker|
    worker
  end
end

#workers_for_class(klass) ⇒ Object



56
57
58
59
60
# File 'lib/bellbro/sidekiq_utils.rb', line 56

def workers_for_class(klass)
  workers.select do |worker|
    worker_class(worker) == klass
  end
end

#workers_for_queue(q) ⇒ Object



50
51
52
53
54
# File 'lib/bellbro/sidekiq_utils.rb', line 50

def workers_for_queue(q)
  workers.select do |worker|
    worker_queue(worker) == q
  end
end

#workers_with_domain(domain) ⇒ Object



32
33
34
# File 'lib/bellbro/sidekiq_utils.rb', line 32

def workers_with_domain(domain)
  active_workers.select { |w| w[:domain] == domain }
end