class Delayed::Plugins::Tracer::Handler
Attributes
active_span[R]
tracer[R]
Public Class Methods
new(tracer:, active_span: nil, lifecycle:)
click to toggle source
# File lib/delayed/plugins/tracer/handler.rb, line 5 def initialize(tracer:, active_span: nil, lifecycle:) @tracer = tracer @active_span = active_span lifecycle.around(:enqueue, &method(:enqueue)) lifecycle.around(:perform, &method(:perform)) end
Public Instance Methods
enqueue(job, &proceed)
click to toggle source
# File lib/delayed/plugins/tracer/handler.rb, line 13 def enqueue(job, &proceed) tags = { 'component' => 'Delayed::Job', 'span.kind' => 'client', 'dj.queue' => (job.queue || 'default') } Method::Tracer.trace(operation_name(job), tracer: tracer, child_of: active_span, tags: tags) do |span| inject(span, job) proceed.call(job) end end
perform(worker, job, &proceed)
click to toggle source
# File lib/delayed/plugins/tracer/handler.rb, line 25 def perform(worker, job, &proceed) tags = { 'component' => 'Delayed::Job', 'span.kind' => 'server', 'dj.id' => job.id, 'dj.queue' => (job.queue || 'default'), 'dj.attempts' => job.attempts } parent_span_context = extract(job) Method::Tracer.trace(operation_name(job), tracer: tracer, child_of: parent_span_context, tags: tags) do |span| proceed.call(worker, job) end end
Private Instance Methods
extract(job)
click to toggle source
# File lib/delayed/plugins/tracer/handler.rb, line 48 def extract(job) return unless job.metadata carrier = MultiJson.load(job.metadata) tracer.extract(OpenTracing::FORMAT_TEXT_MAP, carrier) rescue MultiJson::ParseError end
inject(span, job)
click to toggle source
# File lib/delayed/plugins/tracer/handler.rb, line 42 def inject(span, job) carrier = {} tracer.inject(span.context, OpenTracing::FORMAT_TEXT_MAP, carrier) job.metadata = MultiJson.dump(carrier) end
operation_name(job)
click to toggle source
# File lib/delayed/plugins/tracer/handler.rb, line 55 def operation_name(job) YAML.load(job.handler).class.to_s rescue "UnknownJob" end