Module: Speedshop::Cloudwatch::Observations::Sidekiq
- Defined in:
- lib/speedshop/cloudwatch/observations/sidekiq.rb
Class Method Summary collapse
- .avg_utilization(processes) ⇒ Object
- .collect(sidekiq_queues: Config.instance.sidekiq_queues) ⇒ Object
- .queue_observations(sidekiq_queues) ⇒ Object
- .queues_to_monitor(sidekiq_queues) ⇒ Object
- .stat_observations(stats) ⇒ Object
- .utilization_observations(processes) ⇒ Object
Class Method Details
.avg_utilization(processes) ⇒ Object
58 59 60 61 |
# File 'lib/speedshop/cloudwatch/observations/sidekiq.rb', line 58 def avg_utilization(processes) utils = processes.map { |process| process["busy"] / process["concurrency"].to_f }.reject(&:nan?) utils.sum / utils.size.to_f end |
.collect(sidekiq_queues: Config.instance.sidekiq_queues) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/speedshop/cloudwatch/observations/sidekiq.rb', line 11 def collect(sidekiq_queues: Config.instance.sidekiq_queues) stats = ::Sidekiq::Stats.new processes = ::Sidekiq::ProcessSet.new.to_a stat_observations(stats) + utilization_observations(processes) + queue_observations(sidekiq_queues) end |
.queue_observations(sidekiq_queues) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/speedshop/cloudwatch/observations/sidekiq.rb', line 42 def queue_observations(sidekiq_queues) queues_to_monitor(sidekiq_queues).flat_map do |queue| [ {metric: :QueueLatency, value: queue.latency, dimensions: {QueueName: queue.name}}, {metric: :QueueSize, value: queue.size, dimensions: {QueueName: queue.name}} ] end end |
.queues_to_monitor(sidekiq_queues) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/speedshop/cloudwatch/observations/sidekiq.rb', line 51 def queues_to_monitor(sidekiq_queues) all_queues = ::Sidekiq::Queue.all return all_queues if sidekiq_queues.nil? || sidekiq_queues.empty? all_queues.select { |queue| sidekiq_queues.include?(queue.name) } end |
.stat_observations(stats) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/speedshop/cloudwatch/observations/sidekiq.rb', line 18 def stat_observations(stats) { EnqueuedJobs: stats.enqueued, ProcessedJobs: stats.processed, FailedJobs: stats.failed, ScheduledJobs: stats.scheduled_size, RetryJobs: stats.retry_size, DeadJobs: stats.dead_size, Workers: stats.workers_size, Processes: stats.processes_size, DefaultQueueLatency: stats.default_queue_latency }.map do |metric, value| {metric: metric, value: value} end end |
.utilization_observations(processes) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/speedshop/cloudwatch/observations/sidekiq.rb', line 34 def utilization_observations(processes) observations = [{metric: :Capacity, value: processes.sum { |process| process["concurrency"] }}] utilization = avg_utilization(processes) * 100.0 observations << {metric: :Utilization, value: utilization} unless utilization.nan? observations end |