Module: RocketJob::Plugins::Job::Persistence::ClassMethods

Defined in:
lib/rocket_job/plugins/job/persistence.rb

Instance Method Summary collapse

Instance Method Details

#counts_by_stateObject

Returns [HashString:Integer] of the number of jobs in each state Queued jobs are separated into :queued_now and :scheduled :queued_now are jobs that are awaiting processing and can be processed now. :scheduled are jobs scheduled to run the future.

Note: If there are no jobs in that particular state then the hash will not have a value for it

Example jobs in every state:

RocketJob::Job.counts_by_state
# => {
     :aborted => 1,
     :completed => 37,
     :failed => 1,
     :paused => 3,
     :queued => 4,
     :running => 1,
     :queued_now => 1,
     :scheduled => 3
   }

Example jobs some states:

RocketJob::Job.counts_by_state
# => {
     :failed => 1,
     :running => 25,
     :completed => 1237
   }


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/rocket_job/plugins/job/persistence.rb', line 43

def counts_by_state
  counts = {}
  collection.aggregate(
    [
      {
        "$group" => {
          _id:   "$state",
          count: {"$sum" => 1}
        }
      }
    ]
  ).each do |result|
    counts[result["_id"].to_sym] = result["count"]
  end

  # Calculate :queued_now and :scheduled if there are queued jobs
  if (queued_count = counts[:queued])
    scheduled_count = RocketJob::Job.scheduled.count
    if scheduled_count.positive?
      queued_now_count    = queued_count - scheduled_count
      counts[:queued_now] = queued_count - scheduled_count if queued_now_count.positive?
      counts[:scheduled]  = scheduled_count
    else
      counts[:queued_now] = queued_count
    end
  end
  counts
end