lib/sidekiq/prometheus/exporter/standard.rb in sidekiq-prometheus-exporter-0.1.15 vs lib/sidekiq/prometheus/exporter/standard.rb in sidekiq-prometheus-exporter-0.1.16
- old
+ new
@@ -8,20 +8,22 @@
module Exporter
class Standard
TEMPLATE = ERB.new(File.read(File.expand_path('templates/standard.erb', __dir__)))
QueueStats = Struct.new(:name, :size, :latency)
+ QueueWorkersStats = Struct.new(:total_workers, :busy_workers, :processes)
+ WorkersStats = Struct.new(:total_workers, :by_queue)
def self.available?
true
end
def initialize
@overview_stats = Sidekiq::Stats.new
@queues_stats = queues_stats
+ @workers_stats = workers_stats
@max_processing_times = max_processing_times
- @total_workers = total_workers
end
def to_s
TEMPLATE.result(binding).chomp!
end
@@ -32,22 +34,34 @@
Sidekiq::Queue.all.map do |queue|
QueueStats.new(queue.name, queue.size, queue.latency)
end
end
+ def workers_stats
+ workers_stats = WorkersStats.new(0, {})
+
+ Sidekiq::ProcessSet.new.each_with_object(workers_stats) do |process, stats|
+ stats.total_workers += process['concurrency'].to_i
+
+ process['queues'].each do |queue|
+ stats.by_queue[queue] ||= QueueWorkersStats.new(0, 0, 0)
+ stats.by_queue[queue].processes += 1
+ stats.by_queue[queue].busy_workers += process['busy'].to_i
+ stats.by_queue[queue].total_workers += process['concurrency'].to_i
+ end
+ end
+ end
+
def max_processing_times
now = Time.now.to_i
+
Sidekiq::Workers.new
.map { |_, _, execution| execution }
.group_by { |execution| execution['queue'] }
.each_with_object({}) do |(queue, executions), memo|
oldest_execution = executions.min_by { |execution| execution['run_at'] }
memo[queue] = now - oldest_execution['run_at']
end
- end
-
- def total_workers
- Sidekiq::ProcessSet.new.map { |process| process['concurrency'].to_i }.reduce(0, :+)
end
end
end
end
end