diff options
author | Robert Speicher <robert@gitlab.com> | 2017-03-04 01:38:30 +0000 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2017-03-04 01:38:30 +0000 |
commit | 5f190ea18698a9881e3b1411e90e0864050d88f9 (patch) | |
tree | d3f1d0720084ad188bf0605dffb06f254927fdb1 /lib/gitlab/sidekiq_status.rb | |
parent | 445f815bb6c6a6137f7a60552a23a1ae366442ff (diff) | |
parent | ffd970d97dc9faf82752e6494aab8ba6fdce759a (diff) | |
download | gitlab-ce-5f190ea18698a9881e3b1411e90e0864050d88f9.tar.gz |
Merge branch 'sh-improve-sidekiq-status' into 'master'
Make SidekiqStatus able to count number of jobs completed/running
See merge request !9694
Diffstat (limited to 'lib/gitlab/sidekiq_status.rb')
-rw-r--r-- | lib/gitlab/sidekiq_status.rb | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/lib/gitlab/sidekiq_status.rb b/lib/gitlab/sidekiq_status.rb index aadc401ff8d..11e5f1b645c 100644 --- a/lib/gitlab/sidekiq_status.rb +++ b/lib/gitlab/sidekiq_status.rb @@ -44,19 +44,42 @@ module Gitlab # Returns true if all the given job have been completed. # - # jids - The Sidekiq job IDs to check. + # job_ids - The Sidekiq job IDs to check. # # Returns true or false. - def self.all_completed?(jids) - keys = jids.map { |jid| key_for(jid) } + def self.all_completed?(job_ids) + self.num_running(job_ids).zero? + end + + # Returns the number of jobs that are running. + # + # job_ids - The Sidekiq job IDs to check. + def self.num_running(job_ids) + responses = self.job_status(job_ids) - responses = Sidekiq.redis do |redis| + responses.select(&:present?).count + end + + # Returns the number of jobs that have completed. + # + # job_ids - The Sidekiq job IDs to check. + def self.num_completed(job_ids) + job_ids.size - self.num_running(job_ids) + end + + # Returns the job status for each of the given job IDs. + # + # job_ids - The Sidekiq job IDs to check. + # + # Returns an array of true or false indicating job completion. + def self.job_status(job_ids) + keys = job_ids.map { |jid| key_for(jid) } + + Sidekiq.redis do |redis| redis.pipelined do keys.each { |key| redis.exists(key) } end end - - responses.all? { |value| !value } end def self.key_for(jid) |