Class: Judoscale::SolidQueue::MetricsCollector

Inherits:
JobMetricsCollector
  • Object
show all
Includes:
ActiveRecordHelper
Defined in:
lib/judoscale/solid_queue/metrics_collector.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMetricsCollector

Returns a new instance of MetricsCollector.



20
21
22
23
24
25
26
27
# File 'lib/judoscale/solid_queue/metrics_collector.rb', line 20

def initialize
  super

  queue_names = run_silently do
    ::SolidQueue::Job.distinct.pluck(:queue_name)
  end
  self.queues |= queue_names
end

Class Method Details

.adapter_configObject



12
13
14
# File 'lib/judoscale/solid_queue/metrics_collector.rb', line 12

def self.adapter_config
  Judoscale::Config.instance.solid_queue
end

.collect?(config) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/judoscale/solid_queue/metrics_collector.rb', line 16

def self.collect?(config)
  super && ActiveRecordHelper.table_exists_for_model?(::SolidQueue::Job)
end

Instance Method Details

#collectObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/judoscale/solid_queue/metrics_collector.rb', line 29

def collect
  metrics = []
  time = Time.now.utc

  oldest_execution_time_by_queue = run_silently do
    ::SolidQueue::ReadyExecution.group(:queue_name).minimum(:created_at)
  end
  self.queues |= oldest_execution_time_by_queue.keys

  if track_busy_jobs?
    busy_count_by_queue = run_silently do
      ::SolidQueue::Job.joins(:claimed_execution).group(:queue_name).count
    end
    self.queues |= busy_count_by_queue.keys
  end

  queues.each do |queue|
    run_at = oldest_execution_time_by_queue[queue]
    latency_ms = run_at ? ((time - run_at) * 1000).ceil : 0
    latency_ms = 0 if latency_ms < 0

    metrics.push Metric.new(:qt, latency_ms, time, queue)

    if track_busy_jobs?
      busy_count = busy_count_by_queue[queue] || 0
      metrics.push Metric.new(:busy, busy_count, time, queue)
    end
  end

  log_collection(metrics)
  metrics
end