Module: Sidekiq::QueueMetrics

Defined in:
lib/sidekiq_queue_metrics/version.rb,
lib/sidekiq_queue_metrics/configuration.rb,
lib/sidekiq_queue_metrics/queue_metrics.rb,
lib/sidekiq_queue_metrics/web_extension.rb,
lib/sidekiq_queue_metrics/monitor/monitor.rb,
lib/sidekiq_queue_metrics/monitor/job_death_monitor.rb,
lib/sidekiq_queue_metrics/monitor/job_success_monitor.rb,
lib/sidekiq_queue_metrics/storage.rb

Defined Under Namespace

Modules: WebExtension Classes: JobDeathMonitor, JobSuccessMonitor, Monitor, Storage

Constant Summary collapse

VERSION =
'2.1'

Class Method Summary collapse

Class Method Details

.failed_jobs(queue) ⇒ Object



49
50
51
# File 'lib/sidekiq_queue_metrics/queue_metrics.rb', line 49

def failed_jobs(queue)
  Storage.failed_jobs(queue).reverse
end

.fetchObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/sidekiq_queue_metrics/queue_metrics.rb', line 5

def fetch
  queues = []
  success_and_failed_stats = enqueued_jobs =  scheduled_jobs = retry_stats = {}
  together do
    async do
      queues = Sidekiq::Queue.all.map(&:name).map(&:to_s)
      queues.each {|queue| enqueued_jobs[queue] = fetch_enqueued_jobs(queue)}
    end

    async {success_and_failed_stats = fetch_success_and_failed_stats}
    async {retry_stats = fetch_retry_stats}
    async {scheduled_jobs = fetch_scheduled_stats}
  end

  queues.map do |queue|
    stats = {'processed' => 0, 'failed' => 0}
    if success_and_failed_stats.has_key?(queue)
      stats['processed'] = val_or_default(success_and_failed_stats[queue]['processed'])
      stats['failed'] = val_or_default(success_and_failed_stats[queue]['failed'])
    end

    stats['enqueued'] = val_or_default(enqueued_jobs[queue])
    stats['in_retry'] = val_or_default(retry_stats[queue])
    stats['scheduled'] = val_or_default(scheduled_jobs[queue])
    {queue => stats}
  end.reduce({}, :merge)
end

.fetch_enqueued_jobs(queue) ⇒ Object



37
38
39
# File 'lib/sidekiq_queue_metrics/queue_metrics.rb', line 37

def fetch_enqueued_jobs(queue)
  Sidekiq::Queue.new(queue).size
end

.fetch_retry_statsObject



41
42
43
# File 'lib/sidekiq_queue_metrics/queue_metrics.rb', line 41

def fetch_retry_stats
  Sidekiq::RetrySet.new.group_by(&:queue).map {|queue, jobs| [queue, jobs.count]}.to_h
end

.fetch_scheduled_statsObject



45
46
47
# File 'lib/sidekiq_queue_metrics/queue_metrics.rb', line 45

def fetch_scheduled_stats
  Sidekiq::ScheduledSet.new.group_by(&:queue).map {|queue, jobs| [queue, jobs.count]}.to_h
end

.fetch_success_and_failed_statsObject



33
34
35
# File 'lib/sidekiq_queue_metrics/queue_metrics.rb', line 33

def fetch_success_and_failed_stats
  JSON.load(Storage.get_stats || '{}')
end

.init(config) ⇒ Object



2
3
4
5
6
7
8
# File 'lib/sidekiq_queue_metrics/configuration.rb', line 2

def self.init(config)
  config.server_middleware do |chain|
    chain.add Sidekiq::QueueMetrics::JobSuccessMonitor
  end

  config.death_handlers << Sidekiq::QueueMetrics::JobDeathMonitor.proc
end

.max_recently_failed_jobsObject



18
19
20
# File 'lib/sidekiq_queue_metrics/configuration.rb', line 18

def self.max_recently_failed_jobs
  @max_recently_failed_jobs || 50
end

.max_recently_failed_jobs=(count) ⇒ Object



14
15
16
# File 'lib/sidekiq_queue_metrics/configuration.rb', line 14

def self.max_recently_failed_jobs=(count)
  @max_recently_failed_jobs = count
end

.storage_locationObject



22
23
24
# File 'lib/sidekiq_queue_metrics/configuration.rb', line 22

def self.storage_location
  @storage_location
end

.storage_location=(key) ⇒ Object



10
11
12
# File 'lib/sidekiq_queue_metrics/configuration.rb', line 10

def self.storage_location=(key)
  @storage_location = key
end