Class: Perfm::Metrics::Sidekiq
- Inherits:
-
Object
- Object
- Perfm::Metrics::Sidekiq
- Defined in:
- lib/perfm/metrics/sidekiq.rb
Class Method Summary collapse
- .check_latency_threshold(queue) ⇒ Object
- .collect_metrics ⇒ Object
- .handle_exceeded_latency(queue, expected_latency) ⇒ Object
- .monitor_sidekiq_queues? ⇒ Boolean
- .record_queue_metrics(queue) ⇒ Object
- .setup ⇒ Object
- .start_monitoring ⇒ Object
- .valid_queue_name?(queue_name) ⇒ Boolean
Class Method Details
.check_latency_threshold(queue) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/perfm/metrics/sidekiq.rb', line 40 def check_latency_threshold(queue) return unless expected_latency = QueueLatency.parse_latency(queue.name) if queue.latency > expected_latency handle_exceeded_latency(queue, expected_latency) end end |
.collect_metrics ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/perfm/metrics/sidekiq.rb', line 18 def collect_metrics return unless defined?(::Sidekiq) ::Sidekiq::Queue.all.each do |queue| record_queue_metrics(queue) if monitor_sidekiq_queues? && valid_queue_name?(queue.name) check_latency_threshold(queue) end end end |
.handle_exceeded_latency(queue, expected_latency) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/perfm/metrics/sidekiq.rb', line 48 def handle_exceeded_latency(queue, expected_latency) Thread.new do # TODO: Prevent flooding the error monitoring tool if there are a lot of latency exceeded errors raise Errors::LatencyExceededError.new( queue: queue.name, latency: queue.latency, expected_latency: expected_latency ) end end |
.monitor_sidekiq_queues? ⇒ Boolean
59 60 61 |
# File 'lib/perfm/metrics/sidekiq.rb', line 59 def monitor_sidekiq_queues? @monitor_sidekiq_queues ||= Perfm.configuration.monitor_sidekiq_queues? end |
.record_queue_metrics(queue) ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/perfm/metrics/sidekiq.rb', line 30 def record_queue_metrics(queue) # TODO: Replace this with sending metrics to NewRelic as perfm-ingester work is not complete Perfm.agent.push_metrics({ type: "sidekiq_queue", queue: queue.name, latency: queue.latency, size: queue.size, }) end |
.setup ⇒ Object
5 6 7 |
# File 'lib/perfm/metrics/sidekiq.rb', line 5 def setup start_monitoring end |
.start_monitoring ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/perfm/metrics/sidekiq.rb', line 9 def start_monitoring Thread.new do while true collect_metrics sleep 5 end end end |
.valid_queue_name?(queue_name) ⇒ Boolean
63 64 65 |
# File 'lib/perfm/metrics/sidekiq.rb', line 63 def valid_queue_name?(queue_name) QueueLatency.valid_queue_name?(queue_name) end |