Class: ScoutApm::BackgroundJobIntegrations::SidekiqMiddleware
- Inherits:
-
Object
- Object
- ScoutApm::BackgroundJobIntegrations::SidekiqMiddleware
- Defined in:
- lib/scout_apm/background_job_integrations/sidekiq.rb
Overview
We insert this middleware into the Sidekiq stack, to capture each job, and time them.
Constant Summary collapse
- UNKNOWN_CLASS_PLACEHOLDER =
'UnknownJob'.freeze
- ACTIVE_JOB_KLASS =
'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper'.freeze
- DELAYED_WRAPPER_KLASS =
'Sidekiq::Extensions::DelayedClass'.freeze
Instance Method Summary collapse
- #call(_worker, msg, queue) ⇒ Object
- #job_class(msg) ⇒ Object
- #latency(msg, time = Time.now.to_f) ⇒ Object
Instance Method Details
#call(_worker, msg, queue) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/scout_apm/background_job_integrations/sidekiq.rb', line 58 def call(_worker, msg, queue) req = ScoutApm::RequestManager.lookup req.job! req.annotate_request(:queue_latency => latency(msg)) begin req.start_layer(ScoutApm::Layer.new('Queue', queue)) started_queue = true req.start_layer(ScoutApm::Layer.new('Job', job_class(msg))) started_job = true yield rescue req.error! raise ensure req.stop_layer if started_job req.stop_layer if started_queue end end |
#job_class(msg) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/scout_apm/background_job_integrations/sidekiq.rb', line 84 def job_class(msg) job_class = msg.fetch('class', UNKNOWN_CLASS_PLACEHOLDER) if job_class == ACTIVE_JOB_KLASS && msg.key?('wrapped') begin job_class = msg['wrapped'] rescue ACTIVE_JOB_KLASS end elsif job_class == DELAYED_WRAPPER_KLASS begin yml = msg['args'].first deserialized_args = YAML.load(yml) klass, method, *rest = deserialized_args job_class = [klass,method].map(&:to_s).join(".") rescue DELAYED_WRAPPER_KLASS end end job_class rescue UNKNOWN_CLASS_PLACEHOLDER end |
#latency(msg, time = Time.now.to_f) ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/scout_apm/background_job_integrations/sidekiq.rb', line 109 def latency(msg, time = Time.now.to_f) created_at = msg['enqueued_at'] || msg['created_at'] if created_at (time - created_at) else 0 end rescue 0 end |